UNPKG

fix-over-tcp

Version:

Custom TCP FIX protocol(beta

76 lines (65 loc) 2.4 kB
import { Socket } from 'net'; import FIXParserClientBase from './FIXParserClientBase'; import FrameDecoder from '../util/FrameDecoder'; import Header from "../Header"; export default class FIXParserClientSocketWithHeader extends FIXParserClientBase { connect() { this.socket = new Socket(); this.socket.setEncoding('ascii'); this.socket.pipe(new FrameDecoder()).on('data', (data) => { const messages = this.fixParser.parse(data.toString()); let i = 0; for (i; i < messages.length; i++) { this.processMessage(messages[i]); this.eventEmitter.emit('message', messages[i]); } }); this.socket.on('close', () => { this.eventEmitter.emit('close'); this.stopHeartbeat(); }); this.socket.on('error', (error) => { this.eventEmitter.emit('error', error); this.stopHeartbeat(); }); this.socket.on('timeout', () => { this.eventEmitter.emit('timeout'); this.socket.end(); this.stopHeartbeat(); }); this.socket.connect(this.port, this.host, () => { console.log('Connected', this.socket.readyState); if (this.socket.readyState === 'open') { this.eventEmitter.emit('open'); this.startHeartbeat(); } }); } close() { if (this.socket && this.socket.readyState === 'open') { this.socket.close(); } else { console.error( 'FIXParserClientSocketWithHeader: could not close socket, connection not open' ); } } send(message) { if (this.socket.readyState === 'open') { this.fixParser.setNextTargetMsgSeqNum( this.fixParser.getNextTargetMsgSeqNum() + 1 ); // prepend header const rawMessage=message.encode(); const packet = Buffer.allocUnsafe(Header.length + rawMessage.length); packet.write(Header.ctx.toString(),0); packet.write(rawMessage, Header.length); this.socket.write(packet); } else { console.error( 'FIXParserClientSocketWithHeader: could not send message, socket not open', message ); } } }