package action import ( "mongo.games.com/game/protocol/machine" "mongo.games.com/goserver/core/logger" "mongo.games.com/goserver/core/netlib" "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() int { // 获取互斥锁 MachineMapLock.Lock() defer MachineMapLock.Unlock() for i, v := range MachineMap { if v.Status == false { v.Status = true return i } } 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 init() { netlib.Register(int(machine.DollMachinePacketID_PACKET_MSDollMachineList), &machine.MSDollMachineList{}, MSDollMachineListHandler) //更新娃娃机链接状态 netlib.Register(int(machine.DollMachinePacketID_PACKET_MSUpdateDollMachineStatus), &machine.MSUpdateDollMachineStatus{}, MSUpdateDollMachineStatusHandler) }