From 5ada0828cae6c26edac8b98502b2dc6bff0233f9 Mon Sep 17 00:00:00 2001 From: sk <123456@qq.com> Date: Thu, 26 Sep 2024 16:42:57 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E6=B6=88=E6=81=AF=E8=BD=AC?= =?UTF-8?q?=E5=8F=91=E5=8D=8F=E8=AE=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- srvlib/action/broadcasethandler.go | 54 ++++++++++++++++++++++-------- srvlib/action/multicasthhandler.go | 47 ++++++++++++++++++++++++++ 2 files changed, 87 insertions(+), 14 deletions(-) diff --git a/srvlib/action/broadcasethandler.go b/srvlib/action/broadcasethandler.go index 9696812..1d86cea 100644 --- a/srvlib/action/broadcasethandler.go +++ b/srvlib/action/broadcasethandler.go @@ -1,8 +1,6 @@ package action import ( - "google.golang.org/protobuf/proto" - "mongo.games.com/goserver/core/logger" "mongo.games.com/goserver/core/netlib" "mongo.games.com/goserver/srvlib" @@ -17,29 +15,57 @@ func BroadcastHandler(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())) + if v := sp.GetBcss(); v != nil { + srvlib.ServerSessionMgrSington.Broadcast(int(bp.GetPacketId()), pd, int(v.GetSArea()), int(v.GetSType())) + return nil } + srvlib.ClientSessionMgrSington.Broadcast(int(bp.GetPacketId()), pd) } return nil } -func CreateBroadcastPacket(sp *protocol.BCSessionUnion, packetId int, data interface{}) (proto.Message, error) { - pack := &protocol.SSPacketBroadcast{ +func BroadcastMessage(areaId, serverType int, packetId int, pack interface{}, sp *protocol.BCSessionUnion) error { + if packetId == 0 || pack == nil { + return nil + } + data := &protocol.SSPacketBroadcast{ SessParam: sp, PacketId: int32(packetId), } - - if byteData, ok := data.([]byte); ok { - pack.Data = byteData + if byteData, ok := pack.([]byte); ok { + data.Data = byteData } else { - byteData, err := netlib.MarshalPacket(packetId, data) + byteData, err := netlib.MarshalPacket(packetId, pack) if err == nil { - pack.Data = byteData + data.Data = byteData } else { - logger.Logger.Warnf("CreateBroadcastPacket err:%v", err) - return nil, err + logger.Logger.Errorf("CreateBroadcastPacket err:%v", err) + return err } } - return pack, nil + srvlib.ServerSessionMgrSington.Broadcast(int(protocol.SrvlibPacketID_PACKET_SS_BROADCAST), data, areaId, serverType) + return nil +} + +func BroadcastMessageToServer(s *netlib.Session, packetId int, pack interface{}, sp *protocol.BCSessionUnion) error { + if packetId == 0 || pack == nil || s == nil { + return nil + } + data := &protocol.SSPacketBroadcast{ + SessParam: sp, + PacketId: int32(packetId), + } + if byteData, ok := pack.([]byte); ok { + data.Data = byteData + } else { + byteData, err := netlib.MarshalPacket(packetId, pack) + if err == nil { + data.Data = byteData + } else { + logger.Logger.Errorf("CreateBroadcastPacket err:%v", err) + return err + } + } + s.Send(int(protocol.SrvlibPacketID_PACKET_SS_BROADCAST), data) + return nil } diff --git a/srvlib/action/multicasthhandler.go b/srvlib/action/multicasthhandler.go index 852e1de..57e282a 100644 --- a/srvlib/action/multicasthhandler.go +++ b/srvlib/action/multicasthhandler.go @@ -1,6 +1,7 @@ package action import ( + "mongo.games.com/goserver/core/logger" "mongo.games.com/goserver/core/netlib" "mongo.games.com/goserver/srvlib" "mongo.games.com/goserver/srvlib/protocol" @@ -37,3 +38,49 @@ func getSession(su *protocol.MCSessionUnion) *netlib.Session { return nil } + +func MulticastMessage(areaId, serverType int, packetId int, pack interface{}, sis ...*protocol.MCSessionUnion) error { + if packetId == 0 || pack == nil { + return nil + } + data := &protocol.SSPacketMulticast{ + Sessions: sis, + PacketId: int32(packetId), + } + if byteData, ok := pack.([]byte); ok { + data.Data = byteData + } else { + byteData, err := netlib.MarshalPacket(packetId, pack) + if err == nil { + data.Data = byteData + } else { + logger.Logger.Errorf("CreateMulticastPacket err:%v", err) + return err + } + } + srvlib.ServerSessionMgrSington.Broadcast(int(protocol.SrvlibPacketID_PACKET_SS_MULTICAST), data, areaId, serverType) + return nil +} + +func MulticastMessageToServer(s *netlib.Session, packetId int, pack interface{}, sis ...*protocol.MCSessionUnion) error { + if packetId == 0 || pack == nil || s == nil { + return nil + } + data := &protocol.SSPacketMulticast{ + Sessions: sis, + PacketId: int32(packetId), + } + if byteData, ok := pack.([]byte); ok { + data.Data = byteData + } else { + byteData, err := netlib.MarshalPacket(packetId, pack) + if err == nil { + data.Data = byteData + } else { + logger.Logger.Errorf("CreateMulticastPacket err:%v", err) + return err + } + } + s.Send(int(protocol.SrvlibPacketID_PACKET_SS_MULTICAST), data) + return nil +}