93 lines
2.9 KiB
Go
93 lines
2.9 KiB
Go
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)
|
|
}
|