diff --git a/internal/session_settings.go b/internal/session_settings.go index f679473e6..ef7413ebd 100644 --- a/internal/session_settings.go +++ b/internal/session_settings.go @@ -18,7 +18,8 @@ type SessionSettings struct { SkipCheckLatency bool MaxLatency time.Duration DisableMessagePersist bool - ResetSeqTime TimeOfDay + TimeZone *time.Location + ResetSeqTime time.Time EnableResetSeqTime bool // Required on logon for FIX.T.1 messages. diff --git a/session_factory.go b/session_factory.go index dbb8e0a87..f530ddf14 100644 --- a/session_factory.go +++ b/session_factory.go @@ -63,6 +63,8 @@ type sessionFactory struct { BuildInitiators bool } +const shortForm = "15:04:05" + // Creates Session, associates with internal session registry. func (f sessionFactory) createSession( sessionID SessionID, storeFactory MessageStoreFactory, settings *SessionSettings, @@ -280,6 +282,7 @@ func (f sessionFactory) newSession( return } } + s.TimeZone = loc if !settings.HasSetting(config.StartDay) && !settings.HasSetting(config.EndDay) { var weekdays []time.Weekday @@ -354,11 +357,11 @@ func (f sessionFactory) newSession( return } - var seqTime internal.TimeOfDay - if seqTime, err = internal.ParseTimeOfDay(seqTimeStr); err != nil { + var seqTime time.Time + if seqTime, err = time.ParseInLocation(shortForm, seqTimeStr, s.TimeZone); err != nil { err = errors.Wrapf( err, "problem parsing time of day '%v' for setting '%v", - settings.settings[config.StartTime], config.StartTime, + settings.settings[config.ResetSeqTime], config.ResetSeqTime, ) return } diff --git a/session_state.go b/session_state.go index c0c898b74..d97d464e1 100644 --- a/session_state.go +++ b/session_state.go @@ -157,8 +157,9 @@ func (sm *stateMachine) CheckSessionTime(session *session, now time.Time) { func (sm *stateMachine) CheckResetTime(session *session, now time.Time) { if session.EnableResetSeqTime { - ts := internal.NewTimeOfDay(now.Clock()) - if session.ResetSeqTime == ts { + if session.ResetSeqTime.Hour() == now.Hour() && + session.ResetSeqTime.Minute() == now.Minute() && + session.ResetSeqTime.Second() == now.Second() { session.sendLogonInReplyTo(true, nil) } } diff --git a/session_test.go b/session_test.go index 83226fef7..34634f1f3 100644 --- a/session_test.go +++ b/session_test.go @@ -1007,7 +1007,7 @@ func (s *SessionSuite) TestSeqNumResetTime() { s.SetupTest() now := time.Now().UTC() - s.session.ResetSeqTime = internal.NewTimeOfDay(now.Clock()) + s.session.ResetSeqTime = now s.session.EnableResetSeqTime = true s.IncrNextSenderMsgSeqNum()