game_sync/common/srvmsg.go

61 lines
1.9 KiB
Go

package common
import (
"fmt"
"mongo.games.com/game/proto"
"mongo.games.com/game/protocol/player"
)
const (
SRVMSG_CODE_DEFAULT int32 = iota
)
type SrvMsgSender interface {
SendToClient(packetid int, rawpack interface{}) bool
}
func SendSrvMsg(sender SrvMsgSender, msgId int32, params ...interface{}) bool {
pack := CreateSrvMsg(msgId, params)
return sender.SendToClient(int(player.PlayerPacketID_PACKET_SC_SRVMSG), pack)
}
func CreateSrvMsg(msgId int32, params ...interface{}) *player.SCSrvMsg {
pack := &player.SCSrvMsg{
MsgId: msgId,
}
for _, p := range params {
switch d := p.(type) {
case string:
pack.Params = append(pack.Params, &player.SrvMsgParam{StrParam: d})
case int:
pack.Params = append(pack.Params, &player.SrvMsgParam{IntParam: int32(d)})
case int8:
pack.Params = append(pack.Params, &player.SrvMsgParam{IntParam: int32(d)})
case int16:
pack.Params = append(pack.Params, &player.SrvMsgParam{IntParam: int32(d)})
case int32:
pack.Params = append(pack.Params, &player.SrvMsgParam{IntParam: d})
case int64:
pack.Params = append(pack.Params, &player.SrvMsgParam{IntParam: int32(d)})
case uint:
pack.Params = append(pack.Params, &player.SrvMsgParam{IntParam: int32(d)})
case uint8:
pack.Params = append(pack.Params, &player.SrvMsgParam{IntParam: int32(d)})
case uint16:
pack.Params = append(pack.Params, &player.SrvMsgParam{IntParam: int32(d)})
case uint32:
pack.Params = append(pack.Params, &player.SrvMsgParam{IntParam: int32(d)})
case uint64:
pack.Params = append(pack.Params, &player.SrvMsgParam{IntParam: int32(d)})
case float32:
pack.Params = append(pack.Params, &player.SrvMsgParam{IntParam: int32(d)})
case float64:
pack.Params = append(pack.Params, &player.SrvMsgParam{IntParam: int32(d)})
default:
pack.Params = append(pack.Params, &player.SrvMsgParam{StrParam: fmt.Sprintf("%v", p)})
}
}
proto.SetDefaults(pack)
return pack
}