package player import ( "blazing/common/socket/errorcode" "blazing/cool" "blazing/logic/service/common" "blazing/logic/service/fight/info" "blazing/logic/service/fight/pvpwire" "blazing/modules/player/model" "context" "encoding/base64" "encoding/json" ) // RPC_player 是跨服战斗中的远端玩家代理,只承载快照和发包能力。 type RPC_player struct { baseplayer serviceid uint32 fightinfo info.Fightinfo sessionID string } func NewRPCPlayer(info *model.PlayerInfo, serviceID uint32, fightInfo info.Fightinfo, sessionID string) *RPC_player { ret := &RPC_player{ baseplayer: newbaseplayer(), serviceid: serviceID, fightinfo: fightInfo, sessionID: sessionID, } ret.Info = info return ret } func (f *RPC_player) SendPackCmd(cmd uint32, data any) { if f == nil || f.Info == nil || f.serviceid == 0 { return } packet := common.NewTomeeHeader(cmd, f.Info.UserID).Pack(data) payload, err := json.Marshal(pvpwire.PacketRelayPayload{ SessionID: f.sessionID, UserID: f.Info.UserID, Cmd: cmd, Packet: base64.StdEncoding.EncodeToString(packet), }) if err != nil { return } envelope, err := json.Marshal(pvpwire.Envelope{ Type: pvpwire.MessageTypePacketRelay, Body: payload, }) if err != nil { return } conn, err := cool.Redis.Conn(context.TODO()) if err != nil || conn == nil { return } defer conn.Close(context.TODO()) _, _ = conn.Do(context.TODO(), "publish", pvpwire.ServerTopic(f.serviceid), envelope) } func (f *RPC_player) Getfightinfo() info.Fightinfo { return f.fightinfo } func (f *RPC_player) CanFight() errorcode.ErrorCode { return 0 }