fix-over-tcp
Version:
Custom TCP FIX protocol(beta
122 lines (109 loc) • 3.83 kB
JavaScript
/*
* fixparser
* https://gitlab.com/logotype/fixparser.git
*
* Copyright 2019 Victor Norgren
* Released under the MIT license
*/
import { EventEmitter } from 'events';
import { timestamp } from './util/util';
import FIXParserBase from './FIXParserBase';
import FIXParserClientSocket from './handler/FIXParserClientSocket';
import FIXParserClientWebsocket from './handler/FIXParserClientWebsocket';
import FIXParserClientSocketWithHeader from './handler/FIXParserClientSocketWithHeader';
import Field from './../src/fields/Field';
import Message from './message/Message';
import * as Messages from './../src/constants/ConstantsMessage';
import * as Fields from './../src/constants/ConstantsField';
import * as Side from './../src/constants/ConstantsSide';
import * as OrderTypes from './../src/constants/ConstantsOrderTypes';
import * as HandlInst from './../src/constants/ConstantsHandlInst';
import * as TimeInForce from './../src/constants/ConstantsTimeInForce';
import * as EncryptMethod from './../src/constants/ConstantsEncryptMethod';
import Header from "./Header";
const PROTOCOL_TCP = 'tcp';
const PROTOCOL_WEBSOCKET = 'websocket';
const PROTOCOL_TCP_HEADER = 'tcp-header';
export default class FIXParser extends EventEmitter {
constructor() {
super();
this.fixParserBase = new FIXParserBase();
this.clientHandler = null;
this.host = null;
this.port = null;
this.sender = null;
this.target = null;
this.messageSequence = 1;
this.heartBeatInterval = null;
this.heartBeatIntervalId = null;
this.fixVersion = 'FIX.5.0SP2';
}
connect({
host = 'localhost',
port = '9878',
protocol = PROTOCOL_TCP,
sender = 'SENDER',
target = 'TARGET',
heartbeatIntervalMs = 30000,
fixVersion = this.fixVersion
} = {}) {
switch (protocol) {
case PROTOCOL_TCP:
this.clientHandler = new FIXParserClientSocket(this, this);
break;
case PROTOCOL_TCP_HEADER:
this.clientHandler = new FIXParserClientSocketWithHeader(this, this);
break;
case PROTOCOL_WEBSOCKET:
this.clientHandler = new FIXParserClientWebsocket(this, this);
break;
default:
console.error(
'FIXParser: could not connect, no protocol specified'
);
}
this.clientHandler.host = host;
this.clientHandler.port = port;
this.clientHandler.sender = sender;
this.clientHandler.target = target;
this.clientHandler.heartBeatInterval = heartbeatIntervalMs;
this.clientHandler.fixVersion = fixVersion;
this.clientHandler.connect();
}
getNextTargetMsgSeqNum() {
return this.messageSequence;
}
setNextTargetMsgSeqNum(nextMsgSeqNum) {
this.messageSequence = nextMsgSeqNum;
return this.messageSequence;
}
getTimestamp(dateObject = new Date()) {
return timestamp(dateObject);
}
createMessage(...fields) {
return new Message(this.fixVersion, ...fields);
}
parse(data) {
return this.fixParserBase.parse(data);
}
send(message) {
// let rawMessage=message.encode()
// let packet = Buffer.allocUnsafe(Header.length + rawMessage.length);
// packet.write(Header.ctx.toString(),0);
// packet.write(rawMessage, Header.length)
this.clientHandler.send(message);
}
}
export { Field };
export { Fields };
export { Message };
export { Messages };
export { Side };
export { OrderTypes };
export { HandlInst };
export { TimeInForce };
export { EncryptMethod };
/**
* Export global to the window object.
*/
global.FIXParser = FIXParser;