game_sync/common/action_srvctrl.go

56 lines
1.2 KiB
Go

package common
import (
"mongo.games.com/goserver/core/logger"
"mongo.games.com/goserver/core/module"
"mongo.games.com/goserver/core/mongo"
"mongo.games.com/goserver/core/netlib"
"mongo.games.com/game/protocol/server"
)
// GameSessState 服务状态
type GameSessState int
const (
GameSessStateOff GameSessState = iota //关闭状态
GameSessStateOn //开启状态
)
var SrvIsMaintaining = true
var ServerCtrlCallback func(msg *server.ServerCtrl)
func RegisterServerCtrlCallback(cb func(msg *server.ServerCtrl)) {
ServerCtrlCallback = cb
}
func init() {
netlib.Register(int(server.SSPacketID_PACKET_MS_SRVCTRL), &server.ServerCtrl{}, ServerCtrlHandler)
}
// ServerCtrlHandler 服务器控制,通用事件
func ServerCtrlHandler(s *netlib.Session, packetid int, data interface{}) error {
logger.Logger.Infof("ServerCtrlHandler %v", data)
msg, ok := data.(*server.ServerCtrl)
if !ok {
return nil
}
switch msg.GetCtrlCode() {
case SrvCtrlCloseCode:
module.Stop()
case SrvCtrlResetMgoSession:
mongo.ResetAllSession()
default:
logger.Logger.Errorf("unknow server ctrl %v", msg)
}
// 服务自己处理的特殊事件
if ServerCtrlCallback != nil {
ServerCtrlCallback(msg)
}
return nil
}