Blame view

common/components/connmanage.go 1.9 KB
69d286a7   zhangqijia   fix: 插件用来做部分热更
1
2
3
4
5
6
  package components
  
  import "sync"
  
  type ConnManage struct {
  	mu    sync.RWMutex
58e37bfe   zhangqijia   add sync.Pool to ...
7
  	conns map[uint32]IConnection
c47aa250   zhangqijia   feat: 增加GM相关接口。详情...
8
9
10
  
  	r2cRW sync.RWMutex
  	r2c   map[string]uint32 // role to connID
495e9142   zhangqijia   fix: 增加DisConnect...
11
12
13
  
  	u2cRW sync.RWMutex
  	u2c   map[string]uint32 // uid to connID
69d286a7   zhangqijia   fix: 插件用来做部分热更
14
15
16
17
18
  }
  
  func NewConnManage() *ConnManage {
  	return &ConnManage{
  		mu:    sync.RWMutex{},
58e37bfe   zhangqijia   add sync.Pool to ...
19
  		conns: make(map[uint32]IConnection),
c47aa250   zhangqijia   feat: 增加GM相关接口。详情...
20
21
22
  
  		r2cRW: sync.RWMutex{},
  		r2c:   make(map[string]uint32),
495e9142   zhangqijia   fix: 增加DisConnect...
23
24
25
  
  		u2cRW: sync.RWMutex{},
  		u2c:   make(map[string]uint32),
69d286a7   zhangqijia   fix: 插件用来做部分热更
26
27
28
  	}
  }
  
58e37bfe   zhangqijia   add sync.Pool to ...
29
  func (c *ConnManage) AddConn(id uint32, connection IConnection) {
69d286a7   zhangqijia   fix: 插件用来做部分热更
30
31
32
33
34
  	c.mu.Lock()
  	defer c.mu.Unlock()
  	c.conns[id] = connection
  }
  
58e37bfe   zhangqijia   add sync.Pool to ...
35
  func (c *ConnManage) GetConn(id uint32) IConnection {
69d286a7   zhangqijia   fix: 插件用来做部分热更
36
37
38
39
40
  	c.mu.RLock()
  	defer c.mu.RUnlock()
  	return c.conns[id]
  }
  
58e37bfe   zhangqijia   add sync.Pool to ...
41
  func (c *ConnManage) DelConn(id uint32) IConnection {
69d286a7   zhangqijia   fix: 插件用来做部分热更
42
43
44
45
46
47
48
49
  	c.mu.Lock()
  	defer c.mu.Unlock()
  	conn := c.conns[id]
  	delete(c.conns, id)
  	return conn
  }
  
  func (c *ConnManage) Range(f func(key interface{}, value interface{}) bool) {
58e37bfe   zhangqijia   add sync.Pool to ...
50
51
  	c.mu.Lock()
  	defer c.mu.Unlock()
69d286a7   zhangqijia   fix: 插件用来做部分热更
52
  	for k, v := range c.conns {
69d286a7   zhangqijia   fix: 插件用来做部分热更
53
  		if ok := f(k, v); !ok {
69d286a7   zhangqijia   fix: 插件用来做部分热更
54
55
  			return
  		}
69d286a7   zhangqijia   fix: 插件用来做部分热更
56
57
58
59
60
61
62
63
64
65
  	}
  }
  
  func (c *ConnManage) StopAllConns() {
  	c.Range(func(key interface{}, value interface{}) bool {
  		conn := value.(IConnection)
  		conn.Stop()
  		return true
  	})
  }
c47aa250   zhangqijia   feat: 增加GM相关接口。详情...
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
  
  func (c *ConnManage) AddRID(rid string, id uint32) {
  	c.r2cRW.Lock()
  	defer c.r2cRW.Unlock()
  	c.r2c[rid] = id
  }
  
  func (c *ConnManage) DelRID(rid string) {
  	c.r2cRW.Lock()
  	defer c.r2cRW.Unlock()
  	delete(c.r2c, rid)
  }
  
  func (c *ConnManage) GetConnByRID(rid string) IConnection {
  	c.r2cRW.RLock()
  	defer c.r2cRW.RUnlock()
  	cid := c.r2c[rid]
  	return c.GetConn(cid)
  }
495e9142   zhangqijia   fix: 增加DisConnect...
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
  
  func (c *ConnManage) AddUID(uid string, id uint32) {
  	c.u2cRW.Lock()
  	defer c.u2cRW.Unlock()
  	c.u2c[uid] = id
  }
  
  func (c *ConnManage) DelUID(uid string) {
  	c.r2cRW.Lock()
  	defer c.r2cRW.Unlock()
  	delete(c.r2c, uid)
  }
  
  func (c *ConnManage) GetConnByUID(uid string) IConnection {
  	c.u2cRW.RLock()
  	defer c.u2cRW.RUnlock()
  	cid := c.u2c[uid]
  	return c.GetConn(cid)
  }