From d832f50f07b558724cd3c5f37ff831c49ed2b5bb Mon Sep 17 00:00:00 2001 From: Chris Busbey Date: Sun, 21 Feb 2016 11:20:39 -0800 Subject: [PATCH] remove session from public api --- in_session.go | 28 +++++++++++++------------- latent_state.go | 4 ++-- logon_state.go | 4 ++-- logout_state.go | 4 ++-- message_router.go | 2 +- pending_timeout.go | 2 +- registry.go | 20 +++++++++---------- resend_state.go | 2 +- session.go | 50 +++++++++++++++++++++++----------------------- session_state.go | 4 ++-- session_test.go | 14 ++++++------- 11 files changed, 67 insertions(+), 67 deletions(-) diff --git a/in_session.go b/in_session.go index 503c507c1..b66c19d57 100644 --- a/in_session.go +++ b/in_session.go @@ -8,7 +8,7 @@ import ( type inSession struct { } -func (state inSession) FixMsgIn(session *Session, msg Message) (nextState sessionState) { +func (state inSession) FixMsgIn(session *session, msg Message) (nextState sessionState) { var msgType FIXString if err := msg.Header.GetField(tagMsgType, &msgType); err == nil { switch string(msgType) { @@ -39,7 +39,7 @@ func (state inSession) FixMsgIn(session *Session, msg Message) (nextState sessio return state } -func (state inSession) Timeout(session *Session, event event) (nextState sessionState) { +func (state inSession) Timeout(session *session, event event) (nextState sessionState) { switch event { case needHeartbeat: heartBt := NewMessage() @@ -56,7 +56,7 @@ func (state inSession) Timeout(session *Session, event event) (nextState session return state } -func (state inSession) handleLogon(session *Session, msg Message) (nextState sessionState) { +func (state inSession) handleLogon(session *session, msg Message) (nextState sessionState) { if err := session.handleLogon(msg); err != nil { return state.initiateLogout(session, "") } @@ -64,7 +64,7 @@ func (state inSession) handleLogon(session *Session, msg Message) (nextState ses return state } -func (state inSession) handleLogout(session *Session, msg Message) (nextState sessionState) { +func (state inSession) handleLogout(session *session, msg Message) (nextState sessionState) { session.log.OnEvent("Received logout request") state.generateLogout(session) session.application.OnLogout(session.sessionID) @@ -72,7 +72,7 @@ func (state inSession) handleLogout(session *Session, msg Message) (nextState se return latentState{} } -func (state inSession) handleSequenceReset(session *Session, msg Message) (nextState sessionState) { +func (state inSession) handleSequenceReset(session *session, msg Message) (nextState sessionState) { var gapFillFlag FIXBoolean msg.Body.GetField(tagGapFillFlag, &gapFillFlag) @@ -97,7 +97,7 @@ func (state inSession) handleSequenceReset(session *Session, msg Message) (nextS return state } -func (state inSession) handleResendRequest(session *Session, msg Message) (nextState sessionState) { +func (state inSession) handleResendRequest(session *session, msg Message) (nextState sessionState) { if err := session.verifyIgnoreSeqNumTooHighOrLow(msg); err != nil { return state.processReject(session, msg, err) } @@ -131,7 +131,7 @@ func (state inSession) handleResendRequest(session *Session, msg Message) (nextS return state } -func (state inSession) resendMessages(session *Session, beginSeqNo, endSeqNo int) { +func (state inSession) resendMessages(session *session, beginSeqNo, endSeqNo int) { msgs := session.store.GetMessages(beginSeqNo, endSeqNo) seqNum := beginSeqNo @@ -172,7 +172,7 @@ func (state inSession) resendMessages(session *Session, beginSeqNo, endSeqNo int } } -func (state inSession) handleTestRequest(session *Session, msg Message) (nextState sessionState) { +func (state inSession) handleTestRequest(session *session, msg Message) (nextState sessionState) { if err := session.verify(msg); err != nil { return state.processReject(session, msg, err) } @@ -192,7 +192,7 @@ func (state inSession) handleTestRequest(session *Session, msg Message) (nextSta return state } -func (state inSession) processReject(session *Session, msg Message, rej MessageRejectError) (nextState sessionState) { +func (state inSession) processReject(session *session, msg Message, rej MessageRejectError) (nextState sessionState) { switch TypedError := rej.(type) { case targetTooHigh: @@ -222,7 +222,7 @@ func (state inSession) processReject(session *Session, msg Message, rej MessageR } } -func (state inSession) doTargetTooLow(session *Session, msg Message, rej targetTooLow) (nextState sessionState) { +func (state inSession) doTargetTooLow(session *session, msg Message, rej targetTooLow) (nextState sessionState) { var posDupFlag FIXBoolean if err := msg.Header.GetField(tagPossDupFlag, &posDupFlag); err == nil && posDupFlag { @@ -251,14 +251,14 @@ func (state inSession) doTargetTooLow(session *Session, msg Message, rej targetT return state } -func (state *inSession) initiateLogout(session *Session, reason string) (nextState logoutState) { +func (state *inSession) initiateLogout(session *session, reason string) (nextState logoutState) { state.generateLogoutWithReason(session, reason) time.AfterFunc(time.Duration(2)*time.Second, func() { session.sessionEvent <- logoutTimeout }) return } -func (state *inSession) generateSequenceReset(session *Session, beginSeqNo int, endSeqNo int) { +func (state *inSession) generateSequenceReset(session *session, beginSeqNo int, endSeqNo int) { sequenceReset := NewMessage() session.fillDefaultHeader(sequenceReset) @@ -278,11 +278,11 @@ func (state *inSession) generateSequenceReset(session *Session, beginSeqNo int, session.sendBytes(msgBytes) } -func (state *inSession) generateLogout(session *Session) { +func (state *inSession) generateLogout(session *session) { state.generateLogoutWithReason(session, "") } -func (state *inSession) generateLogoutWithReason(session *Session, reason string) { +func (state *inSession) generateLogoutWithReason(session *session, reason string) { reply := NewMessage() reply.Header.SetField(tagMsgType, FIXString("5")) reply.Header.SetField(tagBeginString, FIXString(session.sessionID.BeginString)) diff --git a/latent_state.go b/latent_state.go index 7cb8f8b5c..d0189ce3c 100644 --- a/latent_state.go +++ b/latent_state.go @@ -2,11 +2,11 @@ package quickfix type latentState struct{} -func (state latentState) FixMsgIn(session *Session, msg Message) (nextState sessionState) { +func (state latentState) FixMsgIn(session *session, msg Message) (nextState sessionState) { session.log.OnEventf("Invalid Session State: Unexpected Msg %v while in Latent state", msg) return state } -func (state latentState) Timeout(*Session, event) (nextState sessionState) { +func (state latentState) Timeout(*session, event) (nextState sessionState) { return state } diff --git a/logon_state.go b/logon_state.go index cffe4a539..ec7fc05ce 100644 --- a/logon_state.go +++ b/logon_state.go @@ -2,7 +2,7 @@ package quickfix type logonState struct{} -func (s logonState) FixMsgIn(session *Session, msg Message) (nextState sessionState) { +func (s logonState) FixMsgIn(session *session, msg Message) (nextState sessionState) { var msgType FIXString if err := msg.Header.GetField(tagMsgType, &msgType); err == nil && string(msgType) == "A" { if err := session.handleLogon(msg); err != nil { @@ -17,7 +17,7 @@ func (s logonState) FixMsgIn(session *Session, msg Message) (nextState sessionSt return latentState{} } -func (s logonState) Timeout(session *Session, e event) (nextState sessionState) { +func (s logonState) Timeout(session *session, e event) (nextState sessionState) { if e == logonTimeout { session.log.OnEvent("Timed out waiting for logon response") return latentState{} diff --git a/logout_state.go b/logout_state.go index dba1de8b2..ec67873ac 100644 --- a/logout_state.go +++ b/logout_state.go @@ -3,11 +3,11 @@ package quickfix type logoutState struct { } -func (state logoutState) FixMsgIn(session *Session, msg Message) (nextState sessionState) { +func (state logoutState) FixMsgIn(session *session, msg Message) (nextState sessionState) { return state } -func (state logoutState) Timeout(session *Session, event event) (nextState sessionState) { +func (state logoutState) Timeout(session *session, event event) (nextState sessionState) { switch event { case logoutTimeout: session.log.OnEvent("Timed out waiting for Logout response") diff --git a/message_router.go b/message_router.go index e12d71672..0aa4a158c 100644 --- a/message_router.go +++ b/message_router.go @@ -47,7 +47,7 @@ func (c MessageRouter) tryRoute(beginString FIXString, msgType FIXString, msg Me if string(beginString) == enum.BeginStringFIXT11 && !isAdminMessageType(string(msgType)) { var applVerID FIXString if err := msg.Header.GetField(tagApplVerID, &applVerID); err != nil { - session, _ := LookupSession(sessionID) + session, _ := lookupSession(sessionID) applVerID = FIXString(session.TargetDefaultApplicationVersionID()) } diff --git a/pending_timeout.go b/pending_timeout.go index 39c6234bc..f2e8dfa5b 100644 --- a/pending_timeout.go +++ b/pending_timeout.go @@ -4,7 +4,7 @@ type pendingTimeout struct { inSession } -func (currentState pendingTimeout) Timeout(session *Session, event event) (nextState sessionState) { +func (currentState pendingTimeout) Timeout(session *session, event event) (nextState sessionState) { switch event { case peerTimeout: session.log.OnEvent("Session Timeout") diff --git a/registry.go b/registry.go index 80ec9fe62..5aba8fe14 100644 --- a/registry.go +++ b/registry.go @@ -36,7 +36,7 @@ func Send(m Marshaler) (err error) { //SendToTarget sends a message based on the sessionID. Convenient for use in FromApp since it provides a session ID for incoming messages func SendToTarget(m Marshaler, sessionID SessionID) error { msg := m.Marshal() - session, err := LookupSession(sessionID) + session, err := lookupSession(sessionID) if err != nil { return err } @@ -48,16 +48,16 @@ func SendToTarget(m Marshaler, sessionID SessionID) error { type sessionActivate struct { SessionID - reply chan *Session + reply chan *session } type sessionResource struct { - session *Session + session *session active bool } type sessionLookupResponse struct { - session *Session + session *session err error } @@ -67,7 +67,7 @@ type sessionLookup struct { } type registry struct { - newSession chan *Session + newSession chan *session activate chan sessionActivate deactivate chan SessionID lookup chan sessionLookup @@ -77,7 +77,7 @@ var sessions *registry func init() { sessions = new(registry) - sessions.newSession = make(chan *Session) + sessions.newSession = make(chan *session) sessions.activate = make(chan sessionActivate) sessions.deactivate = make(chan SessionID) sessions.lookup = make(chan sessionLookup) @@ -85,8 +85,8 @@ func init() { go sessions.sessionResourceServerLoop() } -func activate(sessionID SessionID) *Session { - response := make(chan *Session) +func activate(sessionID SessionID) *session { + response := make(chan *session) sessions.activate <- sessionActivate{sessionID, response} return <-response } @@ -95,8 +95,8 @@ func deactivate(sessionID SessionID) { sessions.deactivate <- sessionID } -//LookupSession returns the Session associated with the sessionID. -func LookupSession(sessionID SessionID) (*Session, error) { +//lookupSession returns the Session associated with the sessionID. +func lookupSession(sessionID SessionID) (*session, error) { responseChannel := make(chan sessionLookupResponse) sessions.lookup <- sessionLookup{sessionID, responseChannel} diff --git a/resend_state.go b/resend_state.go index 5b5d7ed4c..60ec07229 100644 --- a/resend_state.go +++ b/resend_state.go @@ -4,7 +4,7 @@ type resendState struct { inSession } -func (state resendState) FixMsgIn(session *Session, msg Message) (nextState sessionState) { +func (state resendState) FixMsgIn(session *session, msg Message) (nextState sessionState) { for ok := true; ok; { nextState = state.inSession.FixMsgIn(session, msg) diff --git a/session.go b/session.go index b9e9407f6..29df9e278 100644 --- a/session.go +++ b/session.go @@ -9,7 +9,7 @@ import ( ) //The Session is the primary FIX abstraction for message communication -type Session struct { +type session struct { store MessageStore log Log @@ -39,13 +39,13 @@ type Session struct { //TargetDefaultApplicationVersionID returns the default application version ID for messages received by this version. //Applicable for For FIX.T.1 sessions. -func (s *Session) TargetDefaultApplicationVersionID() string { +func (s *session) TargetDefaultApplicationVersionID() string { return s.targetDefaultApplVerID } //Creates Session, associates with internal session registry func createSession(sessionID SessionID, storeFactory MessageStoreFactory, settings *SessionSettings, logFactory LogFactory, application Application) error { - session := &Session{sessionID: sessionID} + session := &session{sessionID: sessionID} if sessionID.BeginString == enum.BeginStringFIXT11 { defaultApplVerID, err := settings.Setting(config.DefaultApplVerID) @@ -108,7 +108,7 @@ func createSession(sessionID SessionID, storeFactory MessageStoreFactory, settin } //kicks off session as an initiator -func (s *Session) initiate(msgIn chan fixIn, msgOut chan []byte, quit chan bool) { +func (s *session) initiate(msgIn chan fixIn, msgOut chan []byte, quit chan bool) { s.currentState = logonState{} s.messageStash = make(map[int]Message) s.initiateLogon = true @@ -117,19 +117,19 @@ func (s *Session) initiate(msgIn chan fixIn, msgOut chan []byte, quit chan bool) } //kicks off session as an acceptor -func (s *Session) accept(msgIn chan fixIn, msgOut chan []byte, quit chan bool) { +func (s *session) accept(msgIn chan fixIn, msgOut chan []byte, quit chan bool) { s.currentState = logonState{} s.messageStash = make(map[int]Message) s.run(msgIn, msgOut, quit) } -func (s *Session) onDisconnect() { +func (s *session) onDisconnect() { s.application.OnLogout(s.sessionID) s.log.OnEvent("Disconnected") } -func (s *Session) insertSendingTime(header FieldMap) { +func (s *session) insertSendingTime(header FieldMap) { sendingTime := time.Now().UTC() if s.sessionID.BeginString >= enum.BeginStringFIX42 { @@ -139,7 +139,7 @@ func (s *Session) insertSendingTime(header FieldMap) { } } -func (s *Session) fillDefaultHeader(msg Message) { +func (s *session) fillDefaultHeader(msg Message) { msg.Header.SetField(tagBeginString, FIXString(s.sessionID.BeginString)) msg.Header.SetField(tagSenderCompID, FIXString(s.sessionID.SenderCompID)) msg.Header.SetField(tagTargetCompID, FIXString(s.sessionID.TargetCompID)) @@ -147,7 +147,7 @@ func (s *Session) fillDefaultHeader(msg Message) { s.insertSendingTime(msg.Header) } -func (s *Session) resend(msg Message) { +func (s *session) resend(msg Message) { msg.Header.SetField(tagPossDupFlag, FIXBoolean(true)) var origSendingTime FIXString @@ -161,7 +161,7 @@ func (s *Session) resend(msg Message) { s.sendBytes(msg.rawMessage) } -func (s *Session) send(msg Message) { +func (s *session) send(msg Message) { s.fillDefaultHeader(msg) seqNum := s.store.NextSenderMsgSeqNum() @@ -182,14 +182,14 @@ func (s *Session) send(msg Message) { } } -func (s *Session) sendBytes(msg []byte) { +func (s *session) sendBytes(msg []byte) { s.log.OnOutgoing(string(msg)) s.messageOut <- msg s.stateTimer.Reset(time.Duration(s.heartBeatTimeout)) } -func (s *Session) doTargetTooHigh(reject targetTooHigh) { +func (s *session) doTargetTooHigh(reject targetTooHigh) { resend := NewMessage() resend.Header.SetField(tagMsgType, FIXString("2")) resend.Body.SetField(tagBeginSeqNo, FIXInt(reject.ExpectedTarget)) @@ -203,7 +203,7 @@ func (s *Session) doTargetTooHigh(reject targetTooHigh) { s.send(resend) } -func (s *Session) handleLogon(msg Message) error { +func (s *session) handleLogon(msg Message) error { //Grab default app ver id from fixt.1.1 logon if s.sessionID.BeginString == enum.BeginStringFIXT11 { var targetApplVerID FIXString @@ -271,19 +271,19 @@ func (s *Session) handleLogon(msg Message) error { return nil } -func (s *Session) verify(msg Message) MessageRejectError { +func (s *session) verify(msg Message) MessageRejectError { return s.verifySelect(msg, true, true) } -func (s *Session) verifyIgnoreSeqNumTooHigh(msg Message) MessageRejectError { +func (s *session) verifyIgnoreSeqNumTooHigh(msg Message) MessageRejectError { return s.verifySelect(msg, false, true) } -func (s *Session) verifyIgnoreSeqNumTooHighOrLow(msg Message) MessageRejectError { +func (s *session) verifyIgnoreSeqNumTooHighOrLow(msg Message) MessageRejectError { return s.verifySelect(msg, false, false) } -func (s *Session) verifySelect(msg Message, checkTooHigh bool, checkTooLow bool) MessageRejectError { +func (s *session) verifySelect(msg Message, checkTooHigh bool, checkTooLow bool) MessageRejectError { if reject := s.checkBeginString(msg); reject != nil { return reject } @@ -331,7 +331,7 @@ func (s *Session) verifySelect(msg Message, checkTooHigh bool, checkTooLow bool) return s.fromCallback(msg) } -func (s *Session) fromCallback(msg Message) MessageRejectError { +func (s *session) fromCallback(msg Message) MessageRejectError { var msgType FIXString if msg.Header.GetField(tagMsgType, &msgType); isAdminMessageType(string(msgType)) { return s.application.FromAdmin(msg, s.sessionID) @@ -340,7 +340,7 @@ func (s *Session) fromCallback(msg Message) MessageRejectError { return s.application.FromApp(msg, s.sessionID) } -func (s *Session) checkTargetTooLow(msg Message) MessageRejectError { +func (s *session) checkTargetTooLow(msg Message) MessageRejectError { var seqNum FIXInt switch err := msg.Header.GetField(tagMsgSeqNum, &seqNum); { case err != nil: @@ -352,7 +352,7 @@ func (s *Session) checkTargetTooLow(msg Message) MessageRejectError { return nil } -func (s *Session) checkTargetTooHigh(msg Message) MessageRejectError { +func (s *session) checkTargetTooHigh(msg Message) MessageRejectError { var seqNum FIXInt switch err := msg.Header.GetField(tagMsgSeqNum, &seqNum); { case err != nil: @@ -364,7 +364,7 @@ func (s *Session) checkTargetTooHigh(msg Message) MessageRejectError { return nil } -func (s *Session) checkCompID(msg Message) MessageRejectError { +func (s *session) checkCompID(msg Message) MessageRejectError { var senderCompID FIXString var targetCompID FIXString @@ -387,7 +387,7 @@ func (s *Session) checkCompID(msg Message) MessageRejectError { return nil } -func (s *Session) checkSendingTime(msg Message) MessageRejectError { +func (s *session) checkSendingTime(msg Message) MessageRejectError { if ok := msg.Header.Has(tagSendingTime); !ok { return requiredTagMissing(tagSendingTime) } @@ -404,7 +404,7 @@ func (s *Session) checkSendingTime(msg Message) MessageRejectError { return nil } -func (s *Session) checkBeginString(msg Message) MessageRejectError { +func (s *session) checkBeginString(msg Message) MessageRejectError { var beginString FIXString switch err := msg.Header.GetField(tagBeginString, &beginString); { case err != nil: @@ -416,7 +416,7 @@ func (s *Session) checkBeginString(msg Message) MessageRejectError { return nil } -func (s *Session) doReject(msg Message, rej MessageRejectError) { +func (s *session) doReject(msg Message, rej MessageRejectError) { reply := msg.reverseRoute() if s.sessionID.BeginString >= enum.BeginStringFIX42 { @@ -467,7 +467,7 @@ type fixIn struct { receiveTime time.Time } -func (s *Session) run(msgIn chan fixIn, msgOut chan []byte, quit chan bool) { +func (s *session) run(msgIn chan fixIn, msgOut chan []byte, quit chan bool) { s.messageOut = msgOut defer func() { close(s.messageOut) diff --git a/session_state.go b/session_state.go index e78d2addd..1b7346bc8 100644 --- a/session_state.go +++ b/session_state.go @@ -1,6 +1,6 @@ package quickfix type sessionState interface { - FixMsgIn(*Session, Message) (nextState sessionState) - Timeout(*Session, event) (nextState sessionState) + FixMsgIn(*session, Message) (nextState sessionState) + Timeout(*session, event) (nextState sessionState) } diff --git a/session_test.go b/session_test.go index fb8608384..52a89a92d 100644 --- a/session_test.go +++ b/session_test.go @@ -16,7 +16,7 @@ func getBuilder() Message { } func TestSession_CheckCorrectCompID(t *testing.T) { - session := Session{} + session := session{} session.sessionID.TargetCompID = "TAR" session.sessionID.SenderCompID = "SND" @@ -77,7 +77,7 @@ func TestSession_CheckCorrectCompID(t *testing.T) { } func TestSession_CheckBeginString(t *testing.T) { - session := Session{ + session := session{ sessionID: SessionID{BeginString: "FIX.4.2"}, } @@ -107,7 +107,7 @@ func TestSession_CheckBeginString(t *testing.T) { func TestSession_CheckTargetTooHigh(t *testing.T) { store, _ := NewMemoryStoreFactory().Create(SessionID{}) - session := Session{store: store} + session := session{store: store} builder := getBuilder() msgBytes, _ := builder.Build() msg, _ := parseMessage(msgBytes) @@ -148,7 +148,7 @@ func TestSession_CheckTargetTooHigh(t *testing.T) { } func TestSession_CheckSendingTime(t *testing.T) { - session := Session{} + session := session{} builder := getBuilder() msgBytes, _ := builder.Build() msg, _ := parseMessage(msgBytes) @@ -204,7 +204,7 @@ func TestSession_CheckSendingTime(t *testing.T) { func TestSession_CheckTargetTooLow(t *testing.T) { store, _ := NewMemoryStoreFactory().Create(SessionID{}) - session := Session{store: store} + session := session{store: store} builder := getBuilder() msgBytes, _ := builder.Build() @@ -293,7 +293,7 @@ func TestSession_CheckToAdminCalled(t *testing.T) { <-otherEnd }() - session := Session{store: store, application: app, messageOut: otherEnd} + session := session{store: store, application: app, messageOut: otherEnd} session.toSend = make(chan Message) session.sessionEvent = make(chan event) session.stateTimer = eventTimer{Task: func() { session.sessionEvent <- needHeartbeat }} @@ -339,7 +339,7 @@ func TestSession_CheckToAppCalled(t *testing.T) { <-otherEnd }() - session := Session{store: store, application: app, messageOut: otherEnd} + session := session{store: store, application: app, messageOut: otherEnd} session.toSend = make(chan Message) session.sessionEvent = make(chan event) session.stateTimer = eventTimer{Task: func() { session.sessionEvent <- needHeartbeat }}