public void Next(Message message) { if (!IsSessionTime) { Reset(); return; } Header header = message.Header; string msgType = ""; try { msgType = header.GetField(Fields.Tags.MsgType); string beginString = header.GetField(Fields.Tags.BeginString); if (!beginString.Equals(this.SessionID.BeginString)) throw new UnsupportedVersion(); if (MsgType.LOGON.Equals(msgType)) { if (this.SessionID.IsFIXT) { targetDefaultApplVerID = new ApplVerID(message.GetString(Fields.Tags.DefaultApplVerID)); } else { targetDefaultApplVerID = Message.GetApplVerID(beginString); } } if (this.SessionID.IsFIXT && !Message.IsAdminMsgType(msgType)) { DataDictionary.DataDictionary.Validate(message, SessionDataDictionary, ApplicationDataDictionary, beginString, msgType); } else { this.SessionDataDictionary.Validate(message, beginString, msgType); } //End Refactor if (MsgType.LOGON.Equals(msgType)) NextLogon(message); else if (MsgType.HEARTBEAT.Equals(msgType)) NextHeartbeat(message); else if (MsgType.TEST_REQUEST.Equals(msgType)) NextTestRequest(message); else if (MsgType.SEQUENCE_RESET.Equals(msgType)) NextSequenceReset(message); else if (MsgType.LOGOUT.Equals(msgType)) NextLogout(message); else if (MsgType.RESEND_REQUEST.Equals(msgType)) NextResendRequest(message); else { if (!Verify(message)) return; state_.IncrNextTargetMsgSeqNum(); } } catch (TagException e) { if (null != e.InnerException) this.Log.OnEvent(e.InnerException.Message); GenerateReject(message, e.sessionRejectReason, e.field); } catch (UnsupportedVersion) { if (MsgType.LOGOUT.Equals(msgType)) { NextLogout(message); } else { GenerateLogout("Incorrect BeginString"); state_.IncrNextTargetMsgSeqNum(); } } catch (UnsupportedMessageType e) { this.Log.OnEvent("Unsupported message type: " + e.Message); GenerateBusinessMessageReject(message, Fields.BusinessRejectReason.UNKNOWN_MESSAGE_TYPE, 0); } catch (FieldNotFoundException e) { this.Log.OnEvent("Rejecting invalid message, field not found: " + e.Message); if ((SessionID.BeginString.CompareTo(FixValues.BeginString.FIX42) >= 0) && (message.IsApp())) { GenerateBusinessMessageReject(message, Fields.BusinessRejectReason.CONDITIONALLY_REQUIRED_FIELD_MISSING, e.Field); } else { if (msgType.Equals(Fields.MsgType.LOGON)) { this.Log.OnEvent("Required field missing from logon"); Disconnect("Required field missing from logon"); } else GenerateReject(message, new QuickFix.FixValues.SessionRejectReason(SessionRejectReason.REQUIRED_TAG_MISSING, "Required Tag Missing"), e.Field); } } catch (RejectLogon e) { GenerateLogout(e.Message); Disconnect(e.ToString()); } NextQueued(); Next(); }