示例#1
0
        /// <summary>
        /// Extract Information from the Logout Message sent to server
        /// </summary>
        /// <param name="message"></param>
        /// <param name="sessionID"></param>
        private void OnMessageToAdmin(QuickFix.FIX42.Logout message, SessionID sessionID)
        {
            try
            {
                string text = string.Empty;

                try
                {
                    text = message.Text.getValue();
                }
                catch (QuickFix.FieldNotFoundException fnf) { }

                this._isConnected = false;

                if (text.Contains("MsgSeqNum too low"))
                {
                    //int firstIndex = text.IndexOf("expecting", System.StringComparison.Ordinal);
                    //int secondIndex = text.IndexOf("but", System.StringComparison.Ordinal);
                    //int requiredStartingIndex = firstIndex + 10;
                    //int requiredEndingIndex = secondIndex - 1;

                    //string sequenceNumber = text.Substring(requiredStartingIndex,
                    //                                       (requiredEndingIndex - requiredStartingIndex));

                    //Log.Info("Sequence Number Required: " + sequenceNumber.PadLeft(10, '0'));

                    int firstIndex = text.IndexOf("received", System.StringComparison.Ordinal);

                    Logger.Info((firstIndex + 9) + " | " + (text.Length - (firstIndex + 9)), _type.FullName, "OnMessage");
                    string sequenceNumber = text.Substring(firstIndex + 9, (text.Length - (firstIndex + 9)));

                    Logger.Info("Sequence Number Required: " + sequenceNumber.PadLeft(10, '0'), _type.FullName, "OnMessage");
                    #region Change fix sequence Number

                    Session session = Session.LookupSession(sessionID);
                    session.NextTargetMsgSeqNum = Convert.ToInt32(sequenceNumber.PadLeft(10, '0'));

                    #endregion
                }

                if (Logger.IsInfoEnabled)
                {
                    Logger.Info("Logout Method for 'To Admin'", _type.FullName, "OnMessage");
                    Logger.Info("Text: " + text, _type.FullName, "OnMessage");
                    Logger.Info(
                        " FIX OnLogout - SenderCompID : " + sessionID.SenderCompID + " -> TargetCompID : " +
                        sessionID.TargetCompID, _type.FullName, "OnMessage");
                }
            }
            catch (Exception exception)
            {
                Logger.Error(exception.ToString(), _type.FullName, "OnMessage");
            }
        }
示例#2
0
        /// <summary>
        /// Extract Information from the Logout Message Recieved from server
        /// </summary>
        /// <param name="message"></param>
        /// <param name="sessionId"></param>
        private void OnMessageFromAdmin(QuickFix.FIX42.Logout message, SessionID sessionId)
        {
            try
            {
                string text = string.Empty;

                try
                {
                    text = message.Text.getValue();
                }
                catch (QuickFix.FieldNotFoundException fnf) { }

                this._isConnected = false;

                if (this._tradeSenderCompId.Equals(sessionId.SenderCompID))
                {
                    this._orderSessionId = null;
                }

                if (LogoutArrived != null)
                {
                    LogoutArrived(_provider);
                }

                if (text.Contains("SEQUENCE NUMBER"))
                {
                    // SEQUENCE NUMBER: Seq # 1431 is Lower Than Expected # 2422
                    int firstIndex            = text.IndexOf("Expected", System.StringComparison.Ordinal);
                    int secondIndex           = text.IndexOf("Seq", System.StringComparison.Ordinal);
                    int requiredStartingIndex = firstIndex + 11;
                    int requiredEndingIndex   = text.Length;//secondIndex - 1;

                    string sequenceNumber = text.Substring(requiredStartingIndex,
                                                           (requiredEndingIndex - requiredStartingIndex));

                    Logger.Info("Sequence Number Required: " + sequenceNumber.PadLeft(10, '0'), _type.FullName, "OnMessage");

                    //secondIndex = text.IndexOf("received", System.StringComparison.Ordinal);

                    //Log.Info((secondIndex + 9) + " | " + (text.Length  - (secondIndex + 9)));
                    //sequenceNumber = text.Substring(secondIndex + 9, (text.Length - (secondIndex + 9)));

                    //Log.Info("Sequence Number Required: " + sequenceNumber.PadLeft(10, '0'));
                    #region Change fix sequence Number

                    Session session = Session.LookupSession(sessionId);
                    session.NextSenderMsgSeqNum = Convert.ToInt32(sequenceNumber.PadLeft(10, '0'));

                    #endregion
                }

                if (Logger.IsInfoEnabled)
                {
                    Logger.Info("Logout Method for 'From Admin'", _type.FullName, "OnMessage");
                    Logger.Info("Text: " + text, _type.FullName, "OnMessage");
                    Logger.Info(
                        " FIX OnLogout - SenderCompID : " + sessionId.SenderCompID + " -> TargetCompID : " +
                        sessionId.TargetCompID, _type.FullName, "OnMessage");
                }
            }
            catch (Exception exception)
            {
                Logger.Error(exception.ToString(), _type.FullName, "OnMessage");
            }
        }