public void Next(Message message) { 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 (this.SessionID.IsFIXT && !Message.IsAdminMsgType(msgType)) { throw new UnsupportedVersion("'FIXT' Sessions are not implemented yet!"); } else { this.SessionDataDictionary.Validate(message, beginString, msgType); } 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); } NextQueued(); }