diff --git a/src/server/cluster/Cluster.go b/src/server/cluster/Cluster.go index e6a12c53..4890647e 100644 --- a/src/server/cluster/Cluster.go +++ b/src/server/cluster/Cluster.go @@ -16,7 +16,9 @@ const ( ) var FuncMap = map[int]func(*Agent, *msg.Msg) error{} // 消息处理函数 +var funcMapMu sync.RWMutex // FuncMap 的读写锁 var CallbackChan = make(map[string]chan *msg.Msg) // 回调消息队列 +var callbackChanMu sync.RWMutex // CallbackChan 的读写锁 var ( server *network.TCPServer // 服务器 Center *network.TCPClient // 集群中心 diff --git a/src/server/cluster/cluster_func.go b/src/server/cluster/cluster_func.go index d02bdce9..d9ccbd31 100644 --- a/src/server/cluster/cluster_func.go +++ b/src/server/cluster/cluster_func.go @@ -172,7 +172,11 @@ func SendMsgAll(m *msg.Msg) { func processMsg(a *Agent, m *msg.Msg) error { var err error - if fun, ok := FuncMap[m.Type]; ok { + funcMapMu.RLock() + fun, ok := FuncMap[m.Type] + funcMapMu.RUnlock() + + if ok { err = fun(a, m) } else { MsgChan <- m //交由game Module消息处理 @@ -181,15 +185,21 @@ func processMsg(a *Agent, m *msg.Msg) error { } func registerFunc(key int, fun func(*Agent, *msg.Msg) error) { + funcMapMu.Lock() FuncMap[key] = fun + funcMapMu.Unlock() } func registerChanel(key string, chanel chan *msg.Msg) { + callbackChanMu.Lock() CallbackChan[key] = chanel + callbackChanMu.Unlock() } func unregisterChanel(key string) { + callbackChanMu.Lock() delete(CallbackChan, key) + callbackChanMu.Unlock() } func sendGameMsg(m *msg.Msg) {