72 lines
1.6 KiB
Go
72 lines
1.6 KiB
Go
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
|
|
}
|