package action import ( "mongo.games.com/game/protocol/machine" "mongo.games.com/goserver/core/logger" "mongo.games.com/goserver/core/netlib" "mongo.games.com/goserver/srvlib" "sync" ) var MachineMap = make(map[int]*DollMachine) var MachineMapLock = sync.Mutex{} type DollMachine struct { Id int MachineStatus int32 //娃娃机链接状态 0:离线 1:在线 Status bool //标记是否被占用 VideoAddr string } func MSDollMachineListHandler(session *netlib.Session, packetId int, data interface{}) error { logger.Logger.Tracef("TestHandler %v", data) MachineMap = make(map[int]*DollMachine) if msg, ok := data.(*machine.MSDollMachineList); ok { for i, info := range msg.Data { MachineMap[i+1] = &DollMachine{ Id: i + 1, Status: false, VideoAddr: info.VideoAddr, MachineStatus: 1, } logger.Logger.Tracef("MachineMap[%v] = %v", i, info.VideoAddr) } } return nil } // 获取空闲娃娃机标识 func GetFreeDollMachineId(id int32) int { if MachineMap[int(id)] != nil && MachineMap[int(id)].MachineStatus == 1 { return int(id) } else { return 0 } return 0 } // 获取指定娃娃机链接状态 func GetDollMachineStatus(id int) int32 { if MachineMap[id] == nil { return 0 } return MachineMap[id].MachineStatus } func MSUpdateDollMachineStatusHandler(session *netlib.Session, packetId int, data interface{}) error { logger.Logger.Tracef("MSUpdateDollMachineStatusHandler %v", data) if msg, ok := data.(*machine.MSUpdateDollMachineStatus); ok { if MachineMap[int(msg.Id)] == nil { MachineMap[int(msg.Id)] = &DollMachine{ Id: int(msg.Id), Status: false, VideoAddr: msg.VideoAddr, MachineStatus: msg.Status, } } else { MachineMap[int(msg.Id)].MachineStatus = msg.Status } logger.Logger.Tracef("更新娃娃机连接状态 id = %d,status= %d", msg.Id, msg.GetStatus()) } return nil } func MSDollMachineHeartBeatHandler(session *netlib.Session, packetId int, data interface{}) error { //fmt.Println("收到娃娃机服务心跳!!!") //返回心跳 pack := &machine.SMDollMachineHeartBeat{} machineConn := srvlib.ServerSessionMgrSington.GetSession(1, 10, 1001) if machineConn != nil { machineConn.Send(int(machine.DollMachinePacketID_Packet_SMDollMachineHeartBeat), pack) } else { logger.Logger.Error("MSDollMachineHeartBeatHandler:MachineConn is nil !") } return nil } func init() { netlib.Register(int(machine.DollMachinePacketID_PACKET_MSDollMachineList), &machine.MSDollMachineList{}, MSDollMachineListHandler) //更新娃娃机链接状态 netlib.Register(int(machine.DollMachinePacketID_PACKET_MSUpdateDollMachineStatus), &machine.MSUpdateDollMachineStatus{}, MSUpdateDollMachineStatusHandler) //心跳 netlib.Register(int(machine.DollMachinePacketID_Packet_MSDollMachineHeartBeat), &machine.MSDollMachineHeartBeat{}, MSDollMachineHeartBeatHandler) }