添加消息转发协议

This commit is contained in:
sk 2024-09-26 16:42:57 +08:00
parent d23b68f6f3
commit 5ada0828ca
2 changed files with 87 additions and 14 deletions

View File

@ -1,8 +1,6 @@
package action package action
import ( import (
"google.golang.org/protobuf/proto"
"mongo.games.com/goserver/core/logger" "mongo.games.com/goserver/core/logger"
"mongo.games.com/goserver/core/netlib" "mongo.games.com/goserver/core/netlib"
"mongo.games.com/goserver/srvlib" "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 { if bp, ok := data.(*protocol.SSPacketBroadcast); ok {
pd := bp.GetData() pd := bp.GetData()
sp := bp.GetSessParam() sp := bp.GetSessParam()
if bcss := sp.GetBcss(); bcss != nil { if v := sp.GetBcss(); v != nil {
srvlib.ServerSessionMgrSington.Broadcast(int(bp.GetPacketId()), pd, int(bcss.GetSArea()), int(bcss.GetSType())) srvlib.ServerSessionMgrSington.Broadcast(int(bp.GetPacketId()), pd, int(v.GetSArea()), int(v.GetSType()))
return nil
} }
srvlib.ClientSessionMgrSington.Broadcast(int(bp.GetPacketId()), pd)
} }
return nil return nil
} }
func CreateBroadcastPacket(sp *protocol.BCSessionUnion, packetId int, data interface{}) (proto.Message, error) { func BroadcastMessage(areaId, serverType int, packetId int, pack interface{}, sp *protocol.BCSessionUnion) error {
pack := &protocol.SSPacketBroadcast{ if packetId == 0 || pack == nil {
return nil
}
data := &protocol.SSPacketBroadcast{
SessParam: sp, SessParam: sp,
PacketId: int32(packetId), PacketId: int32(packetId),
} }
if byteData, ok := pack.([]byte); ok {
if byteData, ok := data.([]byte); ok { data.Data = byteData
pack.Data = byteData
} else { } else {
byteData, err := netlib.MarshalPacket(packetId, data) byteData, err := netlib.MarshalPacket(packetId, pack)
if err == nil { if err == nil {
pack.Data = byteData data.Data = byteData
} else { } else {
logger.Logger.Warnf("CreateBroadcastPacket err:%v", err) logger.Logger.Errorf("CreateBroadcastPacket err:%v", err)
return nil, 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
} }

View File

@ -1,6 +1,7 @@
package action package action
import ( import (
"mongo.games.com/goserver/core/logger"
"mongo.games.com/goserver/core/netlib" "mongo.games.com/goserver/core/netlib"
"mongo.games.com/goserver/srvlib" "mongo.games.com/goserver/srvlib"
"mongo.games.com/goserver/srvlib/protocol" "mongo.games.com/goserver/srvlib/protocol"
@ -37,3 +38,49 @@ func getSession(su *protocol.MCSessionUnion) *netlib.Session {
return nil 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
}