63 lines
1.6 KiB
Go
63 lines
1.6 KiB
Go
package main
|
|
|
|
import (
|
|
rawproto "google.golang.org/protobuf/proto"
|
|
"mongo.games.com/game/proto"
|
|
"mongo.games.com/goserver/core/logger"
|
|
"mongo.games.com/goserver/core/netlib"
|
|
"mongo.games.com/goserver/srvlib"
|
|
"mongo.games.com/goserver/srvlib/protocol"
|
|
)
|
|
|
|
var (
|
|
BroadcastMaker = &BroadcastPacketFactory{}
|
|
)
|
|
|
|
type BroadcastPacketFactory struct {
|
|
}
|
|
|
|
type BroadcastHandler struct {
|
|
}
|
|
|
|
func init() {
|
|
netlib.RegisterHandler(int(protocol.SrvlibPacketID_PACKET_SS_BROADCAST), &BroadcastHandler{})
|
|
netlib.RegisterFactory(int(protocol.SrvlibPacketID_PACKET_SS_BROADCAST), BroadcastMaker)
|
|
}
|
|
|
|
func (this *BroadcastPacketFactory) CreatePacket() interface{} {
|
|
pack := &protocol.SSPacketBroadcast{}
|
|
return pack
|
|
}
|
|
|
|
func (this *BroadcastPacketFactory) CreateBroadcastPacket(sp *protocol.BCSessionUnion, packetid int, data interface{}) (rawproto.Message, error) {
|
|
pack := &protocol.SSPacketBroadcast{
|
|
SessParam: sp,
|
|
PacketId: proto.Int(packetid),
|
|
}
|
|
|
|
if byteData, ok := data.([]byte); ok {
|
|
pack.Data = byteData
|
|
} else {
|
|
byteData, err := netlib.MarshalPacket(packetid, data)
|
|
if err == nil {
|
|
pack.Data = byteData
|
|
} else {
|
|
logger.Logger.Warn("BroadcastPacketFactory.CreateBroadcastPacket err:", err)
|
|
return nil, err
|
|
}
|
|
}
|
|
proto.SetDefaults(pack)
|
|
return pack, nil
|
|
}
|
|
|
|
func (this *BroadcastHandler) Process(s *netlib.Session, packetid int, data interface{}) error {
|
|
if bp, ok := data.(*protocol.SSPacketBroadcast); ok {
|
|
pd := bp.GetData()
|
|
sp := bp.GetSessParam()
|
|
if bcss := sp.GetBcss(); bcss != nil {
|
|
srvlib.ServerSessionMgrSington.Broadcast(int(bp.GetPacketId()), pd, int(bcss.GetSArea()), int(bcss.GetSType()))
|
|
}
|
|
}
|
|
return nil
|
|
}
|