q3rcon-proxy/pkg/udpproxy/sessioncache.go

42 lines
824 B
Go
Raw Permalink Normal View History

package udpproxy
import "sync"
// sessionCache tracks connection sessions
type sessionCache struct {
mu sync.RWMutex
data map[string]*session
}
// newSessionCache creates a usable sessionCache.
func newSessionCache() sessionCache {
return sessionCache{
data: make(map[string]*session),
}
}
// read returns the associated session for an addr
func (sc *sessionCache) read(addr string) (*session, bool) {
sc.mu.RLock()
defer sc.mu.RUnlock()
v, ok := sc.data[addr]
return v, ok
}
// insert adds a session for a given addr.
func (sc *sessionCache) insert(addr string, session *session) {
sc.mu.Lock()
defer sc.mu.Unlock()
sc.data[addr] = session
}
// delete removes the session for the given addr.
func (sc *sessionCache) delete(addr string) {
sc.mu.Lock()
defer sc.mu.Unlock()
delete(sc.data, addr)
}