package holder import ( "github.com/dk-lockdown/seata-golang/tc/model" "github.com/dk-lockdown/seata-golang/tc/session" "github.com/dk-lockdown/seata-golang/util" ) type DefaultSessionManager struct { AbstractSessionManager SessionMap map[string]*session.GlobalSession } func NewDefaultSessionManager(name string) ISessionManager { return &DefaultSessionManager{ AbstractSessionManager: AbstractSessionManager { TransactionStoreManager: &AbstractTransactionStoreManager{}, Name: name, }, SessionMap: make(map[string]*session.GlobalSession), } } func (sessionManager *DefaultSessionManager) AddGlobalSession(session *session.GlobalSession) error { sessionManager.AbstractSessionManager.AddGlobalSession(session) sessionManager.SessionMap[session.Xid] = session return nil } func (sessionManager *DefaultSessionManager) FindGlobalSession(xid string) *session.GlobalSession { return sessionManager.SessionMap[xid] } func (sessionManager *DefaultSessionManager) FindGlobalSessionWithBranchSessions(xid string, withBranchSessions bool) *session.GlobalSession { return sessionManager.SessionMap[xid] } func (sessionManager *DefaultSessionManager) RemoveGlobalSession(session *session.GlobalSession) error{ sessionManager.AbstractSessionManager.RemoveGlobalSession(session) delete(sessionManager.SessionMap,session.Xid) return nil } func (sessionManager *DefaultSessionManager) AllSessions() []*session.GlobalSession { var sessions = make([]*session.GlobalSession,0) for _,session := range sessionManager.SessionMap { sessions = append(sessions,session) } return sessions } func (sessionManager *DefaultSessionManager) FindGlobalSessions(condition model.SessionCondition) []*session.GlobalSession { var sessions = make([]*session.GlobalSession,0) for _,session := range sessionManager.SessionMap { if int64(util.CurrentTimeMillis()) - session.BeginTime > condition.OverTimeAliveMills { sessions = append(sessions, session) } } return sessions } func (sessionManager *DefaultSessionManager) SetTransactionStoreManager(transactionStoreManager ITransactionStoreManager) { sessionManager.TransactionStoreManager = transactionStoreManager }