game_sync/gamesrv/action/action_machine.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)
}