diff --git a/server/conn.go b/server/conn.go index d88518e..89f951a 100644 --- a/server/conn.go +++ b/server/conn.go @@ -46,6 +46,7 @@ type Conn struct { gn gnet.Conn kcp *kcp.UDPSession write func(data []byte) error + data map[any]any } // Write 向连接中写入数据 @@ -64,3 +65,23 @@ func (slf *Conn) Close() { } slf.write = nil } + +func (slf *Conn) SetData(key, value any) *Conn { + if slf.data == nil { + slf.data = map[any]any{} + } + slf.data[key] = value + return slf +} + +func (slf *Conn) GetData(key any) any { + return slf.data[key] +} + +func (slf *Conn) ReleaseData() *Conn { + for k := range slf.data { + delete(slf.data, k) + } + slf.data = nil + return slf +} diff --git a/utils/synchronization/map.go b/utils/synchronization/map.go index 2dc2762..c559a80 100644 --- a/utils/synchronization/map.go +++ b/utils/synchronization/map.go @@ -87,6 +87,15 @@ func (slf *Map[Key, Value]) Clear() { } } +func (slf *Map[Key, Value]) ClearHandle(handle func(key Key, value Value)) { + slf.lock.Lock() + defer slf.lock.Unlock() + for k, v := range slf.data { + handle(k, v) + delete(slf.data, k) + } +} + func (slf *Map[Key, Value]) Range(handle func(key Key, value Value)) { slf.lock.RLock() defer slf.lock.RUnlock()