43 lines
779 B
Go
43 lines
779 B
Go
package main
|
|
|
|
import (
|
|
"aim-oscar/oscar"
|
|
"sync"
|
|
)
|
|
|
|
type SessionManager struct {
|
|
sessions map[string]*oscar.Session
|
|
mutex *sync.RWMutex
|
|
}
|
|
|
|
func NewSessionManager() *SessionManager {
|
|
sm := &SessionManager{
|
|
sessions: make(map[string]*oscar.Session),
|
|
mutex: &sync.RWMutex{},
|
|
}
|
|
return sm
|
|
}
|
|
|
|
func (sm *SessionManager) SetSession(screen_name string, session *oscar.Session) {
|
|
sm.mutex.Lock()
|
|
sm.sessions[screen_name] = session
|
|
sm.mutex.Unlock()
|
|
}
|
|
|
|
func (sm *SessionManager) GetSession(screen_name string) *oscar.Session {
|
|
sm.mutex.RLock()
|
|
s, ok := sm.sessions[screen_name]
|
|
sm.mutex.RUnlock()
|
|
|
|
if ok {
|
|
return s
|
|
}
|
|
return nil
|
|
}
|
|
|
|
func (sm *SessionManager) RemoveSession(screen_name string) {
|
|
sm.mutex.Lock()
|
|
sm.sessions[screen_name] = nil
|
|
sm.mutex.Unlock()
|
|
}
|