@@ -43,7 +43,7 @@ func (state inSession) FixMsgIn(session *session, msg Message) (nextState sessio
4343 case enum .MsgType_LOGOUT :
4444 session .log .OnEvent ("Received logout request" )
4545 session .log .OnEvent ("Sending logout response" )
46- state . generateLogout ( session )
46+ session . sendLogout ( "" )
4747 return latentState {}
4848 case enum .MsgType_TEST_REQUEST :
4949 return state .handleTestRequest (session , msg )
@@ -63,7 +63,8 @@ func (state inSession) FixMsgInRej(session *session, msg Message, rej MessageRej
6363 if err := msg .Header .GetField (tagMsgType , & msgType ); err == nil {
6464 switch string (msgType ) {
6565 case enum .MsgType_LOGON :
66- return state .initiateLogout (session , "" )
66+ session .initiateLogout ("" )
67+ return logoutState {}
6768 case enum .MsgType_LOGOUT :
6869 return latentState {}
6970 }
@@ -199,13 +200,15 @@ func (state inSession) processReject(session *session, msg Message, rej MessageR
199200 case targetTooLow :
200201 return state .doTargetTooLow (session , msg , TypedError )
201202 case incorrectBeginString :
202- return state .initiateLogout (session , rej .Error ())
203+ session .initiateLogout (rej .Error ())
204+ return logoutState {}
203205 }
204206
205207 switch rej .RejectReason () {
206208 case rejectReasonCompIDProblem , rejectReasonSendingTimeAccuracyProblem :
207209 session .doReject (msg , rej )
208- return state .initiateLogout (session , "" )
210+ session .initiateLogout ("" )
211+ return logoutState {}
209212 default :
210213 session .doReject (msg , rej )
211214 session .store .IncrNextTargetMsgSeqNum ()
@@ -228,28 +231,23 @@ func (state inSession) doTargetTooLow(session *session, msg Message, rej targetT
228231
229232 if sendingTime .Before (origSendingTime .Time ) {
230233 session .doReject (msg , sendingTimeAccuracyProblem ())
231- return state .initiateLogout (session , "" )
234+ session .initiateLogout ("" )
235+ return logoutState {}
232236 }
233237
234238 if appReject := session .fromCallback (msg ); appReject != nil {
235239 session .doReject (msg , appReject )
236- return state .initiateLogout (session , "" )
240+ session .initiateLogout ("" )
241+ return logoutState {}
237242 }
238243 } else {
239- return state .initiateLogout (session , rej .Error ())
244+ session .initiateLogout (rej .Error ())
245+ return logoutState {}
240246 }
241247
242248 return state
243249}
244250
245- func (state * inSession ) initiateLogout (session * session , reason string ) (nextState logoutState ) {
246- session .log .OnEvent ("Inititated logout request" )
247- state .generateLogoutWithReason (session , reason )
248- time .AfterFunc (time .Duration (2 )* time .Second , func () { session .sessionEvent <- logoutTimeout })
249-
250- return
251- }
252-
253251func (state * inSession ) generateSequenceReset (session * session , beginSeqNo int , endSeqNo int ) {
254252 sequenceReset := NewMessage ()
255253 session .fillDefaultHeader (sequenceReset )
@@ -269,21 +267,3 @@ func (state *inSession) generateSequenceReset(session *session, beginSeqNo int,
269267 msgBytes , _ := sequenceReset .Build ()
270268 session .sendBytes (msgBytes )
271269}
272-
273- func (state * inSession ) generateLogout (session * session ) {
274- state .generateLogoutWithReason (session , "" )
275- }
276-
277- func (state * inSession ) generateLogoutWithReason (session * session , reason string ) {
278- logout := NewMessage ()
279- logout .Header .SetField (tagMsgType , FIXString ("5" ))
280- logout .Header .SetField (tagBeginString , FIXString (session .sessionID .BeginString ))
281- logout .Header .SetField (tagTargetCompID , FIXString (session .sessionID .TargetCompID ))
282- logout .Header .SetField (tagSenderCompID , FIXString (session .sessionID .SenderCompID ))
283-
284- if reason != "" {
285- logout .Body .SetField (tagText , FIXString (reason ))
286- }
287-
288- session .send (logout )
289- }
0 commit comments