-
Notifications
You must be signed in to change notification settings - Fork 0
/
connManager.go
58 lines (45 loc) · 1.27 KB
/
connManager.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
package connection
import (
"sync"
log "github.com/ningzining/L-log"
"github.com/ningzining/lazynet/iface"
)
type ConnManager struct {
connections map[uint32]iface.Connection // 连接集合
connLock sync.RWMutex // 读写锁
}
func NewConnManager() iface.ConnManager {
return &ConnManager{
connections: make(map[uint32]iface.Connection),
}
}
func (c *ConnManager) Add(conn iface.Connection) {
c.connLock.Lock()
defer c.connLock.Unlock()
c.connections[conn.GetConnID()] = conn
log.Infof("connection[%d] add successfully, conn count: %d", conn.GetConnID(), c.Size())
}
func (c *ConnManager) Remove(connId uint32) {
c.connLock.Lock()
defer c.connLock.Unlock()
delete(c.connections, connId)
log.Infof("connection[%d] remove successfully, conn count: %d", connId, c.Size())
}
func (c *ConnManager) Get(connId uint32) (iface.Connection, bool) {
c.connLock.RLock()
defer c.connLock.RUnlock()
connection, ok := c.connections[connId]
return connection, ok
}
func (c *ConnManager) Size() int {
return len(c.connections)
}
func (c *ConnManager) Clear() {
c.connLock.Lock()
defer c.connLock.Unlock()
for connId, connection := range c.connections {
connection.Stop()
delete(c.connections, connId)
}
log.Info("clear all connections successfully")
}