Files
bl/logic/service/player/rpc.go

72 lines
1.6 KiB
Go
Raw Normal View History

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
}