/// <summary> /// Event object holding fix data from exchange handler /// </summary> /// <param name="msg">FIX 4.2 Message</param> public FIXMessageEventArgs(MESSAGEFIX3Lib.FIXMessage msg) { if (msg != null) { m_Msg = msg; m_MsgType = m_Msg.MsgType; } }
//TODO: [16/04/07] YKC - Hack as i donot care about order types etc /// <summary> /// Generate a fix message /// </summary> /// <param name="MsgType"></param> /// <returns></returns> public FIXMessage CreateFixMessage(MESSAGEFIX3Lib.FIXMsgConstants MsgType) { FIXMessage message = new FIXMessage(); if (Instrument != null) { message.MsgType = MsgType; Instrument.ApplyOrderDetails(message); AddConstants(message); //Add order details if (m_dPrice.HasValue) message.set_AsDouble(FIXTagConstants.esFIXTagPrice, m_dPrice.Value); message.set_AsNumber(FIXTagConstants.esFIXTagOrderQty, (int)m_nOrderQty); message.set_AsString(FIXTagConstants.esFIXTagSide, m_sSide); message.set_AsString(FIXTagConstants.esFIXTagTimeInForce, GetFIXTimeInForce()); message.set_AsString(FIXTagConstants.esFIXTagOrdType, GetFIXOrderType()); if (m_iAccountID.HasValue) message.set_AsNumber(FIXTagConstants.esFIXTagESAccountID, (int)m_iAccountID.Value); return message; } return null; }
/// <summary> /// default implemtation to handle market status - does nothing /// </summary> /// <param name="msg"></param> public virtual void RecvFIXStatusMsg(MESSAGEFIX3Lib.FIXMessage msg) { /*override*/ }
/// <summary> /// write data to the tcp server /// </summary> /// <param name="msg"></param> bool SendFIXMsg(MESSAGEFIX3Lib.FIXMessage msg) { bool bSuccess = false; string sMessage = (string)msg.Render(ClientReader.Delimiter, MESSAGEFIX3Lib.FIXRenderConstants.esFIXRenderFix42); if (sMessage != null) { if (sMessage.Length > 0) { try { //write to stream m_StreamOut.Write(sMessage.ToCharArray()); m_StreamOut.Flush(); bSuccess = true; } catch(Exception e) { //log Disconnect(new ErrorEventArgs(e)); } } } return bSuccess; }
/// <summary> /// virtual function to handle incoming data /// </summary> /// <param name="msgType"></param> /// <param name="msg"></param> public virtual void RecvFIXMsg(MESSAGEFIX3Lib.FIXMsgConstants msgType,MESSAGEFIX3Lib.FIXMessage msg) { switch (msgType) { case MESSAGEFIX3Lib.FIXMsgConstants.esFIXMsgOrderCancelReject: RecvFIXOrderMsg(msg); break; case MESSAGEFIX3Lib.FIXMsgConstants.esFIXMsgBusinessReject: RecvFIXOrderMsg(msg); break; case MESSAGEFIX3Lib.FIXMsgConstants.esFIXMsgExecutionReport: RecvFIXOrderMsg(msg); break; case MESSAGEFIX3Lib.FIXMsgConstants.esFIXMsgReject: RecvFIXOrderMsg(msg); break; case MESSAGEFIX3Lib.FIXMsgConstants.esFIXMsgMarketDataSnapFull: RecvFIXPriceMsg(msg); break; case MESSAGEFIX3Lib.FIXMsgConstants.esFIXMsgMarketDataSnapInc: RecvFIXPriceMsg(msg); break; case MESSAGEFIX3Lib.FIXMsgConstants.esFIXMsgQuote : RecvFIXPriceMsg(msg); break; case MESSAGEFIX3Lib.FIXMsgConstants.esFIXMsgSecuritySts: RecvFIXStatusMsg(msg); break; case MESSAGEFIX3Lib.FIXMsgConstants.esFIXMsgTradingSessSts : RecvFIXStatusMsg(msg); break; case MESSAGEFIX3Lib.FIXMsgConstants.esFIXMsgLogout: RecvFIXDriverMsg(msg); break; case MESSAGEFIX3Lib.FIXMsgConstants.esFIXMsgESComponentStatus : RecvFIXDriverMsg(msg); break; case MESSAGEFIX3Lib.FIXMsgConstants.esFIXMsgEHControl : RecvFIXDriverMsg(msg); break; case MESSAGEFIX3Lib.FIXMsgConstants.esFIXMsgEHError : RecvFIXDriverMsg(msg); break; default: /*do nothing*/ break; } }