51 lines
1.4 KiB
Go
51 lines
1.4 KiB
Go
package common
|
|
|
|
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"
|
|
)
|
|
|
|
func RegisterMulticastHandler() {
|
|
netlib.Register(int(protocol.SrvlibPacketID_PACKET_SS_MULTICAST), &protocol.SSPacketMulticast{}, MulticastHandler)
|
|
}
|
|
|
|
func MulticastHandler(s *netlib.Session, packetId int, data interface{}) error {
|
|
if mp, ok := data.(*protocol.SSPacketMulticast); ok {
|
|
pd := mp.GetData()
|
|
sis := mp.GetSessions()
|
|
for _, si := range sis {
|
|
ss := si.GetMcss()
|
|
if ss != nil {
|
|
ns := srvlib.ServerSessionMgrSington.GetSession(int(ss.GetSArea()), int(ss.GetSType()), int(ss.GetSId()))
|
|
if ns != nil {
|
|
ns.Send(int(mp.GetPacketId()), pd /*, s.GetSessionConfig().IsInnerLink*/)
|
|
}
|
|
}
|
|
}
|
|
}
|
|
return nil
|
|
}
|
|
|
|
func CreateMulticastPacket(packetId int, data interface{}, sis ...*protocol.MCSessionUnion) (rawproto.Message, error) {
|
|
pack := &protocol.SSPacketMulticast{
|
|
Sessions: sis,
|
|
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.Errorf("CreateMulticastPacket err:%v", err)
|
|
return nil, err
|
|
}
|
|
}
|
|
return pack, nil
|
|
}
|