From 1d11d345bf70b976f82bb573303537ecdff46b9d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=A4=8F=E5=A5=87=E6=A5=A0?= Date: Wed, 7 Feb 2024 17:55:07 +0800 Subject: [PATCH 1/2] set state to logon before return --- session_state.go | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/session_state.go b/session_state.go index c8b1f42a4..6f69f8f3f 100644 --- a/session_state.go +++ b/session_state.go @@ -28,6 +28,10 @@ func (sm *stateMachine) Connect(session *session) { return } + sm.setState(session, logonState{}) + // Fire logon timeout event after the pre-configured delay period. + time.AfterFunc(session.LogonTimeout, func() { session.sessionEvent <- internal.LogonTimeout }) + if session.RefreshOnLogon { if err := session.store.Refresh(); err != nil { session.logError(err) @@ -39,10 +43,6 @@ func (sm *stateMachine) Connect(session *session) { session.logError(err) return } - - sm.setState(session, logonState{}) - // Fire logon timeout event after the pre-configured delay period. - time.AfterFunc(session.LogonTimeout, func() { session.sessionEvent <- internal.LogonTimeout }) } func (sm *stateMachine) Stop(session *session) { @@ -193,8 +193,8 @@ func handleStateError(s *session, err error) sessionState { return latentState{} } -//sessionState is the current state of the session state machine. The session state determines how the session responds to -//incoming messages, timeouts, and requests to send application messages. +// sessionState is the current state of the session state machine. The session state determines how the session responds to +// incoming messages, timeouts, and requests to send application messages. type sessionState interface { //FixMsgIn is called by the session on incoming messages from the counter party. The return type is the next session state //following message processing From a573f85be3a7589dc1c0da1fe4c4a1e967178988 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=A4=8F=E5=A5=87=E6=A5=A0?= Date: Wed, 7 Feb 2024 17:56:41 +0800 Subject: [PATCH 2/2] optimize --- session_state.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/session_state.go b/session_state.go index 6f69f8f3f..fc701b9e1 100644 --- a/session_state.go +++ b/session_state.go @@ -22,13 +22,13 @@ func (sm *stateMachine) Start(s *session) { } func (sm *stateMachine) Connect(session *session) { + sm.setState(session, logonState{}) + // No special logon logic needed for FIX Acceptors. if !session.InitiateLogon { - sm.setState(session, logonState{}) return } - sm.setState(session, logonState{}) // Fire logon timeout event after the pre-configured delay period. time.AfterFunc(session.LogonTimeout, func() { session.sessionEvent <- internal.LogonTimeout })