/// <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"); } }
/// <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"); } }