1.加密
//加密
func byteEncrypt(num int64,len int) []byte {
x :=num
byteData := make([]byte,len)
for i := 0; i < len; i++ {
byteData[i] = byte(x & 255) //进行与运算
x = x >> 8 //右移8位
}
return byteData
}
2.打包数据
//打包给客户端的数据
func pkgData(protoData []byte,dataSize int64) []byte {
pkgsize := dataSize+10
datapkg := make([]byte,pkgsize)
//数据长度
pByteLength := byteEncrypt(pkgsize,2)
datapkg[0]=pByteLength[0]
datapkg[1]=pByteLength[1]
//网关类型
pGateType:=byteEncrypt(1000,2)
datapkg[2]=pGateType[0]
datapkg[3]=pGateType[1]
//消息协议
pProtoData:=byteEncrypt(2,2)
datapkg[4]=pProtoData[0]
datapkg[5]=pProtoData[1]
//UID
pUID:=byteEncrypt(573232,4)
datapkg[6]=pUID[0]
datapkg[7]=pUID[1]
datapkg[8]=pUID[2]
datapkg[9]=pUID[3]
//数据实体
for i,_ := range protoData{
datapkg[i+10]=protoData[i]
}
fmt.Println(fmt.Sprintf("进行包装后的包头数据: [%v %v %v %v %v %v %v %v %v %v]",datapkg[0],datapkg[1],datapkg[2],datapkg[3],datapkg[4],datapkg[5],datapkg[6],datapkg[7],datapkg[8],datapkg[9]))
fmt.Println(fmt.Sprintf("进行包装后的Protobuf实体数据: %v ",protoData))
//fmt.Println(fmt.Sprintf("进行包装后的完整二进制: %v ",datapkg))
return datapkg
}
3.返回给客户端的二进制数据
//构造二进制数据
loginResponse := &LoginResponse{
Result: 0,
UserId: 573232,
}
data,_ := proto.Marshal(loginResponse)
fmt.Println("proto结构二进制数据:",data)
//返回给客户端的数据:{"length":14,"type":1000,"protocol":2,"uid":48944,"data":[16,176,254,34]} //请求登陆成功
pkg:=pkgData(data,4) //测试包装数据 4->protobuf data struct len
fmt.Println("返回给客户端的二进制数据:",pkg)
for{
//发送二进制数据
if err = conn.WriteMessage(pkg);err != nil{
return
}
time.Sleep(3*time.Second)
}
4.完整源码 main.go
package main
import (
//"strings"
//"reflect"
"bytes"
"fmt"
"encoding/binary"
"net/http"
"github.com/gorilla/websocket"
"time"
"gowebsocket/impl"
"github.com/golang/protobuf/proto"
)
var(
upgrader = websocket.Upgrader{
// 允许跨域
CheckOrigin:func(r *http.Request) bool{
return true
},
}
)
func wsHandler(w http.ResponseWriter , r *http.Request){
var(
wsConn *websocket.Conn
err error
conn *impl.Connection
data []byte
)
// 完成ws协议的握手操作
// Upgrade:websocket
if wsConn , err = upgrader.Upgrade(w,r,nil); err != nil{
return
}
if conn , err = impl.InitConnection(wsConn); err != nil{
goto ERR
}
// 启动线程,不断发消息
go func(){
var (err error)
//构造二进制数据
loginResponse := &LoginResponse{
Result: 0,
UserId: 573232,
}
data,_ := proto.Marshal(loginResponse)
fmt.Println("proto结构二进制数据:",data)
//返回给客户端的数据:{"length":14,"type":1000,"protocol":2,"uid":48944,"data":[16,176,254,34]} //请求登陆成功
pkg:=pkgData(data,4) //测试包装数据 4->protobuf data struct len
fmt.Println("返回给客户端的二进制数据:",pkg)
for{
//发送二进制数据
if err = conn.WriteMessage(pkg);err != nil{
return
}
time.Sleep(3*time.Second)
}
}()
for {
data , err = conn.ReadMessage();
if err != nil{
goto ERR
}
fmt.Println("客户端发来的二进制数据: ",data)
//分析进制数据并解码proto
//第1个两位:数据长度 第2个两位:网关类型 第3个两位:协议 第4个两位:uid 第9位开始为数据内容(proto.Marshal编码后的位集合)
//2:length + 2:type + 2:protocol + 2:uid + length-8:data
if err = conn.WriteMessage(data);err !=nil{
goto ERR
}
}
ERR:
conn.Close()
}
//打包给客户端的数据
func pkgData(protoData []byte,dataSize int64) []byte {
pkgsize := dataSize+10
datapkg := make([]byte,pkgsize)
//数据长度
pByteLength := byteEncrypt(pkgsize,2)
datapkg[0]=pByteLength[0]
datapkg[1]=pByteLength[1]
//网关类型
pGateType:=byteEncrypt(1000,2)
datapkg[2]=pGateType[0]
datapkg[3]=pGateType[1]
//消息协议
pProtoData:=byteEncrypt(2,2)
datapkg[4]=pProtoData[0]
datapkg[5]=pProtoData[1]
//UID
pUID:=byteEncrypt(573232,4)
datapkg[6]=pUID[0]
datapkg[7]=pUID[1]
datapkg[8]=pUID[2]
datapkg[9]=pUID[3]
//数据实体
for i,_ := range protoData{
datapkg[i+10]=protoData[i]
}
fmt.Println(fmt.Sprintf("进行包装后的包头数据: [%v %v %v %v %v %v %v %v %v %v]",datapkg[0],datapkg[1],datapkg[2],datapkg[3],datapkg[4],datapkg[5],datapkg[6],datapkg[7],datapkg[8],datapkg[9]))
fmt.Println(fmt.Sprintf("进行包装后的Protobuf实体数据: %v ",protoData))
//fmt.Println(fmt.Sprintf("进行包装后的完整二进制: %v ",datapkg))
return datapkg
}
//加密
func byteEncrypt(num int64,len int) []byte {
x :=num
byteData := make([]byte,len)
for i := 0; i < len; i++ {
byteData[i] = byte(x & 255) //进行与运算
x = x >> 8 //右移8位
}
return byteData
}
func Uint8ToByte(num uint8) []byte {
var buf bytes.Buffer;
err:=binary.Write(&buf,binary.BigEndian,num)
fmt.Println(err)
return buf.Bytes()
}
func Int16ToByteBig(num int16) []byte {
var buf bytes.Buffer;
err:=binary.Write(&buf,binary.BigEndian,num)
fmt.Println(err)
return buf.Bytes()
}
func Int16ToByteLittle(num int16) []byte {
var buf bytes.Buffer;
err:=binary.Write(&buf,binary.LittleEndian,num)
fmt.Println(err)
return buf.Bytes()
}
func main(){
fmt.Println("WS listen: 0.0.0.0:7700")
//测试加密
// for _,v := range []int{1,2,4,8}{
// fmt.Println(byteEncrypt(573232,v))
// }
// fmt.Println(byteEncrypt(48,2))
// fmt.Println(byteEncrypt(1000,2))
// fmt.Println(byteEncrypt(1,2))
// fmt.Println(byteEncrypt(10,2))
// fmt.Println(byteEncrypt(1000,2))
// fmt.Println(byteEncrypt(9,2))
// fmt.Println(byteEncrypt(10,4))
//构造二进制数据
// loginResponse := &LoginResponse{
// Result: 0,
// UserId: 573232,
// }
// data,_ := proto.Marshal(loginResponse)
// fmt.Println("proto结构二进制数据:",data)
// //返回给客户端的数据:{"length":14,"type":1000,"protocol":2,"uid":48944,"data":[16,176,254,34]}
// pkg:=pkgData(data,4) //测试包装数据 4->protobuf data struct len
// fmt.Println("返回给客户端的二进制数据:",pkg)
// k := Uint8ToByte(156)
// fmt.Println(k)
// k1 := Int16ToByteBig(156)
// fmt.Println("大端模式:",k1)
// k2 := Int16ToByteLittle(156)
// fmt.Println("小端模式:",k2)
// result := &ResultInfo{
// Cid: *proto.String("123457"),
// Error: *proto.String("hello"),
// ResultType: *proto.String("s"),
// Result: []byte("232244"),
// } // 进行编码
// data, _:= proto.Marshal(result)
// fmt.Println("编码:", data)
// newRI := &ResultInfo{}
// _ = proto.Unmarshal(data,newRI)
// fmt.Println("解码:",newRI)
//str := strings.Split("8,176,254,34,18,32,54,98,98,50,100,99,101,101,53,57,57,99,57,97,53,52,51,100,57,51,97,102,48,99,55,55,52,56,49,102,102,99",",")
//fmt.Println(str)
// byteData := make([]byte,len(str))
// for k,v := range str{
// fmt.Println(k,v)
// }
//newLogin := &LoginRequest{}
//_err := proto.Unmarshal(data,newLogin)
//fmt.Println(newLogin,_err)
http.HandleFunc("/ws",wsHandler)
http.ListenAndServe("0.0.0.0:7700",nil)
}
impl.go
package impl
import (
"github.com/gorilla/websocket"
"sync"
"errors"
"fmt"
)
type Connection struct{
wsConnect *websocket.Conn
inChan chan []byte
outChan chan []byte
closeChan chan byte
mutex sync.Mutex // 对closeChan关闭上锁
isClosed bool // 防止closeChan被关闭多次
}
func InitConnection(wsConn *websocket.Conn)(conn *Connection ,err error){
conn = &Connection{
wsConnect:wsConn,
inChan: make(chan []byte,1000),
outChan: make(chan []byte,1000),
closeChan: make(chan byte,1),
}
// 启动读协程
go conn.readLoop();
// 启动写协程
go conn.writeLoop();
return
}
func (conn *Connection)ReadMessage()(data []byte , err error){
select{
case data = <- conn.inChan:
case <- conn.closeChan:
err = errors.New("connection is closeed")
}
return
}
func (conn *Connection)WriteMessage(data []byte)(err error){
select{
case conn.outChan <- data:
case <- conn.closeChan:
err = errors.New("connection is closeed")
}
return
}
func (conn *Connection)Close(){
// 线程安全,可多次调用
conn.wsConnect.Close()
// 利用标记,让closeChan只关闭一次
conn.mutex.Lock()
if !conn.isClosed {
close(conn.closeChan)
conn.isClosed = true
}
conn.mutex.Unlock()
}
// 内部实现
func (conn *Connection)readLoop(){
var(
data []byte
err error
)
for{
_, data , err = conn.wsConnect.ReadMessage();
if err != nil{
goto ERR
}
fmt.Println("读取的数据:",data)
//阻塞在这里,等待inChan有空闲位置
select{
case conn.inChan <- data:
case <- conn.closeChan: // closeChan 感知 conn断开
goto ERR
}
}
ERR:
conn.Close()
}
func (conn *Connection)writeLoop(){
var(
data []byte
err error
)
for{
select{
case data= <- conn.outChan:
case <- conn.closeChan:
goto ERR
}
//发二进制数据
if err = conn.wsConnect.WriteMessage(websocket.BinaryMessage , data); err != nil{
goto ERR
}
}
ERR:
conn.Close()
}
platform.pb.go
// Code generated by protoc-gen-go. DO NOT EDIT.
// versions:
// protoc-gen-go v1.26.0
// protoc v3.12.4
// source: platform.proto
package main
import (
protoreflect "google.golang.org/protobuf/reflect/protoreflect"
protoimpl "google.golang.org/protobuf/runtime/protoimpl"
reflect "reflect"
sync "sync"
)
const (
// Verify that this generated code is sufficiently up-to-date.
_ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion)
// Verify that runtime/protoimpl is sufficiently up-to-date.
_ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20)
)
//静态服务定义:这里定义的静态服务,如果是具体游戏,则是动态值
type ServerType int32
const (
ServerType_SERVER_TPYE_INVALID ServerType = 0 // 无效
ServerType_SERVER_TYPE_GATEWAY ServerType = 1000 // 网关服务
ServerType_SERVER_TYPE_COMMON ServerType = 1100 // 通用服务
ServerType_SERVER_TYPE_MATCH ServerType = 1101 // 匹配服务
ServerType_SERVER_TYPE_FT ServerType = 1102 // Fantasy Time
ServerType_SERVER_TYPE_BA ServerType = 2002 // 扣费服务(不直接对外)
ServerType_SERVER_TYPE_RUMMY_ ServerType = 3000 // rummy游戏服务(注:不要直接使用,实际会是3000/3001/3002等等,会在匹配逻辑完成后通知客户端,这里只是标注起始)
ServerType_SERVER_TYPE_TEEPATTI_ ServerType = 4000 // teepatti游戏服务(注:同上)
ServerType_SERVER_TYPE_AB_ ServerType = 5000 // AB游戏(注:同上)
ServerType_SERVER_TYPE_7UD_ ServerType = 6000 // 7UD(注:同上)
ServerType_SERVER_TYPE_RAPIDTP_ ServerType = 7000 // rapid teenaptti(注:同上)
ServerType_SERVER_TYPE_DRAGONTIGER_ ServerType = 8000 // 龙虎(注:同上)
ServerType_SERVER_TYPE_BLACKRED_ ServerType = 9000 // 黑红梅方
ServerType_SERVER_TYPE_HORSERACING_ ServerType = 10000 // 赛马
ServerType_SERVER_TYPE_JM_ ServerType = 11000 // Jhandi Munda
ServerType_SERVER_TYPE_BACCARAT_ ServerType = 12000 // baccarat
)
// Enum value maps for ServerType.
var (
ServerType_name = map[int32]string{
0: "SERVER_TPYE_INVALID",
1000: "SERVER_TYPE_GATEWAY",
1100: "SERVER_TYPE_COMMON",
1101: "SERVER_TYPE_MATCH",
1102: "SERVER_TYPE_FT",
2002: "SERVER_TYPE_BA",
3000: "SERVER_TYPE_RUMMY_",
4000: "SERVER_TYPE_TEEPATTI_",
5000: "SERVER_TYPE_AB_",
6000: "SERVER_TYPE_7UD_",
7000: "SERVER_TYPE_RAPIDTP_",
8000: "SERVER_TYPE_DRAGONTIGER_",
9000: "SERVER_TYPE_BLACKRED_",
10000: "SERVER_TYPE_HORSERACING_",
11000: "SERVER_TYPE_JM_",
12000: "SERVER_TYPE_BACCARAT_",
}
ServerType_value = map[string]int32{
"SERVER_TPYE_INVALID": 0,
"SERVER_TYPE_GATEWAY": 1000,
"SERVER_TYPE_COMMON": 1100,
"SERVER_TYPE_MATCH": 1101,
"SERVER_TYPE_FT": 1102,
"SERVER_TYPE_BA": 2002,
"SERVER_TYPE_RUMMY_": 3000,
"SERVER_TYPE_TEEPATTI_": 4000,
"SERVER_TYPE_AB_": 5000,
"SERVER_TYPE_7UD_": 6000,
"SERVER_TYPE_RAPIDTP_": 7000,
"SERVER_TYPE_DRAGONTIGER_": 8000,
"SERVER_TYPE_BLACKRED_": 9000,
"SERVER_TYPE_HORSERACING_": 10000,
"SERVER_TYPE_JM_": 11000,
"SERVER_TYPE_BACCARAT_": 12000,
}
)
func (x ServerType) Enum() *ServerType {
p := new(ServerType)
*p = x
return p
}
func (x ServerType) String() string {
return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x))
}
func (ServerType) Descriptor() protoreflect.EnumDescriptor {
return file_platform_proto_enumTypes[0].Descriptor()
}
func (ServerType) Type() protoreflect.EnumType {
return &file_platform_proto_enumTypes[0]
}
func (x ServerType) Number() protoreflect.EnumNumber {
return protoreflect.EnumNumber(x)
}
// Deprecated: Use ServerType.Descriptor instead.
func (ServerType) EnumDescriptor() ([]byte, []int) {
return file_platform_proto_rawDescGZIP(), []int{0}
}
//**************************************网关消息开始******************************************
type ServerGatewayCmd int32
const (
ServerGatewayCmd_CMD_GATEWAY_INVALID ServerGatewayCmd = 0 // 无效网关消息
ServerGatewayCmd_CMD_GATEWAY_LOGIN_REQ ServerGatewayCmd = 1 // 登录请求:LoginRequest
ServerGatewayCmd_CMD_GATEWAY_LOGIN_RESP ServerGatewayCmd = 2 // 登录返回:LoginResponse
ServerGatewayCmd_CMD_GATEWAY_LOGOUT_REQ ServerGatewayCmd = 3 // 请求注销
ServerGatewayCmd_CMD_GATEWAY_LOGOUT_RESP ServerGatewayCmd = 4 // 返回注销
ServerGatewayCmd_CMD_GATEWAY_DISCONNECT_REQ ServerGatewayCmd = 5 // 请求断开
ServerGatewayCmd_CMD_GATEWAY_DISCONNECT_RESP ServerGatewayCmd = 6 // 返回断开
ServerGatewayCmd_CMD_GATEWAY_REPEAT_LOGIN_REQ ServerGatewayCmd = 7 // 请求重复登录
ServerGatewayCmd_CMD_GATEWAY_REPEAT_LOGIN_RESP ServerGatewayCmd = 8 // 返回重复登录
ServerGatewayCmd_CMD_GATEWAY_PING_REQ ServerGatewayCmd = 9 // 请求心跳
ServerGatewayCmd_CMD_GATEWAY_PING_RESP ServerGatewayCmd = 10 // 返回心跳
)
// Enum value maps for ServerGatewayCmd.
var (
ServerGatewayCmd_name = map[int32]string{
0: "CMD_GATEWAY_INVALID",
1: "CMD_GATEWAY_LOGIN_REQ",
2: "CMD_GATEWAY_LOGIN_RESP",
3: "CMD_GATEWAY_LOGOUT_REQ",
4: "CMD_GATEWAY_LOGOUT_RESP",
5: "CMD_GATEWAY_DISCONNECT_REQ",
6: "CMD_GATEWAY_DISCONNECT_RESP",
7: "CMD_GATEWAY_REPEAT_LOGIN_REQ",
8: "CMD_GATEWAY_REPEAT_LOGIN_RESP",
9: "CMD_GATEWAY_PING_REQ",
10: "CMD_GATEWAY_PING_RESP",
}
ServerGatewayCmd_value = map[string]int32{
"CMD_GATEWAY_INVALID": 0,
"CMD_GATEWAY_LOGIN_REQ": 1,
"CMD_GATEWAY_LOGIN_RESP": 2,
"CMD_GATEWAY_LOGOUT_REQ": 3,
"CMD_GATEWAY_LOGOUT_RESP": 4,
"CMD_GATEWAY_DISCONNECT_REQ": 5,
"CMD_GATEWAY_DISCONNECT_RESP": 6,
"CMD_GATEWAY_REPEAT_LOGIN_REQ": 7,
"CMD_GATEWAY_REPEAT_LOGIN_RESP": 8,
"CMD_GATEWAY_PING_REQ": 9,
"CMD_GATEWAY_PING_RESP": 10,
}
)
func (x ServerGatewayCmd) Enum() *ServerGatewayCmd {
p := new(ServerGatewayCmd)
*p = x
return p
}
func (x ServerGatewayCmd) String() string {
return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x))
}
func (ServerGatewayCmd) Descriptor() protoreflect.EnumDescriptor {
return file_platform_proto_enumTypes[1].Descriptor()
}
func (ServerGatewayCmd) Type() protoreflect.EnumType {
return &file_platform_proto_enumTypes[1]
}
func (x ServerGatewayCmd) Number() protoreflect.EnumNumber {
return protoreflect.EnumNumber(x)
}
// Deprecated: Use ServerGatewayCmd.Descriptor instead.
func (ServerGatewayCmd) EnumDescriptor() ([]byte, []int) {
return file_platform_proto_rawDescGZIP(), []int{1}
}
//***************************************通用平台类消息开始*********************************************
type ServerCommonCmd int32
const (
ServerCommonCmd_CMD_COMMON_INVALID ServerCommonCmd = 0 // 无效
ServerCommonCmd_CMD_NA_1 ServerCommonCmd = 1 // NA
ServerCommonCmd_CMD_FREEZE_PLAYER_RESP ServerCommonCmd = 2 // 账户被冻结
ServerCommonCmd_CMD_GET_PLAYER_BALANCE_REQ ServerCommonCmd = 3 // 请求金钱:NULL
ServerCommonCmd_CMD_GET_PLAYER_BALANCE_RESP ServerCommonCmd = 4 // 返回金钱:GetPlayerBalanceResponse
ServerCommonCmd_CMD_NA_5 ServerCommonCmd = 5 // NA
ServerCommonCmd_CMD_SYSMESSAGE_TO_USER_RESP ServerCommonCmd = 6 // 系统消息:MessageToUserResp
ServerCommonCmd_CMD_NA_7 ServerCommonCmd = 7
ServerCommonCmd_CMD_PHP_2_USER_COMMON_RESP ServerCommonCmd = 8 // 这个是转发PHP到客户端的协议:对应的结构PHP_2_USER_DATA_REQ是在web_msg_define.proto中定义的,消息中是嵌套结构,嵌套的协议定义由客户端和PHP自行商定
ServerCommonCmd_CMD_GET_USER_ATTRI_REQ ServerCommonCmd = 9 // 获取用户属性 MSG_GET_USER_ATTRI_REQ
ServerCommonCmd_CMD_GET_USER_ATTRI_RESP ServerCommonCmd = 10 // 获取用户属性 MSG_GET_USER_ATTRI_RESP
ServerCommonCmd_CMD_UPDATE_USER_ATTRI_REQ ServerCommonCmd = 11 // 更新用户属性 MSG_UPDATE_USER_ATTRI_REQ
ServerCommonCmd_CMD_UPDATE_USER_ATTRI_RESP ServerCommonCmd = 12 // 更新用户属性 CommonResponse
ServerCommonCmd_CMD_GET_BONUS_REQ ServerCommonCmd = 13 // NULL
ServerCommonCmd_CMD_GET_BONUS_RESP ServerCommonCmd = 14 // MSG_GET_BONUS_RESP
ServerCommonCmd_CMD_BS_REQ ServerCommonCmd = 15
ServerCommonCmd_CMD_BS_RESP ServerCommonCmd = 16 // MSG_MSG_QUE
)
// Enum value maps for ServerCommonCmd.
var (
ServerCommonCmd_name = map[int32]string{
0: "CMD_COMMON_INVALID",
1: "CMD_NA_1",
2: "CMD_FREEZE_PLAYER_RESP",
3: "CMD_GET_PLAYER_BALANCE_REQ",
4: "CMD_GET_PLAYER_BALANCE_RESP",
5: "CMD_NA_5",
6: "CMD_SYSMESSAGE_TO_USER_RESP",
7: "CMD_NA_7",
8: "CMD_PHP_2_USER_COMMON_RESP",
9: "CMD_GET_USER_ATTRI_REQ",
10: "CMD_GET_USER_ATTRI_RESP",
11: "CMD_UPDATE_USER_ATTRI_REQ",
12: "CMD_UPDATE_USER_ATTRI_RESP",
13: "CMD_GET_BONUS_REQ",
14: "CMD_GET_BONUS_RESP",
15: "CMD_BS_REQ",
16: "CMD_BS_RESP",
}
ServerCommonCmd_value = map[string]int32{
"CMD_COMMON_INVALID": 0,
"CMD_NA_1": 1,
"CMD_FREEZE_PLAYER_RESP": 2,
"CMD_GET_PLAYER_BALANCE_REQ": 3,
"CMD_GET_PLAYER_BALANCE_RESP": 4,
"CMD_NA_5": 5,
"CMD_SYSMESSAGE_TO_USER_RESP": 6,
"CMD_NA_7": 7,
"CMD_PHP_2_USER_COMMON_RESP": 8,
"CMD_GET_USER_ATTRI_REQ": 9,
"CMD_GET_USER_ATTRI_RESP": 10,
"CMD_UPDATE_USER_ATTRI_REQ": 11,
"CMD_UPDATE_USER_ATTRI_RESP": 12,
"CMD_GET_BONUS_REQ": 13,
"CMD_GET_BONUS_RESP": 14,
"CMD_BS_REQ": 15,
"CMD_BS_RESP": 16,
}
)
func (x ServerCommonCmd) Enum() *ServerCommonCmd {
p := new(ServerCommonCmd)
*p = x
return p
}
func (x ServerCommonCmd) String() string {
return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x))
}
func (ServerCommonCmd) Descriptor() protoreflect.EnumDescriptor {
return file_platform_proto_enumTypes[2].Descriptor()
}
func (ServerCommonCmd) Type() protoreflect.EnumType {
return &file_platform_proto_enumTypes[2]
}
func (x ServerCommonCmd) Number() protoreflect.EnumNumber {
return protoreflect.EnumNumber(x)
}
// Deprecated: Use ServerCommonCmd.Descriptor instead.
func (ServerCommonCmd) EnumDescriptor() ([]byte, []int) {
return file_platform_proto_rawDescGZIP(), []int{2}
}
type CurrencyKind int32
const (
CurrencyKind_CK_INVALID CurrencyKind = 0
CurrencyKind_CK_Money CurrencyKind = 1 // 真金
CurrencyKind_CK_Practice CurrencyKind = 2 // 训练
)
// Enum value maps for CurrencyKind.
var (
CurrencyKind_name = map[int32]string{
0: "CK_INVALID",
1: "CK_Money",
2: "CK_Practice",
}
CurrencyKind_value = map[string]int32{
"CK_INVALID": 0,
"CK_Money": 1,
"CK_Practice": 2,
}
)
func (x CurrencyKind) Enum() *CurrencyKind {
p := new(CurrencyKind)
*p = x
return p
}
func (x CurrencyKind) String() string {
return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x))
}
func (CurrencyKind) Descriptor() protoreflect.EnumDescriptor {
return file_platform_proto_enumTypes[3].Descriptor()
}
func (CurrencyKind) Type() protoreflect.EnumType {
return &file_platform_proto_enumTypes[3]
}
func (x CurrencyKind) Number() protoreflect.EnumNumber {
return protoreflect.EnumNumber(x)
}
// Deprecated: Use CurrencyKind.Descriptor instead.
func (CurrencyKind) EnumDescriptor() ([]byte, []int) {
return file_platform_proto_rawDescGZIP(), []int{3}
}
//以下部分为内网使用,通用服务器内网处理,目前主要是处理跑马灯的功能,其中服务号必须为SERVER_TYPE_COMMON,以免和web服务分开
type Common_S_Cmd int32
const (
Common_S_Cmd_CMD_S_INVALID Common_S_Cmd = 0
Common_S_Cmd_CMD_S_PING Common_S_Cmd = 1
Common_S_Cmd_CMD_S_PONG Common_S_Cmd = 2
Common_S_Cmd_CMD_S_RUMMY_BS_REQ Common_S_Cmd = 3 // MSG_BS_DATA
Common_S_Cmd_CMD_S_RUMMY_BS_RESP Common_S_Cmd = 4 // CommonResponse
Common_S_Cmd_CMD_S_TEENPATTI_BS_REQ Common_S_Cmd = 5 // MSG_BS_DATA
Common_S_Cmd_CMD_S_TEENPATTI_BS_RESP Common_S_Cmd = 6 // CommonResponse
Common_S_Cmd_CMD_S_AB_BS_REQ Common_S_Cmd = 7 // MSG_BS_DATA
Common_S_Cmd_CMD_S_AB_BS_RESP Common_S_Cmd = 8 // CommonResponse
Common_S_Cmd_CMD_S_FT_BS_REQ Common_S_Cmd = 9 // MSG_BS_DATA
Common_S_Cmd_CMD_S_FT_BS_RESP Common_S_Cmd = 10 // CommonResponse
Common_S_Cmd_CMD_S_SEVENUPDOWN_BS_REQ Common_S_Cmd = 11 //
Common_S_Cmd_CMD_S_SEVENUPDOWN_BS_RESP Common_S_Cmd = 12 //
Common_S_Cmd_CMD_S_DRAGONTIGER_BS_REQ Common_S_Cmd = 13 //
Common_S_Cmd_CMD_S_DRAGONTIGER_BS_RESP Common_S_Cmd = 14
Common_S_Cmd_CMD_S_RAPIDTP_BS_REQ Common_S_Cmd = 15 //
Common_S_Cmd_CMD_S_RAPIDTP_BS_RESP Common_S_Cmd = 16
Common_S_Cmd_CMD_S_BLACKRED_BS_REQ Common_S_Cmd = 17
Common_S_Cmd_CMD_S_BLACKRED_BS_RESP Common_S_Cmd = 18
Common_S_Cmd_CMD_S_HORSERACING_BS_REQ Common_S_Cmd = 19
Common_S_Cmd_CMD_S_HORSERACING_BS_RESP Common_S_Cmd = 20
Common_S_Cmd_CMD_S_JM_BS_REQ Common_S_Cmd = 21
Common_S_Cmd_CMD_S_JM_BS_RESP Common_S_Cmd = 22
Common_S_Cmd_CMD_S_BACCARAT_REQ Common_S_Cmd = 23
Common_S_Cmd_CMD_S_BACCARAT_RESP Common_S_Cmd = 24
)
// Enum value maps for Common_S_Cmd.
var (
Common_S_Cmd_name = map[int32]string{
0: "CMD_S_INVALID",
1: "CMD_S_PING",
2: "CMD_S_PONG",
3: "CMD_S_RUMMY_BS_REQ",
4: "CMD_S_RUMMY_BS_RESP",
5: "CMD_S_TEENPATTI_BS_REQ",
6: "CMD_S_TEENPATTI_BS_RESP",
7: "CMD_S_AB_BS_REQ",
8: "CMD_S_AB_BS_RESP",
9: "CMD_S_FT_BS_REQ",
10: "CMD_S_FT_BS_RESP",
11: "CMD_S_SEVENUPDOWN_BS_REQ",
12: "CMD_S_SEVENUPDOWN_BS_RESP",
13: "CMD_S_DRAGONTIGER_BS_REQ",
14: "CMD_S_DRAGONTIGER_BS_RESP",
15: "CMD_S_RAPIDTP_BS_REQ",
16: "CMD_S_RAPIDTP_BS_RESP",
17: "CMD_S_BLACKRED_BS_REQ",
18: "CMD_S_BLACKRED_BS_RESP",
19: "CMD_S_HORSERACING_BS_REQ",
20: "CMD_S_HORSERACING_BS_RESP",
21: "CMD_S_JM_BS_REQ",
22: "CMD_S_JM_BS_RESP",
23: "CMD_S_BACCARAT_REQ",
24: "CMD_S_BACCARAT_RESP",
}
Common_S_Cmd_value = map[string]int32{
"CMD_S_INVALID": 0,
"CMD_S_PING": 1,
"CMD_S_PONG": 2,
"CMD_S_RUMMY_BS_REQ": 3,
"CMD_S_RUMMY_BS_RESP": 4,
"CMD_S_TEENPATTI_BS_REQ": 5,
"CMD_S_TEENPATTI_BS_RESP": 6,
"CMD_S_AB_BS_REQ": 7,
"CMD_S_AB_BS_RESP": 8,
"CMD_S_FT_BS_REQ": 9,
"CMD_S_FT_BS_RESP": 10,
"CMD_S_SEVENUPDOWN_BS_REQ": 11,
"CMD_S_SEVENUPDOWN_BS_RESP": 12,
"CMD_S_DRAGONTIGER_BS_REQ": 13,
"CMD_S_DRAGONTIGER_BS_RESP": 14,
"CMD_S_RAPIDTP_BS_REQ": 15,
"CMD_S_RAPIDTP_BS_RESP": 16,
"CMD_S_BLACKRED_BS_REQ": 17,
"CMD_S_BLACKRED_BS_RESP": 18,
"CMD_S_HORSERACING_BS_REQ": 19,
"CMD_S_HORSERACING_BS_RESP": 20,
"CMD_S_JM_BS_REQ": 21,
"CMD_S_JM_BS_RESP": 22,
"CMD_S_BACCARAT_REQ": 23,
"CMD_S_BACCARAT_RESP": 24,
}
)
func (x Common_S_Cmd) Enum() *Common_S_Cmd {
p := new(Common_S_Cmd)
*p = x
return p
}
func (x Common_S_Cmd) String() string {
return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x))
}
func (Common_S_Cmd) Descriptor() protoreflect.EnumDescriptor {
return file_platform_proto_enumTypes[4].Descriptor()
}
func (Common_S_Cmd) Type() protoreflect.EnumType {
return &file_platform_proto_enumTypes[4]
}
func (x Common_S_Cmd) Number() protoreflect.EnumNumber {
return protoreflect.EnumNumber(x)
}
// Deprecated: Use Common_S_Cmd.Descriptor instead.
func (Common_S_Cmd) EnumDescriptor() ([]byte, []int) {
return file_platform_proto_rawDescGZIP(), []int{4}
}
// 客户端请求定义
type ServerMatchCmd int32
const (
ServerMatchCmd_CMD_MATCH_INVALID ServerMatchCmd = 0 // 无效
ServerMatchCmd_CMD_GET_GAME_KIND_REQ ServerMatchCmd = 1 // 请求游戏种类:GameKindRequest
ServerMatchCmd_CMD_GET_GAME_KIND_RESP ServerMatchCmd = 2 // 返回游戏种类:GameKindResponse
ServerMatchCmd_CMD_GET_ROOMS_REQ ServerMatchCmd = 3 // 获取所有游戏类型:由于我们是匹配机制,这个暂时不实现
ServerMatchCmd_CMD_GET_ROOMS_RESP ServerMatchCmd = 4 //
ServerMatchCmd_CMD_MATCH_REQ ServerMatchCmd = 5 // 请求rummy\teenpatti匹配:MatchRequest
ServerMatchCmd_CMD_MATCH_RESP ServerMatchCmd = 6 // 返回rummy\teenpatti匹配:MatchResponse(这里只是告诉客户端收到了匹配申请)
ServerMatchCmd_CMD_MATCH_NA_7 ServerMatchCmd = 7
ServerMatchCmd_CMD_MATCH_OK_RESP ServerMatchCmd = 8 // 通知客户端匹配成功:MatchOKResponse
ServerMatchCmd_CMD_ENTER_GAME_REQ ServerMatchCmd = 9 // 请求非匹配类游戏直接进入:目前支持AB/7UD:EnterGameRequest
ServerMatchCmd_CMD_ENTER_GAME_RESP ServerMatchCmd = 10 // 请求非匹配类游戏直接进入:MatchOKResponse
)
// Enum value maps for ServerMatchCmd.
var (
ServerMatchCmd_name = map[int32]string{
0: "CMD_MATCH_INVALID",
1: "CMD_GET_GAME_KIND_REQ",
2: "CMD_GET_GAME_KIND_RESP",
3: "CMD_GET_ROOMS_REQ",
4: "CMD_GET_ROOMS_RESP",
5: "CMD_MATCH_REQ",
6: "CMD_MATCH_RESP",
7: "CMD_MATCH_NA_7",
8: "CMD_MATCH_OK_RESP",
9: "CMD_ENTER_GAME_REQ",
10: "CMD_ENTER_GAME_RESP",
}
ServerMatchCmd_value = map[string]int32{
"CMD_MATCH_INVALID": 0,
"CMD_GET_GAME_KIND_REQ": 1,
"CMD_GET_GAME_KIND_RESP": 2,
"CMD_GET_ROOMS_REQ": 3,
"CMD_GET_ROOMS_RESP": 4,
"CMD_MATCH_REQ": 5,
"CMD_MATCH_RESP": 6,
"CMD_MATCH_NA_7": 7,
"CMD_MATCH_OK_RESP": 8,
"CMD_ENTER_GAME_REQ": 9,
"CMD_ENTER_GAME_RESP": 10,
}
)
func (x ServerMatchCmd) Enum() *ServerMatchCmd {
p := new(ServerMatchCmd)
*p = x
return p
}
func (x ServerMatchCmd) String() string {
return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x))
}
func (ServerMatchCmd) Descriptor() protoreflect.EnumDescriptor {
return file_platform_proto_enumTypes[5].Descriptor()
}
func (ServerMatchCmd) Type() protoreflect.EnumType {
return &file_platform_proto_enumTypes[5]
}
func (x ServerMatchCmd) Number() protoreflect.EnumNumber {
return protoreflect.EnumNumber(x)
}
// Deprecated: Use ServerMatchCmd.Descriptor instead.
func (ServerMatchCmd) EnumDescriptor() ([]byte, []int) {
return file_platform_proto_rawDescGZIP(), []int{5}
}
// 游戏支持的种类
type GameKind int32
const (
GameKind_INVALID GameKind = 0
GameKind_GAME_KIND_Rummy GameKind = 1 // rummy
GameKind_GAME_KIND_Rummy_pool GameKind = 2 // rummy_pool
GameKind_GAME_KIND_Rummy_10 GameKind = 3 // rummy_10
GameKind_GAME_KIND_TEEPATTI GameKind = 4 // teepatti
GameKind_GAME_KIND_AB GameKind = 5 // Andar Bahar
GameKind_GAME_KIND_SevenUD GameKind = 6 // seven up down
GameKind_GAME_KIND_RapidTeenaptti GameKind = 7 // rapid teenpatti
GameKind_GAME_KIND_DragonTiger GameKind = 8 // DragonTiger
GameKind_GAME_KIND_BlackRed GameKind = 9 // Black Red
GameKind_GAME_KIND_HorseRacing GameKind = 10 // 赛马
GameKind_GAME_KIND_JM GameKind = 11 // Jhandi Munda
GameKind_GAME_KIND_BACCARAT GameKind = 12 // baccarat
GameKind_GAME_KIND_FT GameKind = 20 // fantasy time
)
// Enum value maps for GameKind.
var (
GameKind_name = map[int32]string{
0: "INVALID",
1: "GAME_KIND_Rummy",
2: "GAME_KIND_Rummy_pool",
3: "GAME_KIND_Rummy_10",
4: "GAME_KIND_TEEPATTI",
5: "GAME_KIND_AB",
6: "GAME_KIND_SevenUD",
7: "GAME_KIND_RapidTeenaptti",
8: "GAME_KIND_DragonTiger",
9: "GAME_KIND_BlackRed",
10: "GAME_KIND_HorseRacing",
11: "GAME_KIND_JM",
12: "GAME_KIND_BACCARAT",
20: "GAME_KIND_FT",
}
GameKind_value = map[string]int32{
"INVALID": 0,
"GAME_KIND_Rummy": 1,
"GAME_KIND_Rummy_pool": 2,
"GAME_KIND_Rummy_10": 3,
"GAME_KIND_TEEPATTI": 4,
"GAME_KIND_AB": 5,
"GAME_KIND_SevenUD": 6,
"GAME_KIND_RapidTeenaptti": 7,
"GAME_KIND_DragonTiger": 8,
"GAME_KIND_BlackRed": 9,
"GAME_KIND_HorseRacing": 10,
"GAME_KIND_JM": 11,
"GAME_KIND_BACCARAT": 12,
"GAME_KIND_FT": 20,
}
)
func (x GameKind) Enum() *GameKind {
p := new(GameKind)
*p = x
return p
}
func (x GameKind) String() string {
return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x))
}
func (GameKind) Descriptor() protoreflect.EnumDescriptor {
return file_platform_proto_enumTypes[6].Descriptor()
}
func (GameKind) Type() protoreflect.EnumType {
return &file_platform_proto_enumTypes[6]
}
func (x GameKind) Number() protoreflect.EnumNumber {
return protoreflect.EnumNumber(x)
}
// Deprecated: Use GameKind.Descriptor instead.
func (GameKind) EnumDescriptor() ([]byte, []int) {
return file_platform_proto_rawDescGZIP(), []int{6}
}
// 用户数据
type GameUser struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
Uid uint32 `protobuf:"varint,1,opt,name=uid,proto3" json:"uid,omitempty"` // 用户id
RealUser uint32 `protobuf:"varint,2,opt,name=real_user,json=realUser,proto3" json:"real_user,omitempty"` // 0:真实用户;1:机器人
Coin uint32 `protobuf:"varint,3,opt,name=coin,proto3" json:"coin,omitempty"` // 用户的金币:此值不一定会填写,根据游戏类型决定
UserNick string `protobuf:"bytes,4,opt,name=user_nick,json=userNick,proto3" json:"user_nick,omitempty"` // 用户的昵称
UserHead string `protobuf:"bytes,5,opt,name=user_head,json=userHead,proto3" json:"user_head,omitempty"` // 用户的头像
}
func (x *GameUser) Reset() {
*x = GameUser{}
if protoimpl.UnsafeEnabled {
mi := &file_platform_proto_msgTypes[0]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
}
func (x *GameUser) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*GameUser) ProtoMessage() {}
func (x *GameUser) ProtoReflect() protoreflect.Message {
mi := &file_platform_proto_msgTypes[0]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
}
return ms
}
return mi.MessageOf(x)
}
// Deprecated: Use GameUser.ProtoReflect.Descriptor instead.
func (*GameUser) Descriptor() ([]byte, []int) {
return file_platform_proto_rawDescGZIP(), []int{0}
}
func (x *GameUser) GetUid() uint32 {
if x != nil {
return x.Uid
}
return 0
}
func (x *GameUser) GetRealUser() uint32 {
if x != nil {
return x.RealUser
}
return 0
}
func (x *GameUser) GetCoin() uint32 {
if x != nil {
return x.Coin
}
return 0
}
func (x *GameUser) GetUserNick() string {
if x != nil {
return x.UserNick
}
return ""
}
func (x *GameUser) GetUserHead() string {
if x != nil {
return x.UserHead
}
return ""
}
// 通用消息
type CommonResponse struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
Result uint32 `protobuf:"varint,1,opt,name=result,proto3" json:"result,omitempty"` // 0:成功
}
func (x *CommonResponse) Reset() {
*x = CommonResponse{}
if protoimpl.UnsafeEnabled {
mi := &file_platform_proto_msgTypes[1]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
}
func (x *CommonResponse) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*CommonResponse) ProtoMessage() {}
func (x *CommonResponse) ProtoReflect() protoreflect.Message {
mi := &file_platform_proto_msgTypes[1]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
}
return ms
}
return mi.MessageOf(x)
}
// Deprecated: Use CommonResponse.ProtoReflect.Descriptor instead.
func (*CommonResponse) Descriptor() ([]byte, []int) {
return file_platform_proto_rawDescGZIP(), []int{1}
}
func (x *CommonResponse) GetResult() uint32 {
if x != nil {
return x.Result
}
return 0
}
// 登录请求 :这个登录请求的command可能有多个,但是返回取都是一样的
type LoginRequest struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
UserId uint32 `protobuf:"varint,1,opt,name=user_id,json=userId,proto3" json:"user_id,omitempty"` // UID
Token string `protobuf:"bytes,2,opt,name=token,proto3" json:"token,omitempty"` // Token
}
func (x *LoginRequest) Reset() {
*x = LoginRequest{}
if protoimpl.UnsafeEnabled {
mi := &file_platform_proto_msgTypes[2]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
}
func (x *LoginRequest) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*LoginRequest) ProtoMessage() {}
func (x *LoginRequest) ProtoReflect() protoreflect.Message {
mi := &file_platform_proto_msgTypes[2]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
}
return ms
}
return mi.MessageOf(x)
}
// Deprecated: Use LoginRequest.ProtoReflect.Descriptor instead.
func (*LoginRequest) Descriptor() ([]byte, []int) {
return file_platform_proto_rawDescGZIP(), []int{2}
}
func (x *LoginRequest) GetUserId() uint32 {
if x != nil {
return x.UserId
}
return 0
}
func (x *LoginRequest) GetToken() string {
if x != nil {
return x.Token
}
return ""
}
// 登录返回
type LoginResponse struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
Result uint32 `protobuf:"varint,1,opt,name=result,proto3" json:"result,omitempty"` // 0 成功;1 userId错误(用户不存在)
UserId uint32 `protobuf:"varint,2,opt,name=user_id,json=userId,proto3" json:"user_id,omitempty"` // UID:这个地方必定和请求中的uid一致,但是为了方便客户端异步处理,把UID返回了
}
func (x *LoginResponse) Reset() {
*x = LoginResponse{}
if protoimpl.UnsafeEnabled {
mi := &file_platform_proto_msgTypes[3]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
}
func (x *LoginResponse) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*LoginResponse) ProtoMessage() {}
func (x *LoginResponse) ProtoReflect() protoreflect.Message {
mi := &file_platform_proto_msgTypes[3]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
}
return ms
}
return mi.MessageOf(x)
}
// Deprecated: Use LoginResponse.ProtoReflect.Descriptor instead.
func (*LoginResponse) Descriptor() ([]byte, []int) {
return file_platform_proto_rawDescGZIP(), []int{3}
}
func (x *LoginResponse) GetResult() uint32 {
if x != nil {
return x.Result
}
return 0
}
func (x *LoginResponse) GetUserId() uint32 {
if x != nil {
return x.UserId
}
return 0
}
// 获取用户余额返回
type GetPlayerBalanceResponse struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
Result uint32 `protobuf:"varint,1,opt,name=result,proto3" json:"result,omitempty"` // 是否取到了值, 0 表示取到了值, 1 表示没有取到
Balance uint32 `protobuf:"varint,2,opt,name=balance,proto3" json:"balance,omitempty"` // 存储账户余额
BalanceWins uint32 `protobuf:"varint,3,opt,name=balance_wins,json=balanceWins,proto3" json:"balance_wins,omitempty"` // 可提现账户余额
Partices uint32 `protobuf:"varint,4,opt,name=partices,proto3" json:"partices,omitempty"` // 练习币余额
GameCurrency CurrencyKind `protobuf:"varint,5,opt,name=game_currency,json=gameCurrency,proto3,enum=com.cw.chess.platform.CurrencyKind" json:"game_currency,omitempty"` // (建议使用:因为不管怎么样,这个结构会返回所有的数据,但到底显示是真金还是训练币,由其他逻辑保证)
}
func (x *GetPlayerBalanceResponse) Reset() {
*x = GetPlayerBalanceResponse{}
if protoimpl.UnsafeEnabled {
mi := &file_platform_proto_msgTypes[4]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
}
func (x *GetPlayerBalanceResponse) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*GetPlayerBalanceResponse) ProtoMessage() {}
func (x *GetPlayerBalanceResponse) ProtoReflect() protoreflect.Message {
mi := &file_platform_proto_msgTypes[4]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
}
return ms
}
return mi.MessageOf(x)
}
// Deprecated: Use GetPlayerBalanceResponse.ProtoReflect.Descriptor instead.
func (*GetPlayerBalanceResponse) Descriptor() ([]byte, []int) {
return file_platform_proto_rawDescGZIP(), []int{4}
}
func (x *GetPlayerBalanceResponse) GetResult() uint32 {
if x != nil {
return x.Result
}
return 0
}
func (x *GetPlayerBalanceResponse) GetBalance() uint32 {
if x != nil {
return x.Balance
}
return 0
}
func (x *GetPlayerBalanceResponse) GetBalanceWins() uint32 {
if x != nil {
return x.BalanceWins
}
return 0
}
func (x *GetPlayerBalanceResponse) GetPartices() uint32 {
if x != nil {
return x.Partices
}
return 0
}
func (x *GetPlayerBalanceResponse) GetGameCurrency() CurrencyKind {
if x != nil {
return x.GameCurrency
}
return CurrencyKind_CK_INVALID
}
// 系统消息
type MessageToUserResp struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
LastTime uint32 `protobuf:"varint,1,opt,name=lastTime,proto3" json:"lastTime,omitempty"` // 持续时间,单位:秒,最大值2小时=2*60*60
Context string `protobuf:"bytes,2,opt,name=context,proto3" json:"context,omitempty"` // 内容:消息内容
}
func (x *MessageToUserResp) Reset() {
*x = MessageToUserResp{}
if protoimpl.UnsafeEnabled {
mi := &file_platform_proto_msgTypes[5]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
}
func (x *MessageToUserResp) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*MessageToUserResp) ProtoMessage() {}
func (x *MessageToUserResp) ProtoReflect() protoreflect.Message {
mi := &file_platform_proto_msgTypes[5]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
}
return ms
}
return mi.MessageOf(x)
}
// Deprecated: Use MessageToUserResp.ProtoReflect.Descriptor instead.
func (*MessageToUserResp) Descriptor() ([]byte, []int) {
return file_platform_proto_rawDescGZIP(), []int{5}
}
func (x *MessageToUserResp) GetLastTime() uint32 {
if x != nil {
return x.LastTime
}
return 0
}
func (x *MessageToUserResp) GetContext() string {
if x != nil {
return x.Context
}
return ""
}
type UserAttri struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
UserId uint32 `protobuf:"varint,1,opt,name=user_id,json=userId,proto3" json:"user_id,omitempty"`
Nick string `protobuf:"bytes,2,opt,name=nick,proto3" json:"nick,omitempty"`
Head string `protobuf:"bytes,3,opt,name=head,proto3" json:"head,omitempty"`
}
func (x *UserAttri) Reset() {
*x = UserAttri{}
if protoimpl.UnsafeEnabled {
mi := &file_platform_proto_msgTypes[6]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
}
func (x *UserAttri) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*UserAttri) ProtoMessage() {}
func (x *UserAttri) ProtoReflect() protoreflect.Message {
mi := &file_platform_proto_msgTypes[6]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
}
return ms
}
return mi.MessageOf(x)
}
// Deprecated: Use UserAttri.ProtoReflect.Descriptor instead.
func (*UserAttri) Descriptor() ([]byte, []int) {
return file_platform_proto_rawDescGZIP(), []int{6}
}
func (x *UserAttri) GetUserId() uint32 {
if x != nil {
return x.UserId
}
return 0
}
func (x *UserAttri) GetNick() string {
if x != nil {
return x.Nick
}
return ""
}
func (x *UserAttri) GetHead() string {
if x != nil {
return x.Head
}
return ""
}
type MSG_GET_USER_ATTRI_REQ struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
UserIds []uint32 `protobuf:"varint,1,rep,packed,name=user_ids,json=userIds,proto3" json:"user_ids,omitempty"` // 最多50个
}
func (x *MSG_GET_USER_ATTRI_REQ) Reset() {
*x = MSG_GET_USER_ATTRI_REQ{}
if protoimpl.UnsafeEnabled {
mi := &file_platform_proto_msgTypes[7]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
}
func (x *MSG_GET_USER_ATTRI_REQ) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*MSG_GET_USER_ATTRI_REQ) ProtoMessage() {}
func (x *MSG_GET_USER_ATTRI_REQ) ProtoReflect() protoreflect.Message {
mi := &file_platform_proto_msgTypes[7]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
}
return ms
}
return mi.MessageOf(x)
}
// Deprecated: Use MSG_GET_USER_ATTRI_REQ.ProtoReflect.Descriptor instead.
func (*MSG_GET_USER_ATTRI_REQ) Descriptor() ([]byte, []int) {
return file_platform_proto_rawDescGZIP(), []int{7}
}
func (x *MSG_GET_USER_ATTRI_REQ) GetUserIds() []uint32 {
if x != nil {
return x.UserIds
}
return nil
}
type MSG_GET_USER_ATTRI_RESP struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
UserAttris []*UserAttri `protobuf:"bytes,1,rep,name=user_attris,json=userAttris,proto3" json:"user_attris,omitempty"`
}
func (x *MSG_GET_USER_ATTRI_RESP) Reset() {
*x = MSG_GET_USER_ATTRI_RESP{}
if protoimpl.UnsafeEnabled {
mi := &file_platform_proto_msgTypes[8]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
}
func (x *MSG_GET_USER_ATTRI_RESP) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*MSG_GET_USER_ATTRI_RESP) ProtoMessage() {}
func (x *MSG_GET_USER_ATTRI_RESP) ProtoReflect() protoreflect.Message {
mi := &file_platform_proto_msgTypes[8]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
}
return ms
}
return mi.MessageOf(x)
}
// Deprecated: Use MSG_GET_USER_ATTRI_RESP.ProtoReflect.Descriptor instead.
func (*MSG_GET_USER_ATTRI_RESP) Descriptor() ([]byte, []int) {
return file_platform_proto_rawDescGZIP(), []int{8}
}
func (x *MSG_GET_USER_ATTRI_RESP) GetUserAttris() []*UserAttri {
if x != nil {
return x.UserAttris
}
return nil
}
type MSG_UPDATE_USER_ATTRI_REQ struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
UserAttri *UserAttri `protobuf:"bytes,1,opt,name=user_attri,json=userAttri,proto3" json:"user_attri,omitempty"` // 更新的属性,注意:只能更新自己的,UserAttri中的user_id可以不填
}
func (x *MSG_UPDATE_USER_ATTRI_REQ) Reset() {
*x = MSG_UPDATE_USER_ATTRI_REQ{}
if protoimpl.UnsafeEnabled {
mi := &file_platform_proto_msgTypes[9]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
}
func (x *MSG_UPDATE_USER_ATTRI_REQ) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*MSG_UPDATE_USER_ATTRI_REQ) ProtoMessage() {}
func (x *MSG_UPDATE_USER_ATTRI_REQ) ProtoReflect() protoreflect.Message {
mi := &file_platform_proto_msgTypes[9]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
}
return ms
}
return mi.MessageOf(x)
}
// Deprecated: Use MSG_UPDATE_USER_ATTRI_REQ.ProtoReflect.Descriptor instead.
func (*MSG_UPDATE_USER_ATTRI_REQ) Descriptor() ([]byte, []int) {
return file_platform_proto_rawDescGZIP(), []int{9}
}
func (x *MSG_UPDATE_USER_ATTRI_REQ) GetUserAttri() *UserAttri {
if x != nil {
return x.UserAttri
}
return nil
}
type MSG_GET_BONUS_RESP struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
Bonus uint32 `protobuf:"varint,1,opt,name=bonus,proto3" json:"bonus,omitempty"`
}
func (x *MSG_GET_BONUS_RESP) Reset() {
*x = MSG_GET_BONUS_RESP{}
if protoimpl.UnsafeEnabled {
mi := &file_platform_proto_msgTypes[10]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
}
func (x *MSG_GET_BONUS_RESP) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*MSG_GET_BONUS_RESP) ProtoMessage() {}
func (x *MSG_GET_BONUS_RESP) ProtoReflect() protoreflect.Message {
mi := &file_platform_proto_msgTypes[10]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
}
return ms
}
return mi.MessageOf(x)
}
// Deprecated: Use MSG_GET_BONUS_RESP.ProtoReflect.Descriptor instead.
func (*MSG_GET_BONUS_RESP) Descriptor() ([]byte, []int) {
return file_platform_proto_rawDescGZIP(), []int{10}
}
func (x *MSG_GET_BONUS_RESP) GetBonus() uint32 {
if x != nil {
return x.Bonus
}
return 0
}
// 任意用户充值达到 Rs.1000(配置项)将进行广播
type BS_RECHARGE struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
Recharge uint32 `protobuf:"varint,1,opt,name=recharge,proto3" json:"recharge,omitempty"` // 1:充值;2:提现
CurrencyValue uint32 `protobuf:"varint,2,opt,name=currency_value,json=currencyValue,proto3" json:"currency_value,omitempty"` // 金额
}
func (x *BS_RECHARGE) Reset() {
*x = BS_RECHARGE{}
if protoimpl.UnsafeEnabled {
mi := &file_platform_proto_msgTypes[11]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
}
func (x *BS_RECHARGE) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*BS_RECHARGE) ProtoMessage() {}
func (x *BS_RECHARGE) ProtoReflect() protoreflect.Message {
mi := &file_platform_proto_msgTypes[11]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
}
return ms
}
return mi.MessageOf(x)
}
// Deprecated: Use BS_RECHARGE.ProtoReflect.Descriptor instead.
func (*BS_RECHARGE) Descriptor() ([]byte, []int) {
return file_platform_proto_rawDescGZIP(), []int{11}
}
func (x *BS_RECHARGE) GetRecharge() uint32 {
if x != nil {
return x.Recharge
}
return 0
}
func (x *BS_RECHARGE) GetCurrencyValue() uint32 {
if x != nil {
return x.CurrencyValue
}
return 0
}
// Wow! Player ***1234 just won Rs.xxx in Rummy/Teen Patti/Andar Bahar.
type BS_GAME struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
GameType uint32 `protobuf:"varint,1,opt,name=game_type,json=gameType,proto3" json:"game_type,omitempty"` // 1:rummy;4:teenpatti;5:Andar Bahar
CurrencyValue uint32 `protobuf:"varint,2,opt,name=currency_value,json=currencyValue,proto3" json:"currency_value,omitempty"` // 金额
Parameter_1 uint32 `protobuf:"varint,3,opt,name=parameter_1,json=parameter1,proto3" json:"parameter_1,omitempty"`
Parameter_2 uint32 `protobuf:"varint,4,opt,name=parameter_2,json=parameter2,proto3" json:"parameter_2,omitempty"`
Parameter_3 uint32 `protobuf:"varint,5,opt,name=parameter_3,json=parameter3,proto3" json:"parameter_3,omitempty"`
}
func (x *BS_GAME) Reset() {
*x = BS_GAME{}
if protoimpl.UnsafeEnabled {
mi := &file_platform_proto_msgTypes[12]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
}
func (x *BS_GAME) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*BS_GAME) ProtoMessage() {}
func (x *BS_GAME) ProtoReflect() protoreflect.Message {
mi := &file_platform_proto_msgTypes[12]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
}
return ms
}
return mi.MessageOf(x)
}
// Deprecated: Use BS_GAME.ProtoReflect.Descriptor instead.
func (*BS_GAME) Descriptor() ([]byte, []int) {
return file_platform_proto_rawDescGZIP(), []int{12}
}
func (x *BS_GAME) GetGameType() uint32 {
if x != nil {
return x.GameType
}
return 0
}
func (x *BS_GAME) GetCurrencyValue() uint32 {
if x != nil {
return x.CurrencyValue
}
return 0
}
func (x *BS_GAME) GetParameter_1() uint32 {
if x != nil {
return x.Parameter_1
}
return 0
}
func (x *BS_GAME) GetParameter_2() uint32 {
if x != nil {
return x.Parameter_2
}
return 0
}
func (x *BS_GAME) GetParameter_3() uint32 {
if x != nil {
return x.Parameter_3
}
return 0
}
type MSG_BS_DATA struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
UserId uint32 `protobuf:"varint,1,opt,name=user_id,json=userId,proto3" json:"user_id,omitempty"`
UserNick uint32 `protobuf:"varint,2,opt,name=user_nick,json=userNick,proto3" json:"user_nick,omitempty"`
BsType uint32 `protobuf:"varint,3,opt,name=bs_type,json=bsType,proto3" json:"bs_type,omitempty"`
MsgRecharge *BS_RECHARGE `protobuf:"bytes,4,opt,name=msg_recharge,json=msgRecharge,proto3" json:"msg_recharge,omitempty"`
MsgGame *BS_GAME `protobuf:"bytes,5,opt,name=msg_game,json=msgGame,proto3" json:"msg_game,omitempty"`
TimeStamp uint32 `protobuf:"varint,6,opt,name=time_stamp,json=timeStamp,proto3" json:"time_stamp,omitempty"` // 时间戳(客户端不需要使用该值)
}
func (x *MSG_BS_DATA) Reset() {
*x = MSG_BS_DATA{}
if protoimpl.UnsafeEnabled {
mi := &file_platform_proto_msgTypes[13]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
}
func (x *MSG_BS_DATA) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*MSG_BS_DATA) ProtoMessage() {}
func (x *MSG_BS_DATA) ProtoReflect() protoreflect.Message {
mi := &file_platform_proto_msgTypes[13]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
}
return ms
}
return mi.MessageOf(x)
}
// Deprecated: Use MSG_BS_DATA.ProtoReflect.Descriptor instead.
func (*MSG_BS_DATA) Descriptor() ([]byte, []int) {
return file_platform_proto_rawDescGZIP(), []int{13}
}
func (x *MSG_BS_DATA) GetUserId() uint32 {
if x != nil {
return x.UserId
}
return 0
}
func (x *MSG_BS_DATA) GetUserNick() uint32 {
if x != nil {
return x.UserNick
}
return 0
}
func (x *MSG_BS_DATA) GetBsType() uint32 {
if x != nil {
return x.BsType
}
return 0
}
func (x *MSG_BS_DATA) GetMsgRecharge() *BS_RECHARGE {
if x != nil {
return x.MsgRecharge
}
return nil
}
func (x *MSG_BS_DATA) GetMsgGame() *BS_GAME {
if x != nil {
return x.MsgGame
}
return nil
}
func (x *MSG_BS_DATA) GetTimeStamp() uint32 {
if x != nil {
return x.TimeStamp
}
return 0
}
type MSG_MSG_QUE_DATA struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
//Wow! Player ***1234 just won <color=#00ff00>Rs.xxx</c> in <color=#0fffff>Rummy</color>
//Play <color=#00ff00>***1234</c> add cash <color=#00ff00>Rs.xxx</c>
MsgContent string `protobuf:"bytes,1,opt,name=msg_content,json=msgContent,proto3" json:"msg_content,omitempty"`
}
func (x *MSG_MSG_QUE_DATA) Reset() {
*x = MSG_MSG_QUE_DATA{}
if protoimpl.UnsafeEnabled {
mi := &file_platform_proto_msgTypes[14]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
}
func (x *MSG_MSG_QUE_DATA) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*MSG_MSG_QUE_DATA) ProtoMessage() {}
func (x *MSG_MSG_QUE_DATA) ProtoReflect() protoreflect.Message {
mi := &file_platform_proto_msgTypes[14]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
}
return ms
}
return mi.MessageOf(x)
}
// Deprecated: Use MSG_MSG_QUE_DATA.ProtoReflect.Descriptor instead.
func (*MSG_MSG_QUE_DATA) Descriptor() ([]byte, []int) {
return file_platform_proto_rawDescGZIP(), []int{14}
}
func (x *MSG_MSG_QUE_DATA) GetMsgContent() string {
if x != nil {
return x.MsgContent
}
return ""
}
type MSG_MSG_QUE struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
DataList []*MSG_MSG_QUE_DATA `protobuf:"bytes,1,rep,name=data_list,json=dataList,proto3" json:"data_list,omitempty"`
}
func (x *MSG_MSG_QUE) Reset() {
*x = MSG_MSG_QUE{}
if protoimpl.UnsafeEnabled {
mi := &file_platform_proto_msgTypes[15]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
}
func (x *MSG_MSG_QUE) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*MSG_MSG_QUE) ProtoMessage() {}
func (x *MSG_MSG_QUE) ProtoReflect() protoreflect.Message {
mi := &file_platform_proto_msgTypes[15]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
}
return ms
}
return mi.MessageOf(x)
}
// Deprecated: Use MSG_MSG_QUE.ProtoReflect.Descriptor instead.
func (*MSG_MSG_QUE) Descriptor() ([]byte, []int) {
return file_platform_proto_rawDescGZIP(), []int{15}
}
func (x *MSG_MSG_QUE) GetDataList() []*MSG_MSG_QUE_DATA {
if x != nil {
return x.DataList
}
return nil
}
// 游戏级别的基础定义
type GameLevelDesc struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
LevelId uint32 `protobuf:"varint,1,opt,name=level_id,json=levelId,proto3" json:"level_id,omitempty"` // 级别ID
CurrencyKind CurrencyKind `protobuf:"varint,2,opt,name=currency_kind,json=currencyKind,proto3,enum=com.cw.chess.platform.CurrencyKind" json:"currency_kind,omitempty"` // 真金还是训练(这个逻辑客户端要判定)
CurrencyLimit uint32 `protobuf:"varint,3,opt,name=currency_limit,json=currencyLimit,proto3" json:"currency_limit,omitempty"` // 进入限制(这个逻辑客户端不需要判定,只显示,服务器会下发,免得以后要修改逻辑)
LevelName string `protobuf:"bytes,4,opt,name=level_name,json=levelName,proto3" json:"level_name,omitempty"` // 级别名字,例如(中级房)
UserCount uint32 `protobuf:"varint,5,opt,name=user_count,json=userCount,proto3" json:"user_count,omitempty"` // 这个级别有多少个用户在玩
TaxPermillage uint32 `protobuf:"varint,6,opt,name=tax_permillage,json=taxPermillage,proto3" json:"tax_permillage,omitempty"` // 抽水比率(千分比)
GameId uint32 `protobuf:"varint,7,opt,name=game_id,json=gameId,proto3" json:"game_id,omitempty"`
}
func (x *GameLevelDesc) Reset() {
*x = GameLevelDesc{}
if protoimpl.UnsafeEnabled {
mi := &file_platform_proto_msgTypes[16]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
}
func (x *GameLevelDesc) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*GameLevelDesc) ProtoMessage() {}
func (x *GameLevelDesc) ProtoReflect() protoreflect.Message {
mi := &file_platform_proto_msgTypes[16]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
}
return ms
}
return mi.MessageOf(x)
}
// Deprecated: Use GameLevelDesc.ProtoReflect.Descriptor instead.
func (*GameLevelDesc) Descriptor() ([]byte, []int) {
return file_platform_proto_rawDescGZIP(), []int{16}
}
func (x *GameLevelDesc) GetLevelId() uint32 {
if x != nil {
return x.LevelId
}
return 0
}
func (x *GameLevelDesc) GetCurrencyKind() CurrencyKind {
if x != nil {
return x.CurrencyKind
}
return CurrencyKind_CK_INVALID
}
func (x *GameLevelDesc) GetCurrencyLimit() uint32 {
if x != nil {
return x.CurrencyLimit
}
return 0
}
func (x *GameLevelDesc) GetLevelName() string {
if x != nil {
return x.LevelName
}
return ""
}
func (x *GameLevelDesc) GetUserCount() uint32 {
if x != nil {
return x.UserCount
}
return 0
}
func (x *GameLevelDesc) GetTaxPermillage() uint32 {
if x != nil {
return x.TaxPermillage
}
return 0
}
func (x *GameLevelDesc) GetGameId() uint32 {
if x != nil {
return x.GameId
}
return 0
}
// rummy每一个级别的数据描叙
type RummyLevelDesc struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
GameLevel *GameLevelDesc `protobuf:"bytes,1,opt,name=game_level,json=gameLevel,proto3" json:"game_level,omitempty"` // 游戏通用描叙
RummyPlayersSize uint32 `protobuf:"varint,2,opt,name=rummy_players_size,json=rummyPlayersSize,proto3" json:"rummy_players_size,omitempty"` // 一个桌子支持几个玩家,可能是2/6
ScoreValue uint32 `protobuf:"varint,3,opt,name=score_value,json=scoreValue,proto3" json:"score_value,omitempty"` // rummy一张牌的分数,后续计算全部根据这个值来
TimesFeeRatio uint32 `protobuf:"varint,4,opt,name=times_fee_ratio,json=timesFeeRatio,proto3" json:"times_fee_ratio,omitempty"` // rummy的台费系数
Fantasytime uint32 `protobuf:"varint,5,opt,name=fantasytime,proto3" json:"fantasytime,omitempty"` // 是否支持ft,0:不支持,1:支持
}
func (x *RummyLevelDesc) Reset() {
*x = RummyLevelDesc{}
if protoimpl.UnsafeEnabled {
mi := &file_platform_proto_msgTypes[17]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
}
func (x *RummyLevelDesc) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*RummyLevelDesc) ProtoMessage() {}
func (x *RummyLevelDesc) ProtoReflect() protoreflect.Message {
mi := &file_platform_proto_msgTypes[17]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
}
return ms
}
return mi.MessageOf(x)
}
// Deprecated: Use RummyLevelDesc.ProtoReflect.Descriptor instead.
func (*RummyLevelDesc) Descriptor() ([]byte, []int) {
return file_platform_proto_rawDescGZIP(), []int{17}
}
func (x *RummyLevelDesc) GetGameLevel() *GameLevelDesc {
if x != nil {
return x.GameLevel
}
return nil
}
func (x *RummyLevelDesc) GetRummyPlayersSize() uint32 {
if x != nil {
return x.RummyPlayersSize
}
return 0
}
func (x *RummyLevelDesc) GetScoreValue() uint32 {
if x != nil {
return x.ScoreValue
}
return 0
}
func (x *RummyLevelDesc) GetTimesFeeRatio() uint32 {
if x != nil {
return x.TimesFeeRatio
}
return 0
}
func (x *RummyLevelDesc) GetFantasytime() uint32 {
if x != nil {
return x.Fantasytime
}
return 0
}
// teepatti每一个级别的数据描叙
type TeepattiLevelDesc struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
GameLevel *GameLevelDesc `protobuf:"bytes,1,opt,name=game_level,json=gameLevel,proto3" json:"game_level,omitempty"` // 游戏通用描叙
Blind uint32 `protobuf:"varint,2,opt,name=blind,proto3" json:"blind,omitempty"` // teepatti是按照盲注的倍数来计算分数
SingleMaxBet uint32 `protobuf:"varint,3,opt,name=single_max_bet,json=singleMaxBet,proto3" json:"single_max_bet,omitempty"` // 单个用户最大封顶值
TableMaxBet uint32 `protobuf:"varint,4,opt,name=table_max_bet,json=tableMaxBet,proto3" json:"table_max_bet,omitempty"` // 桌子最大封顶值
TimesFeeRatio uint32 `protobuf:"varint,5,opt,name=times_fee_ratio,json=timesFeeRatio,proto3" json:"times_fee_ratio,omitempty"` // teenpatti的台费系数
Fantasytime uint32 `protobuf:"varint,6,opt,name=fantasytime,proto3" json:"fantasytime,omitempty"` // 是否支持ft,0:不支持,1:支持
}
func (x *TeepattiLevelDesc) Reset() {
*x = TeepattiLevelDesc{}
if protoimpl.UnsafeEnabled {
mi := &file_platform_proto_msgTypes[18]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
}
func (x *TeepattiLevelDesc) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*TeepattiLevelDesc) ProtoMessage() {}
func (x *TeepattiLevelDesc) ProtoReflect() protoreflect.Message {
mi := &file_platform_proto_msgTypes[18]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
}
return ms
}
return mi.MessageOf(x)
}
// Deprecated: Use TeepattiLevelDesc.ProtoReflect.Descriptor instead.
func (*TeepattiLevelDesc) Descriptor() ([]byte, []int) {
return file_platform_proto_rawDescGZIP(), []int{18}
}
func (x *TeepattiLevelDesc) GetGameLevel() *GameLevelDesc {
if x != nil {
return x.GameLevel
}
return nil
}
func (x *TeepattiLevelDesc) GetBlind() uint32 {
if x != nil {
return x.Blind
}
return 0
}
func (x *TeepattiLevelDesc) GetSingleMaxBet() uint32 {
if x != nil {
return x.SingleMaxBet
}
return 0
}
func (x *TeepattiLevelDesc) GetTableMaxBet() uint32 {
if x != nil {
return x.TableMaxBet
}
return 0
}
func (x *TeepattiLevelDesc) GetTimesFeeRatio() uint32 {
if x != nil {
return x.TimesFeeRatio
}
return 0
}
func (x *TeepattiLevelDesc) GetFantasytime() uint32 {
if x != nil {
return x.Fantasytime
}
return 0
}
// AB每一个级别的数据描叙
type ABLevelDesc struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
GameLevel *GameLevelDesc `protobuf:"bytes,1,opt,name=game_level,json=gameLevel,proto3" json:"game_level,omitempty"` // 游戏通用描叙
BetMin uint32 `protobuf:"varint,2,opt,name=bet_min,json=betMin,proto3" json:"bet_min,omitempty"` // 最小下注
BetMax uint32 `protobuf:"varint,3,opt,name=bet_max,json=betMax,proto3" json:"bet_max,omitempty"` // 最大下注
ABPlayersSize uint32 `protobuf:"varint,4,opt,name=AB_players_size,json=ABPlayersSize,proto3" json:"AB_players_size,omitempty"` // 一个桌子支持几个玩家,通常是400
ChipTemplete uint32 `protobuf:"varint,5,opt,name=chip_templete,json=chipTemplete,proto3" json:"chip_templete,omitempty"`
}
func (x *ABLevelDesc) Reset() {
*x = ABLevelDesc{}
if protoimpl.UnsafeEnabled {
mi := &file_platform_proto_msgTypes[19]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
}
func (x *ABLevelDesc) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*ABLevelDesc) ProtoMessage() {}
func (x *ABLevelDesc) ProtoReflect() protoreflect.Message {
mi := &file_platform_proto_msgTypes[19]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
}
return ms
}
return mi.MessageOf(x)
}
// Deprecated: Use ABLevelDesc.ProtoReflect.Descriptor instead.
func (*ABLevelDesc) Descriptor() ([]byte, []int) {
return file_platform_proto_rawDescGZIP(), []int{19}
}
func (x *ABLevelDesc) GetGameLevel() *GameLevelDesc {
if x != nil {
return x.GameLevel
}
return nil
}
func (x *ABLevelDesc) GetBetMin() uint32 {
if x != nil {
return x.BetMin
}
return 0
}
func (x *ABLevelDesc) GetBetMax() uint32 {
if x != nil {
return x.BetMax
}
return 0
}
func (x *ABLevelDesc) GetABPlayersSize() uint32 {
if x != nil {
return x.ABPlayersSize
}
return 0
}
func (x *ABLevelDesc) GetChipTemplete() uint32 {
if x != nil {
return x.ChipTemplete
}
return 0
}
// 7updown每一个级别的数据描叙
type SevenUpdownLevelDesc struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
GameLevel *GameLevelDesc `protobuf:"bytes,1,opt,name=game_level,json=gameLevel,proto3" json:"game_level,omitempty"` // 游戏通用描叙
BetMin uint32 `protobuf:"varint,2,opt,name=bet_min,json=betMin,proto3" json:"bet_min,omitempty"` // 最小下注
BetMax uint32 `protobuf:"varint,3,opt,name=bet_max,json=betMax,proto3" json:"bet_max,omitempty"` // 最大下注
SDPlayersSize uint32 `protobuf:"varint,4,opt,name=SD_players_size,json=SDPlayersSize,proto3" json:"SD_players_size,omitempty"` // 一个桌子支持几个玩家,通常是400
ChipTemplete uint32 `protobuf:"varint,5,opt,name=chip_templete,json=chipTemplete,proto3" json:"chip_templete,omitempty"`
BetMin1 uint32 `protobuf:"varint,6,opt,name=bet_min1,json=betMin1,proto3" json:"bet_min1,omitempty"`
BetMax1 uint32 `protobuf:"varint,7,opt,name=bet_max1,json=betMax1,proto3" json:"bet_max1,omitempty"`
BetMin2 uint32 `protobuf:"varint,8,opt,name=bet_min2,json=betMin2,proto3" json:"bet_min2,omitempty"`
BetMax2 uint32 `protobuf:"varint,9,opt,name=bet_max2,json=betMax2,proto3" json:"bet_max2,omitempty"`
BetMin0 uint32 `protobuf:"varint,10,opt,name=bet_min0,json=betMin0,proto3" json:"bet_min0,omitempty"`
BetMax0 uint32 `protobuf:"varint,11,opt,name=bet_max0,json=betMax0,proto3" json:"bet_max0,omitempty"`
}
func (x *SevenUpdownLevelDesc) Reset() {
*x = SevenUpdownLevelDesc{}
if protoimpl.UnsafeEnabled {
mi := &file_platform_proto_msgTypes[20]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
}
func (x *SevenUpdownLevelDesc) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*SevenUpdownLevelDesc) ProtoMessage() {}
func (x *SevenUpdownLevelDesc) ProtoReflect() protoreflect.Message {
mi := &file_platform_proto_msgTypes[20]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
}
return ms
}
return mi.MessageOf(x)
}
// Deprecated: Use SevenUpdownLevelDesc.ProtoReflect.Descriptor instead.
func (*SevenUpdownLevelDesc) Descriptor() ([]byte, []int) {
return file_platform_proto_rawDescGZIP(), []int{20}
}
func (x *SevenUpdownLevelDesc) GetGameLevel() *GameLevelDesc {
if x != nil {
return x.GameLevel
}
return nil
}
func (x *SevenUpdownLevelDesc) GetBetMin() uint32 {
if x != nil {
return x.BetMin
}
return 0
}
func (x *SevenUpdownLevelDesc) GetBetMax() uint32 {
if x != nil {
return x.BetMax
}
return 0
}
func (x *SevenUpdownLevelDesc) GetSDPlayersSize() uint32 {
if x != nil {
return x.SDPlayersSize
}
return 0
}
func (x *SevenUpdownLevelDesc) GetChipTemplete() uint32 {
if x != nil {
return x.ChipTemplete
}
return 0
}
func (x *SevenUpdownLevelDesc) GetBetMin1() uint32 {
if x != nil {
return x.BetMin1
}
return 0
}
func (x *SevenUpdownLevelDesc) GetBetMax1() uint32 {
if x != nil {
return x.BetMax1
}
return 0
}
func (x *SevenUpdownLevelDesc) GetBetMin2() uint32 {
if x != nil {
return x.BetMin2
}
return 0
}
func (x *SevenUpdownLevelDesc) GetBetMax2() uint32 {
if x != nil {
return x.BetMax2
}
return 0
}
func (x *SevenUpdownLevelDesc) GetBetMin0() uint32 {
if x != nil {
return x.BetMin0
}
return 0
}
func (x *SevenUpdownLevelDesc) GetBetMax0() uint32 {
if x != nil {
return x.BetMax0
}
return 0
}
// rapid teenpatti每一个级别的数据描叙
type RapidTeenpattiLevelDesc struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
GameLevel *GameLevelDesc `protobuf:"bytes,1,opt,name=game_level,json=gameLevel,proto3" json:"game_level,omitempty"` // 游戏通用描叙
Blind uint32 `protobuf:"varint,2,opt,name=blind,proto3" json:"blind,omitempty"` // 盲注
}
func (x *RapidTeenpattiLevelDesc) Reset() {
*x = RapidTeenpattiLevelDesc{}
if protoimpl.UnsafeEnabled {
mi := &file_platform_proto_msgTypes[21]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
}
func (x *RapidTeenpattiLevelDesc) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*RapidTeenpattiLevelDesc) ProtoMessage() {}
func (x *RapidTeenpattiLevelDesc) ProtoReflect() protoreflect.Message {
mi := &file_platform_proto_msgTypes[21]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
}
return ms
}
return mi.MessageOf(x)
}
// Deprecated: Use RapidTeenpattiLevelDesc.ProtoReflect.Descriptor instead.
func (*RapidTeenpattiLevelDesc) Descriptor() ([]byte, []int) {
return file_platform_proto_rawDescGZIP(), []int{21}
}
func (x *RapidTeenpattiLevelDesc) GetGameLevel() *GameLevelDesc {
if x != nil {
return x.GameLevel
}
return nil
}
func (x *RapidTeenpattiLevelDesc) GetBlind() uint32 {
if x != nil {
return x.Blind
}
return 0
}
// DragonTiger每一个级别的数据描叙
type DragonTigerLevelDesc struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
GameLevel *GameLevelDesc `protobuf:"bytes,1,opt,name=game_level,json=gameLevel,proto3" json:"game_level,omitempty"` // 游戏通用描叙
BetMin uint32 `protobuf:"varint,2,opt,name=bet_min,json=betMin,proto3" json:"bet_min,omitempty"`
BetMax uint32 `protobuf:"varint,3,opt,name=bet_max,json=betMax,proto3" json:"bet_max,omitempty"`
SDPlayersSize uint32 `protobuf:"varint,4,opt,name=SD_players_size,json=SDPlayersSize,proto3" json:"SD_players_size,omitempty"`
ChipTemplete uint32 `protobuf:"varint,5,opt,name=chip_templete,json=chipTemplete,proto3" json:"chip_templete,omitempty"`
BetMin1 uint32 `protobuf:"varint,6,opt,name=bet_min1,json=betMin1,proto3" json:"bet_min1,omitempty"`
BetMax1 uint32 `protobuf:"varint,7,opt,name=bet_max1,json=betMax1,proto3" json:"bet_max1,omitempty"`
BetMin2 uint32 `protobuf:"varint,8,opt,name=bet_min2,json=betMin2,proto3" json:"bet_min2,omitempty"`
BetMax2 uint32 `protobuf:"varint,9,opt,name=bet_max2,json=betMax2,proto3" json:"bet_max2,omitempty"`
BetMin0 uint32 `protobuf:"varint,10,opt,name=bet_min0,json=betMin0,proto3" json:"bet_min0,omitempty"`
BetMax0 uint32 `protobuf:"varint,11,opt,name=bet_max0,json=betMax0,proto3" json:"bet_max0,omitempty"`
}
func (x *DragonTigerLevelDesc) Reset() {
*x = DragonTigerLevelDesc{}
if protoimpl.UnsafeEnabled {
mi := &file_platform_proto_msgTypes[22]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
}
func (x *DragonTigerLevelDesc) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*DragonTigerLevelDesc) ProtoMessage() {}
func (x *DragonTigerLevelDesc) ProtoReflect() protoreflect.Message {
mi := &file_platform_proto_msgTypes[22]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
}
return ms
}
return mi.MessageOf(x)
}
// Deprecated: Use DragonTigerLevelDesc.ProtoReflect.Descriptor instead.
func (*DragonTigerLevelDesc) Descriptor() ([]byte, []int) {
return file_platform_proto_rawDescGZIP(), []int{22}
}
func (x *DragonTigerLevelDesc) GetGameLevel() *GameLevelDesc {
if x != nil {
return x.GameLevel
}
return nil
}
func (x *DragonTigerLevelDesc) GetBetMin() uint32 {
if x != nil {
return x.BetMin
}
return 0
}
func (x *DragonTigerLevelDesc) GetBetMax() uint32 {
if x != nil {
return x.BetMax
}
return 0
}
func (x *DragonTigerLevelDesc) GetSDPlayersSize() uint32 {
if x != nil {
return x.SDPlayersSize
}
return 0
}
func (x *DragonTigerLevelDesc) GetChipTemplete() uint32 {
if x != nil {
return x.ChipTemplete
}
return 0
}
func (x *DragonTigerLevelDesc) GetBetMin1() uint32 {
if x != nil {
return x.BetMin1
}
return 0
}
func (x *DragonTigerLevelDesc) GetBetMax1() uint32 {
if x != nil {
return x.BetMax1
}
return 0
}
func (x *DragonTigerLevelDesc) GetBetMin2() uint32 {
if x != nil {
return x.BetMin2
}
return 0
}
func (x *DragonTigerLevelDesc) GetBetMax2() uint32 {
if x != nil {
return x.BetMax2
}
return 0
}
func (x *DragonTigerLevelDesc) GetBetMin0() uint32 {
if x != nil {
return x.BetMin0
}
return 0
}
func (x *DragonTigerLevelDesc) GetBetMax0() uint32 {
if x != nil {
return x.BetMax0
}
return 0
}
// 红黑每一个级别的数据描叙
type BlackredLevelDesc struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
GameLevel *GameLevelDesc `protobuf:"bytes,1,opt,name=game_level,json=gameLevel,proto3" json:"game_level,omitempty"` // 游戏通用描叙
BetMin uint32 `protobuf:"varint,2,opt,name=bet_min,json=betMin,proto3" json:"bet_min,omitempty"`
BetMax uint32 `protobuf:"varint,3,opt,name=bet_max,json=betMax,proto3" json:"bet_max,omitempty"`
SDPlayersSize uint32 `protobuf:"varint,4,opt,name=SD_players_size,json=SDPlayersSize,proto3" json:"SD_players_size,omitempty"`
ChipTemplete uint32 `protobuf:"varint,5,opt,name=chip_templete,json=chipTemplete,proto3" json:"chip_templete,omitempty"`
}
func (x *BlackredLevelDesc) Reset() {
*x = BlackredLevelDesc{}
if protoimpl.UnsafeEnabled {
mi := &file_platform_proto_msgTypes[23]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
}
func (x *BlackredLevelDesc) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*BlackredLevelDesc) ProtoMessage() {}
func (x *BlackredLevelDesc) ProtoReflect() protoreflect.Message {
mi := &file_platform_proto_msgTypes[23]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
}
return ms
}
return mi.MessageOf(x)
}
// Deprecated: Use BlackredLevelDesc.ProtoReflect.Descriptor instead.
func (*BlackredLevelDesc) Descriptor() ([]byte, []int) {
return file_platform_proto_rawDescGZIP(), []int{23}
}
func (x *BlackredLevelDesc) GetGameLevel() *GameLevelDesc {
if x != nil {
return x.GameLevel
}
return nil
}
func (x *BlackredLevelDesc) GetBetMin() uint32 {
if x != nil {
return x.BetMin
}
return 0
}
func (x *BlackredLevelDesc) GetBetMax() uint32 {
if x != nil {
return x.BetMax
}
return 0
}
func (x *BlackredLevelDesc) GetSDPlayersSize() uint32 {
if x != nil {
return x.SDPlayersSize
}
return 0
}
func (x *BlackredLevelDesc) GetChipTemplete() uint32 {
if x != nil {
return x.ChipTemplete
}
return 0
}
// 赛马每一个级别的数据描叙
type HorseracingDesc struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
GameLevel *GameLevelDesc `protobuf:"bytes,1,opt,name=game_level,json=gameLevel,proto3" json:"game_level,omitempty"` // 游戏通用描叙
SDPlayersSize uint32 `protobuf:"varint,2,opt,name=SD_players_size,json=SDPlayersSize,proto3" json:"SD_players_size,omitempty"`
ChipTemplete uint32 `protobuf:"varint,3,opt,name=chip_templete,json=chipTemplete,proto3" json:"chip_templete,omitempty"`
OExpectedValue uint32 `protobuf:"varint,4,opt,name=o_expected_value,json=oExpectedValue,proto3" json:"o_expected_value,omitempty"` // 胜利期望,百分制,例如85,代表85%
BetMin uint32 `protobuf:"varint,5,opt,name=bet_min,json=betMin,proto3" json:"bet_min,omitempty"`
BetMax uint32 `protobuf:"varint,6,opt,name=bet_max,json=betMax,proto3" json:"bet_max,omitempty"`
}
func (x *HorseracingDesc) Reset() {
*x = HorseracingDesc{}
if protoimpl.UnsafeEnabled {
mi := &file_platform_proto_msgTypes[24]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
}
func (x *HorseracingDesc) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*HorseracingDesc) ProtoMessage() {}
func (x *HorseracingDesc) ProtoReflect() protoreflect.Message {
mi := &file_platform_proto_msgTypes[24]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
}
return ms
}
return mi.MessageOf(x)
}
// Deprecated: Use HorseracingDesc.ProtoReflect.Descriptor instead.
func (*HorseracingDesc) Descriptor() ([]byte, []int) {
return file_platform_proto_rawDescGZIP(), []int{24}
}
func (x *HorseracingDesc) GetGameLevel() *GameLevelDesc {
if x != nil {
return x.GameLevel
}
return nil
}
func (x *HorseracingDesc) GetSDPlayersSize() uint32 {
if x != nil {
return x.SDPlayersSize
}
return 0
}
func (x *HorseracingDesc) GetChipTemplete() uint32 {
if x != nil {
return x.ChipTemplete
}
return 0
}
func (x *HorseracingDesc) GetOExpectedValue() uint32 {
if x != nil {
return x.OExpectedValue
}
return 0
}
func (x *HorseracingDesc) GetBetMin() uint32 {
if x != nil {
return x.BetMin
}
return 0
}
func (x *HorseracingDesc) GetBetMax() uint32 {
if x != nil {
return x.BetMax
}
return 0
}
// Jhandi Munda每一个级别的数据描叙
type JMLevelDesc struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
GameLevel *GameLevelDesc `protobuf:"bytes,1,opt,name=game_level,json=gameLevel,proto3" json:"game_level,omitempty"` // 游戏通用描叙
BetMin uint32 `protobuf:"varint,2,opt,name=bet_min,json=betMin,proto3" json:"bet_min,omitempty"`
BetMax uint32 `protobuf:"varint,3,opt,name=bet_max,json=betMax,proto3" json:"bet_max,omitempty"`
SDPlayersSize uint32 `protobuf:"varint,4,opt,name=SD_players_size,json=SDPlayersSize,proto3" json:"SD_players_size,omitempty"`
ChipTemplete uint32 `protobuf:"varint,5,opt,name=chip_templete,json=chipTemplete,proto3" json:"chip_templete,omitempty"`
}
func (x *JMLevelDesc) Reset() {
*x = JMLevelDesc{}
if protoimpl.UnsafeEnabled {
mi := &file_platform_proto_msgTypes[25]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
}
func (x *JMLevelDesc) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*JMLevelDesc) ProtoMessage() {}
func (x *JMLevelDesc) ProtoReflect() protoreflect.Message {
mi := &file_platform_proto_msgTypes[25]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
}
return ms
}
return mi.MessageOf(x)
}
// Deprecated: Use JMLevelDesc.ProtoReflect.Descriptor instead.
func (*JMLevelDesc) Descriptor() ([]byte, []int) {
return file_platform_proto_rawDescGZIP(), []int{25}
}
func (x *JMLevelDesc) GetGameLevel() *GameLevelDesc {
if x != nil {
return x.GameLevel
}
return nil
}
func (x *JMLevelDesc) GetBetMin() uint32 {
if x != nil {
return x.BetMin
}
return 0
}
func (x *JMLevelDesc) GetBetMax() uint32 {
if x != nil {
return x.BetMax
}
return 0
}
func (x *JMLevelDesc) GetSDPlayersSize() uint32 {
if x != nil {
return x.SDPlayersSize
}
return 0
}
func (x *JMLevelDesc) GetChipTemplete() uint32 {
if x != nil {
return x.ChipTemplete
}
return 0
}
// Baccarat每一个级别的数据描叙
type BaccaratLevelDesc struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
GameLevel *GameLevelDesc `protobuf:"bytes,1,opt,name=game_level,json=gameLevel,proto3" json:"game_level,omitempty"` // 游戏通用描叙
BetMin uint32 `protobuf:"varint,2,opt,name=bet_min,json=betMin,proto3" json:"bet_min,omitempty"`
BetMax uint32 `protobuf:"varint,3,opt,name=bet_max,json=betMax,proto3" json:"bet_max,omitempty"`
SDPlayersSize uint32 `protobuf:"varint,4,opt,name=SD_players_size,json=SDPlayersSize,proto3" json:"SD_players_size,omitempty"`
}
func (x *BaccaratLevelDesc) Reset() {
*x = BaccaratLevelDesc{}
if protoimpl.UnsafeEnabled {
mi := &file_platform_proto_msgTypes[26]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
}
func (x *BaccaratLevelDesc) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*BaccaratLevelDesc) ProtoMessage() {}
func (x *BaccaratLevelDesc) ProtoReflect() protoreflect.Message {
mi := &file_platform_proto_msgTypes[26]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
}
return ms
}
return mi.MessageOf(x)
}
// Deprecated: Use BaccaratLevelDesc.ProtoReflect.Descriptor instead.
func (*BaccaratLevelDesc) Descriptor() ([]byte, []int) {
return file_platform_proto_rawDescGZIP(), []int{26}
}
func (x *BaccaratLevelDesc) GetGameLevel() *GameLevelDesc {
if x != nil {
return x.GameLevel
}
return nil
}
func (x *BaccaratLevelDesc) GetBetMin() uint32 {
if x != nil {
return x.BetMin
}
return 0
}
func (x *BaccaratLevelDesc) GetBetMax() uint32 {
if x != nil {
return x.BetMax
}
return 0
}
func (x *BaccaratLevelDesc) GetSDPlayersSize() uint32 {
if x != nil {
return x.SDPlayersSize
}
return 0
}
// 获取游戏level信息
type GameKindRequest struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
GameKind GameKind `protobuf:"varint,1,opt,name=game_kind,json=gameKind,proto3,enum=com.cw.chess.platform.GameKind" json:"game_kind,omitempty"` // 请求获取的游戏对应的数据,如果填写INVALID,会返回所有支持的游戏
}
func (x *GameKindRequest) Reset() {
*x = GameKindRequest{}
if protoimpl.UnsafeEnabled {
mi := &file_platform_proto_msgTypes[27]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
}
func (x *GameKindRequest) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*GameKindRequest) ProtoMessage() {}
func (x *GameKindRequest) ProtoReflect() protoreflect.Message {
mi := &file_platform_proto_msgTypes[27]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
}
return ms
}
return mi.MessageOf(x)
}
// Deprecated: Use GameKindRequest.ProtoReflect.Descriptor instead.
func (*GameKindRequest) Descriptor() ([]byte, []int) {
return file_platform_proto_rawDescGZIP(), []int{27}
}
func (x *GameKindRequest) GetGameKind() GameKind {
if x != nil {
return x.GameKind
}
return GameKind_INVALID
}
type GameKindResponse struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
GameKind []GameKind `protobuf:"varint,1,rep,packed,name=game_kind,json=gameKind,proto3,enum=com.cw.chess.platform.GameKind" json:"game_kind,omitempty"` // 游戏类型的通用描叙
RummyLevels []*RummyLevelDesc `protobuf:"bytes,2,rep,name=rummy_levels,json=rummyLevels,proto3" json:"rummy_levels,omitempty"` // rummy的级别描叙
TeepattiLevels []*TeepattiLevelDesc `protobuf:"bytes,3,rep,name=teepatti_levels,json=teepattiLevels,proto3" json:"teepatti_levels,omitempty"` // teepatii的级别描叙
AbLevels []*ABLevelDesc `protobuf:"bytes,4,rep,name=ab_levels,json=abLevels,proto3" json:"ab_levels,omitempty"` // AB的级别描叙
SevenupdownLevels []*SevenUpdownLevelDesc `protobuf:"bytes,5,rep,name=sevenupdown_levels,json=sevenupdownLevels,proto3" json:"sevenupdown_levels,omitempty"` // SevenUpDown
RapidteenpattiLevels []*RapidTeenpattiLevelDesc `protobuf:"bytes,6,rep,name=rapidteenpatti_levels,json=rapidteenpattiLevels,proto3" json:"rapidteenpatti_levels,omitempty"` // rapid teenpatti的级别描叙
DragontigerLevels []*DragonTigerLevelDesc `protobuf:"bytes,7,rep,name=dragontiger_levels,json=dragontigerLevels,proto3" json:"dragontiger_levels,omitempty"` // 龙虎级别描叙
BlackredLevels []*BlackredLevelDesc `protobuf:"bytes,8,rep,name=blackred_levels,json=blackredLevels,proto3" json:"blackred_levels,omitempty"` // 红黑的级别描叙
HorseracingLevels []*HorseracingDesc `protobuf:"bytes,9,rep,name=horseracing_levels,json=horseracingLevels,proto3" json:"horseracing_levels,omitempty"` // 赛马的级别描叙
JmLevels []*JMLevelDesc `protobuf:"bytes,10,rep,name=jm_levels,json=jmLevels,proto3" json:"jm_levels,omitempty"` // Jhandi Munda的级别描述
BaccaratLevels []*BaccaratLevelDesc `protobuf:"bytes,11,rep,name=baccarat_levels,json=baccaratLevels,proto3" json:"baccarat_levels,omitempty"` // baccarat级别描叙
}
func (x *GameKindResponse) Reset() {
*x = GameKindResponse{}
if protoimpl.UnsafeEnabled {
mi := &file_platform_proto_msgTypes[28]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
}
func (x *GameKindResponse) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*GameKindResponse) ProtoMessage() {}
func (x *GameKindResponse) ProtoReflect() protoreflect.Message {
mi := &file_platform_proto_msgTypes[28]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
}
return ms
}
return mi.MessageOf(x)
}
// Deprecated: Use GameKindResponse.ProtoReflect.Descriptor instead.
func (*GameKindResponse) Descriptor() ([]byte, []int) {
return file_platform_proto_rawDescGZIP(), []int{28}
}
func (x *GameKindResponse) GetGameKind() []GameKind {
if x != nil {
return x.GameKind
}
return nil
}
func (x *GameKindResponse) GetRummyLevels() []*RummyLevelDesc {
if x != nil {
return x.RummyLevels
}
return nil
}
func (x *GameKindResponse) GetTeepattiLevels() []*TeepattiLevelDesc {
if x != nil {
return x.TeepattiLevels
}
return nil
}
func (x *GameKindResponse) GetAbLevels() []*ABLevelDesc {
if x != nil {
return x.AbLevels
}
return nil
}
func (x *GameKindResponse) GetSevenupdownLevels() []*SevenUpdownLevelDesc {
if x != nil {
return x.SevenupdownLevels
}
return nil
}
func (x *GameKindResponse) GetRapidteenpattiLevels() []*RapidTeenpattiLevelDesc {
if x != nil {
return x.RapidteenpattiLevels
}
return nil
}
func (x *GameKindResponse) GetDragontigerLevels() []*DragonTigerLevelDesc {
if x != nil {
return x.DragontigerLevels
}
return nil
}
func (x *GameKindResponse) GetBlackredLevels() []*BlackredLevelDesc {
if x != nil {
return x.BlackredLevels
}
return nil
}
func (x *GameKindResponse) GetHorseracingLevels() []*HorseracingDesc {
if x != nil {
return x.HorseracingLevels
}
return nil
}
func (x *GameKindResponse) GetJmLevels() []*JMLevelDesc {
if x != nil {
return x.JmLevels
}
return nil
}
func (x *GameKindResponse) GetBaccaratLevels() []*BaccaratLevelDesc {
if x != nil {
return x.BaccaratLevels
}
return nil
}
// 进行匹配
type MatchRequest struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
Action uint32 `protobuf:"varint,1,opt,name=action,proto3" json:"action,omitempty"` // 0:请求匹配;1:取消匹配
//
//如果是取消,则后续参数也需要填写,以防止未来可以同时匹配多个游戏而只取消其中某一个;
//只有确实取消了,消息才会返回1,防止已经匹配好了,但是再发取消匹配的情况
//如果取消失败,会返回102,客户端可以解除匹配状态
GameKind GameKind `protobuf:"varint,2,opt,name=game_kind,json=gameKind,proto3,enum=com.cw.chess.platform.GameKind" json:"game_kind,omitempty"`
GameLevel uint32 `protobuf:"varint,3,opt,name=game_level,json=gameLevel,proto3" json:"game_level,omitempty"`
}
func (x *MatchRequest) Reset() {
*x = MatchRequest{}
if protoimpl.UnsafeEnabled {
mi := &file_platform_proto_msgTypes[29]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
}
func (x *MatchRequest) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*MatchRequest) ProtoMessage() {}
func (x *MatchRequest) ProtoReflect() protoreflect.Message {
mi := &file_platform_proto_msgTypes[29]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
}
return ms
}
return mi.MessageOf(x)
}
// Deprecated: Use MatchRequest.ProtoReflect.Descriptor instead.
func (*MatchRequest) Descriptor() ([]byte, []int) {
return file_platform_proto_rawDescGZIP(), []int{29}
}
func (x *MatchRequest) GetAction() uint32 {
if x != nil {
return x.Action
}
return 0
}
func (x *MatchRequest) GetGameKind() GameKind {
if x != nil {
return x.GameKind
}
return GameKind_INVALID
}
func (x *MatchRequest) GetGameLevel() uint32 {
if x != nil {
return x.GameLevel
}
return 0
}
// 匹配通知
type MatchResponse struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
Result uint32 `protobuf:"varint,1,opt,name=result,proto3" json:"result,omitempty"` // 0:成功申请匹配;1:成功取消匹配;100:余额不够;101:目前已经在匹配队列中,不能重复匹配;102:不在匹配队列中,无法取消
MaxTime uint32 `protobuf:"varint,2,opt,name=max_time,json=maxTime,proto3" json:"max_time,omitempty"` // 最大匹配时间:单位秒
AverageTime uint32 `protobuf:"varint,3,opt,name=average_time,json=averageTime,proto3" json:"average_time,omitempty"` // 平均匹配时间:单位秒
}
func (x *MatchResponse) Reset() {
*x = MatchResponse{}
if protoimpl.UnsafeEnabled {
mi := &file_platform_proto_msgTypes[30]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
}
func (x *MatchResponse) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*MatchResponse) ProtoMessage() {}
func (x *MatchResponse) ProtoReflect() protoreflect.Message {
mi := &file_platform_proto_msgTypes[30]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
}
return ms
}
return mi.MessageOf(x)
}
// Deprecated: Use MatchResponse.ProtoReflect.Descriptor instead.
func (*MatchResponse) Descriptor() ([]byte, []int) {
return file_platform_proto_rawDescGZIP(), []int{30}
}
func (x *MatchResponse) GetResult() uint32 {
if x != nil {
return x.Result
}
return 0
}
func (x *MatchResponse) GetMaxTime() uint32 {
if x != nil {
return x.MaxTime
}
return 0
}
func (x *MatchResponse) GetAverageTime() uint32 {
if x != nil {
return x.AverageTime
}
return 0
}
// 匹配成功通知
type MatchOKResponse struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
Result uint32 `protobuf:"varint,1,opt,name=result,proto3" json:"result,omitempty"` // 0:成功:100:用户余额不够;101:申请的游戏已经过期;102:账户被限制,不能匹配;103:服务器正在维护中:105:人数太多
GameType uint32 `protobuf:"varint,2,opt,name=game_type,json=gameType,proto3" json:"game_type,omitempty"` // 这个值就是动态servertype,后续我们就正式开始游戏了
TableId uint32 `protobuf:"varint,3,opt,name=table_id,json=tableId,proto3" json:"table_id,omitempty"` // 分配在哪个桌子上
GameKind GameKind `protobuf:"varint,4,opt,name=game_kind,json=gameKind,proto3,enum=com.cw.chess.platform.GameKind" json:"game_kind,omitempty"` // 以下字段和请求一致,方便客户端处理
GameLevel uint32 `protobuf:"varint,5,opt,name=game_level,json=gameLevel,proto3" json:"game_level,omitempty"` // 游戏级别ID
}
func (x *MatchOKResponse) Reset() {
*x = MatchOKResponse{}
if protoimpl.UnsafeEnabled {
mi := &file_platform_proto_msgTypes[31]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
}
func (x *MatchOKResponse) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*MatchOKResponse) ProtoMessage() {}
func (x *MatchOKResponse) ProtoReflect() protoreflect.Message {
mi := &file_platform_proto_msgTypes[31]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
}
return ms
}
return mi.MessageOf(x)
}
// Deprecated: Use MatchOKResponse.ProtoReflect.Descriptor instead.
func (*MatchOKResponse) Descriptor() ([]byte, []int) {
return file_platform_proto_rawDescGZIP(), []int{31}
}
func (x *MatchOKResponse) GetResult() uint32 {
if x != nil {
return x.Result
}
return 0
}
func (x *MatchOKResponse) GetGameType() uint32 {
if x != nil {
return x.GameType
}
return 0
}
func (x *MatchOKResponse) GetTableId() uint32 {
if x != nil {
return x.TableId
}
return 0
}
func (x *MatchOKResponse) GetGameKind() GameKind {
if x != nil {
return x.GameKind
}
return GameKind_INVALID
}
func (x *MatchOKResponse) GetGameLevel() uint32 {
if x != nil {
return x.GameLevel
}
return 0
}
// 请求直接进入游戏
type EnterGameRequest struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
GameKind GameKind `protobuf:"varint,1,opt,name=game_kind,json=gameKind,proto3,enum=com.cw.chess.platform.GameKind" json:"game_kind,omitempty"`
GameLevel uint32 `protobuf:"varint,2,opt,name=game_level,json=gameLevel,proto3" json:"game_level,omitempty"`
}
func (x *EnterGameRequest) Reset() {
*x = EnterGameRequest{}
if protoimpl.UnsafeEnabled {
mi := &file_platform_proto_msgTypes[32]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
}
func (x *EnterGameRequest) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*EnterGameRequest) ProtoMessage() {}
func (x *EnterGameRequest) ProtoReflect() protoreflect.Message {
mi := &file_platform_proto_msgTypes[32]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
}
return ms
}
return mi.MessageOf(x)
}
// Deprecated: Use EnterGameRequest.ProtoReflect.Descriptor instead.
func (*EnterGameRequest) Descriptor() ([]byte, []int) {
return file_platform_proto_rawDescGZIP(), []int{32}
}
func (x *EnterGameRequest) GetGameKind() GameKind {
if x != nil {
return x.GameKind
}
return GameKind_INVALID
}
func (x *EnterGameRequest) GetGameLevel() uint32 {
if x != nil {
return x.GameLevel
}
return 0
}
var File_platform_proto protoreflect.FileDescriptor
var file_platform_proto_rawDesc = []byte{
0x0a, 0x0e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f,
0x12, 0x15, 0x63, 0x6f, 0x6d, 0x2e, 0x63, 0x77, 0x2e, 0x63, 0x68, 0x65, 0x73, 0x73, 0x2e, 0x70,
0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x22, 0x87, 0x01, 0x0a, 0x08, 0x47, 0x61, 0x6d, 0x65,
0x55, 0x73, 0x65, 0x72, 0x12, 0x10, 0x0a, 0x03, 0x75, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28,
0x0d, 0x52, 0x03, 0x75, 0x69, 0x64, 0x12, 0x1b, 0x0a, 0x09, 0x72, 0x65, 0x61, 0x6c, 0x5f, 0x75,
0x73, 0x65, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x08, 0x72, 0x65, 0x61, 0x6c, 0x55,
0x73, 0x65, 0x72, 0x12, 0x12, 0x0a, 0x04, 0x63, 0x6f, 0x69, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28,
0x0d, 0x52, 0x04, 0x63, 0x6f, 0x69, 0x6e, 0x12, 0x1b, 0x0a, 0x09, 0x75, 0x73, 0x65, 0x72, 0x5f,
0x6e, 0x69, 0x63, 0x6b, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x75, 0x73, 0x65, 0x72,
0x4e, 0x69, 0x63, 0x6b, 0x12, 0x1b, 0x0a, 0x09, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x68, 0x65, 0x61,
0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x75, 0x73, 0x65, 0x72, 0x48, 0x65, 0x61,
0x64, 0x22, 0x28, 0x0a, 0x0e, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f,
0x6e, 0x73, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x18, 0x01, 0x20,
0x01, 0x28, 0x0d, 0x52, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x22, 0x3d, 0x0a, 0x0c, 0x4c,
0x6f, 0x67, 0x69, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x17, 0x0a, 0x07, 0x75,
0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x06, 0x75, 0x73,
0x65, 0x72, 0x49, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x02, 0x20,
0x01, 0x28, 0x09, 0x52, 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x22, 0x40, 0x0a, 0x0d, 0x4c, 0x6f,
0x67, 0x69, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x72,
0x65, 0x73, 0x75, 0x6c, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x06, 0x72, 0x65, 0x73,
0x75, 0x6c, 0x74, 0x12, 0x17, 0x0a, 0x07, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x02,
0x20, 0x01, 0x28, 0x0d, 0x52, 0x06, 0x75, 0x73, 0x65, 0x72, 0x49, 0x64, 0x22, 0xd5, 0x01, 0x0a,
0x18, 0x47, 0x65, 0x74, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x42, 0x61, 0x6c, 0x61, 0x6e, 0x63,
0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x72, 0x65, 0x73,
0x75, 0x6c, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c,
0x74, 0x12, 0x18, 0x0a, 0x07, 0x62, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x18, 0x02, 0x20, 0x01,
0x28, 0x0d, 0x52, 0x07, 0x62, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x12, 0x21, 0x0a, 0x0c, 0x62,
0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x5f, 0x77, 0x69, 0x6e, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28,
0x0d, 0x52, 0x0b, 0x62, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x57, 0x69, 0x6e, 0x73, 0x12, 0x1a,
0x0a, 0x08, 0x70, 0x61, 0x72, 0x74, 0x69, 0x63, 0x65, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0d,
0x52, 0x08, 0x70, 0x61, 0x72, 0x74, 0x69, 0x63, 0x65, 0x73, 0x12, 0x48, 0x0a, 0x0d, 0x67, 0x61,
0x6d, 0x65, 0x5f, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x63, 0x79, 0x18, 0x05, 0x20, 0x01, 0x28,
0x0e, 0x32, 0x23, 0x2e, 0x63, 0x6f, 0x6d, 0x2e, 0x63, 0x77, 0x2e, 0x63, 0x68, 0x65, 0x73, 0x73,
0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x43, 0x75, 0x72, 0x72, 0x65, 0x6e,
0x63, 0x79, 0x4b, 0x69, 0x6e, 0x64, 0x52, 0x0c, 0x67, 0x61, 0x6d, 0x65, 0x43, 0x75, 0x72, 0x72,
0x65, 0x6e, 0x63, 0x79, 0x22, 0x49, 0x0a, 0x11, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x54,
0x6f, 0x55, 0x73, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x12, 0x1a, 0x0a, 0x08, 0x6c, 0x61, 0x73,
0x74, 0x54, 0x69, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x08, 0x6c, 0x61, 0x73,
0x74, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74,
0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x22,
0x4c, 0x0a, 0x09, 0x55, 0x73, 0x65, 0x72, 0x41, 0x74, 0x74, 0x72, 0x69, 0x12, 0x17, 0x0a, 0x07,
0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x06, 0x75,
0x73, 0x65, 0x72, 0x49, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x69, 0x63, 0x6b, 0x18, 0x02, 0x20,
0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x69, 0x63, 0x6b, 0x12, 0x12, 0x0a, 0x04, 0x68, 0x65, 0x61,
0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x68, 0x65, 0x61, 0x64, 0x22, 0x33, 0x0a,
0x16, 0x4d, 0x53, 0x47, 0x5f, 0x47, 0x45, 0x54, 0x5f, 0x55, 0x53, 0x45, 0x52, 0x5f, 0x41, 0x54,
0x54, 0x52, 0x49, 0x5f, 0x52, 0x45, 0x51, 0x12, 0x19, 0x0a, 0x08, 0x75, 0x73, 0x65, 0x72, 0x5f,
0x69, 0x64, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0d, 0x52, 0x07, 0x75, 0x73, 0x65, 0x72, 0x49,
0x64, 0x73, 0x22, 0x5c, 0x0a, 0x17, 0x4d, 0x53, 0x47, 0x5f, 0x47, 0x45, 0x54, 0x5f, 0x55, 0x53,
0x45, 0x52, 0x5f, 0x41, 0x54, 0x54, 0x52, 0x49, 0x5f, 0x52, 0x45, 0x53, 0x50, 0x12, 0x41, 0x0a,
0x0b, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x61, 0x74, 0x74, 0x72, 0x69, 0x73, 0x18, 0x01, 0x20, 0x03,
0x28, 0x0b, 0x32, 0x20, 0x2e, 0x63, 0x6f, 0x6d, 0x2e, 0x63, 0x77, 0x2e, 0x63, 0x68, 0x65, 0x73,
0x73, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x41,
0x74, 0x74, 0x72, 0x69, 0x52, 0x0a, 0x75, 0x73, 0x65, 0x72, 0x41, 0x74, 0x74, 0x72, 0x69, 0x73,
0x22, 0x5c, 0x0a, 0x19, 0x4d, 0x53, 0x47, 0x5f, 0x55, 0x50, 0x44, 0x41, 0x54, 0x45, 0x5f, 0x55,
0x53, 0x45, 0x52, 0x5f, 0x41, 0x54, 0x54, 0x52, 0x49, 0x5f, 0x52, 0x45, 0x51, 0x12, 0x3f, 0x0a,
0x0a, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x61, 0x74, 0x74, 0x72, 0x69, 0x18, 0x01, 0x20, 0x01, 0x28,
0x0b, 0x32, 0x20, 0x2e, 0x63, 0x6f, 0x6d, 0x2e, 0x63, 0x77, 0x2e, 0x63, 0x68, 0x65, 0x73, 0x73,
0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x41, 0x74,
0x74, 0x72, 0x69, 0x52, 0x09, 0x75, 0x73, 0x65, 0x72, 0x41, 0x74, 0x74, 0x72, 0x69, 0x22, 0x2a,
0x0a, 0x12, 0x4d, 0x53, 0x47, 0x5f, 0x47, 0x45, 0x54, 0x5f, 0x42, 0x4f, 0x4e, 0x55, 0x53, 0x5f,
0x52, 0x45, 0x53, 0x50, 0x12, 0x14, 0x0a, 0x05, 0x62, 0x6f, 0x6e, 0x75, 0x73, 0x18, 0x01, 0x20,
0x01, 0x28, 0x0d, 0x52, 0x05, 0x62, 0x6f, 0x6e, 0x75, 0x73, 0x22, 0x50, 0x0a, 0x0b, 0x42, 0x53,
0x5f, 0x52, 0x45, 0x43, 0x48, 0x41, 0x52, 0x47, 0x45, 0x12, 0x1a, 0x0a, 0x08, 0x72, 0x65, 0x63,
0x68, 0x61, 0x72, 0x67, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x08, 0x72, 0x65, 0x63,
0x68, 0x61, 0x72, 0x67, 0x65, 0x12, 0x25, 0x0a, 0x0e, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x63,
0x79, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0d, 0x63,
0x75, 0x72, 0x72, 0x65, 0x6e, 0x63, 0x79, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x22, 0xb0, 0x01, 0x0a,
0x07, 0x42, 0x53, 0x5f, 0x47, 0x41, 0x4d, 0x45, 0x12, 0x1b, 0x0a, 0x09, 0x67, 0x61, 0x6d, 0x65,
0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x08, 0x67, 0x61, 0x6d,
0x65, 0x54, 0x79, 0x70, 0x65, 0x12, 0x25, 0x0a, 0x0e, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x63,
0x79, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0d, 0x63,
0x75, 0x72, 0x72, 0x65, 0x6e, 0x63, 0x79, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x1f, 0x0a, 0x0b,
0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x5f, 0x31, 0x18, 0x03, 0x20, 0x01, 0x28,
0x0d, 0x52, 0x0a, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x31, 0x12, 0x1f, 0x0a,
0x0b, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x5f, 0x32, 0x18, 0x04, 0x20, 0x01,
0x28, 0x0d, 0x52, 0x0a, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x32, 0x12, 0x1f,
0x0a, 0x0b, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x5f, 0x33, 0x18, 0x05, 0x20,
0x01, 0x28, 0x0d, 0x52, 0x0a, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x33, 0x22,
0xfd, 0x01, 0x0a, 0x0b, 0x4d, 0x53, 0x47, 0x5f, 0x42, 0x53, 0x5f, 0x44, 0x41, 0x54, 0x41, 0x12,
0x17, 0x0a, 0x07, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d,
0x52, 0x06, 0x75, 0x73, 0x65, 0x72, 0x49, 0x64, 0x12, 0x1b, 0x0a, 0x09, 0x75, 0x73, 0x65, 0x72,
0x5f, 0x6e, 0x69, 0x63, 0x6b, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x08, 0x75, 0x73, 0x65,
0x72, 0x4e, 0x69, 0x63, 0x6b, 0x12, 0x17, 0x0a, 0x07, 0x62, 0x73, 0x5f, 0x74, 0x79, 0x70, 0x65,
0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x06, 0x62, 0x73, 0x54, 0x79, 0x70, 0x65, 0x12, 0x45,
0x0a, 0x0c, 0x6d, 0x73, 0x67, 0x5f, 0x72, 0x65, 0x63, 0x68, 0x61, 0x72, 0x67, 0x65, 0x18, 0x04,
0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x63, 0x6f, 0x6d, 0x2e, 0x63, 0x77, 0x2e, 0x63, 0x68,
0x65, 0x73, 0x73, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x42, 0x53, 0x5f,
0x52, 0x45, 0x43, 0x48, 0x41, 0x52, 0x47, 0x45, 0x52, 0x0b, 0x6d, 0x73, 0x67, 0x52, 0x65, 0x63,
0x68, 0x61, 0x72, 0x67, 0x65, 0x12, 0x39, 0x0a, 0x08, 0x6d, 0x73, 0x67, 0x5f, 0x67, 0x61, 0x6d,
0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x63, 0x6f, 0x6d, 0x2e, 0x63, 0x77,
0x2e, 0x63, 0x68, 0x65, 0x73, 0x73, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e,
0x42, 0x53, 0x5f, 0x47, 0x41, 0x4d, 0x45, 0x52, 0x07, 0x6d, 0x73, 0x67, 0x47, 0x61, 0x6d, 0x65,
0x12, 0x1d, 0x0a, 0x0a, 0x74, 0x69, 0x6d, 0x65, 0x5f, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x18, 0x06,
0x20, 0x01, 0x28, 0x0d, 0x52, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x53, 0x74, 0x61, 0x6d, 0x70, 0x22,
0x33, 0x0a, 0x10, 0x4d, 0x53, 0x47, 0x5f, 0x4d, 0x53, 0x47, 0x5f, 0x51, 0x55, 0x45, 0x5f, 0x44,
0x41, 0x54, 0x41, 0x12, 0x1f, 0x0a, 0x0b, 0x6d, 0x73, 0x67, 0x5f, 0x63, 0x6f, 0x6e, 0x74, 0x65,
0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x6d, 0x73, 0x67, 0x43, 0x6f, 0x6e,
0x74, 0x65, 0x6e, 0x74, 0x22, 0x53, 0x0a, 0x0b, 0x4d, 0x53, 0x47, 0x5f, 0x4d, 0x53, 0x47, 0x5f,
0x51, 0x55, 0x45, 0x12, 0x44, 0x0a, 0x09, 0x64, 0x61, 0x74, 0x61, 0x5f, 0x6c, 0x69, 0x73, 0x74,
0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x63, 0x6f, 0x6d, 0x2e, 0x63, 0x77, 0x2e,
0x63, 0x68, 0x65, 0x73, 0x73, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x4d,
0x53, 0x47, 0x5f, 0x4d, 0x53, 0x47, 0x5f, 0x51, 0x55, 0x45, 0x5f, 0x44, 0x41, 0x54, 0x41, 0x52,
0x08, 0x64, 0x61, 0x74, 0x61, 0x4c, 0x69, 0x73, 0x74, 0x22, 0x99, 0x02, 0x0a, 0x0d, 0x47, 0x61,
0x6d, 0x65, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x44, 0x65, 0x73, 0x63, 0x12, 0x19, 0x0a, 0x08, 0x6c,
0x65, 0x76, 0x65, 0x6c, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x07, 0x6c,
0x65, 0x76, 0x65, 0x6c, 0x49, 0x64, 0x12, 0x48, 0x0a, 0x0d, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e,
0x63, 0x79, 0x5f, 0x6b, 0x69, 0x6e, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x23, 0x2e,
0x63, 0x6f, 0x6d, 0x2e, 0x63, 0x77, 0x2e, 0x63, 0x68, 0x65, 0x73, 0x73, 0x2e, 0x70, 0x6c, 0x61,
0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x43, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x63, 0x79, 0x4b, 0x69,
0x6e, 0x64, 0x52, 0x0c, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x63, 0x79, 0x4b, 0x69, 0x6e, 0x64,
0x12, 0x25, 0x0a, 0x0e, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x63, 0x79, 0x5f, 0x6c, 0x69, 0x6d,
0x69, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0d, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e,
0x63, 0x79, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x6c, 0x65, 0x76, 0x65, 0x6c,
0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x6c, 0x65, 0x76,
0x65, 0x6c, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x63,
0x6f, 0x75, 0x6e, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x09, 0x75, 0x73, 0x65, 0x72,
0x43, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x25, 0x0a, 0x0e, 0x74, 0x61, 0x78, 0x5f, 0x70, 0x65, 0x72,
0x6d, 0x69, 0x6c, 0x6c, 0x61, 0x67, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0d, 0x74,
0x61, 0x78, 0x50, 0x65, 0x72, 0x6d, 0x69, 0x6c, 0x6c, 0x61, 0x67, 0x65, 0x12, 0x17, 0x0a, 0x07,
0x67, 0x61, 0x6d, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x06, 0x67,
0x61, 0x6d, 0x65, 0x49, 0x64, 0x22, 0xee, 0x01, 0x0a, 0x0e, 0x52, 0x75, 0x6d, 0x6d, 0x79, 0x4c,
0x65, 0x76, 0x65, 0x6c, 0x44, 0x65, 0x73, 0x63, 0x12, 0x43, 0x0a, 0x0a, 0x67, 0x61, 0x6d, 0x65,
0x5f, 0x6c, 0x65, 0x76, 0x65, 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x63,
0x6f, 0x6d, 0x2e, 0x63, 0x77, 0x2e, 0x63, 0x68, 0x65, 0x73, 0x73, 0x2e, 0x70, 0x6c, 0x61, 0x74,
0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x47, 0x61, 0x6d, 0x65, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x44, 0x65,
0x73, 0x63, 0x52, 0x09, 0x67, 0x61, 0x6d, 0x65, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x12, 0x2c, 0x0a,
0x12, 0x72, 0x75, 0x6d, 0x6d, 0x79, 0x5f, 0x70, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x73, 0x5f, 0x73,
0x69, 0x7a, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x10, 0x72, 0x75, 0x6d, 0x6d, 0x79,
0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x73, 0x53, 0x69, 0x7a, 0x65, 0x12, 0x1f, 0x0a, 0x0b, 0x73,
0x63, 0x6f, 0x72, 0x65, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d,
0x52, 0x0a, 0x73, 0x63, 0x6f, 0x72, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x26, 0x0a, 0x0f,
0x74, 0x69, 0x6d, 0x65, 0x73, 0x5f, 0x66, 0x65, 0x65, 0x5f, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x18,
0x04, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0d, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x46, 0x65, 0x65, 0x52,
0x61, 0x74, 0x69, 0x6f, 0x12, 0x20, 0x0a, 0x0b, 0x66, 0x61, 0x6e, 0x74, 0x61, 0x73, 0x79, 0x74,
0x69, 0x6d, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0b, 0x66, 0x61, 0x6e, 0x74, 0x61,
0x73, 0x79, 0x74, 0x69, 0x6d, 0x65, 0x22, 0x82, 0x02, 0x0a, 0x11, 0x54, 0x65, 0x65, 0x70, 0x61,
0x74, 0x74, 0x69, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x44, 0x65, 0x73, 0x63, 0x12, 0x43, 0x0a, 0x0a,
0x67, 0x61, 0x6d, 0x65, 0x5f, 0x6c, 0x65, 0x76, 0x65, 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b,
0x32, 0x24, 0x2e, 0x63, 0x6f, 0x6d, 0x2e, 0x63, 0x77, 0x2e, 0x63, 0x68, 0x65, 0x73, 0x73, 0x2e,
0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x47, 0x61, 0x6d, 0x65, 0x4c, 0x65, 0x76,
0x65, 0x6c, 0x44, 0x65, 0x73, 0x63, 0x52, 0x09, 0x67, 0x61, 0x6d, 0x65, 0x4c, 0x65, 0x76, 0x65,
0x6c, 0x12, 0x14, 0x0a, 0x05, 0x62, 0x6c, 0x69, 0x6e, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d,
0x52, 0x05, 0x62, 0x6c, 0x69, 0x6e, 0x64, 0x12, 0x24, 0x0a, 0x0e, 0x73, 0x69, 0x6e, 0x67, 0x6c,
0x65, 0x5f, 0x6d, 0x61, 0x78, 0x5f, 0x62, 0x65, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, 0x52,
0x0c, 0x73, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x4d, 0x61, 0x78, 0x42, 0x65, 0x74, 0x12, 0x22, 0x0a,
0x0d, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x6d, 0x61, 0x78, 0x5f, 0x62, 0x65, 0x74, 0x18, 0x04,
0x20, 0x01, 0x28, 0x0d, 0x52, 0x0b, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x4d, 0x61, 0x78, 0x42, 0x65,
0x74, 0x12, 0x26, 0x0a, 0x0f, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x5f, 0x66, 0x65, 0x65, 0x5f, 0x72,
0x61, 0x74, 0x69, 0x6f, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0d, 0x74, 0x69, 0x6d, 0x65,
0x73, 0x46, 0x65, 0x65, 0x52, 0x61, 0x74, 0x69, 0x6f, 0x12, 0x20, 0x0a, 0x0b, 0x66, 0x61, 0x6e,
0x74, 0x61, 0x73, 0x79, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0b,
0x66, 0x61, 0x6e, 0x74, 0x61, 0x73, 0x79, 0x74, 0x69, 0x6d, 0x65, 0x22, 0xd1, 0x01, 0x0a, 0x0b,
0x41, 0x42, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x44, 0x65, 0x73, 0x63, 0x12, 0x43, 0x0a, 0x0a, 0x67,
0x61, 0x6d, 0x65, 0x5f, 0x6c, 0x65, 0x76, 0x65, 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32,
0x24, 0x2e, 0x63, 0x6f, 0x6d, 0x2e, 0x63, 0x77, 0x2e, 0x63, 0x68, 0x65, 0x73, 0x73, 0x2e, 0x70,
0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x47, 0x61, 0x6d, 0x65, 0x4c, 0x65, 0x76, 0x65,
0x6c, 0x44, 0x65, 0x73, 0x63, 0x52, 0x09, 0x67, 0x61, 0x6d, 0x65, 0x4c, 0x65, 0x76, 0x65, 0x6c,
0x12, 0x17, 0x0a, 0x07, 0x62, 0x65, 0x74, 0x5f, 0x6d, 0x69, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28,
0x0d, 0x52, 0x06, 0x62, 0x65, 0x74, 0x4d, 0x69, 0x6e, 0x12, 0x17, 0x0a, 0x07, 0x62, 0x65, 0x74,
0x5f, 0x6d, 0x61, 0x78, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x06, 0x62, 0x65, 0x74, 0x4d,
0x61, 0x78, 0x12, 0x26, 0x0a, 0x0f, 0x41, 0x42, 0x5f, 0x70, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x73,
0x5f, 0x73, 0x69, 0x7a, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0d, 0x41, 0x42, 0x50,
0x6c, 0x61, 0x79, 0x65, 0x72, 0x73, 0x53, 0x69, 0x7a, 0x65, 0x12, 0x23, 0x0a, 0x0d, 0x63, 0x68,
0x69, 0x70, 0x5f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28,
0x0d, 0x52, 0x0c, 0x63, 0x68, 0x69, 0x70, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x65, 0x22,
0xfc, 0x02, 0x0a, 0x14, 0x53, 0x65, 0x76, 0x65, 0x6e, 0x55, 0x70, 0x64, 0x6f, 0x77, 0x6e, 0x4c,
0x65, 0x76, 0x65, 0x6c, 0x44, 0x65, 0x73, 0x63, 0x12, 0x43, 0x0a, 0x0a, 0x67, 0x61, 0x6d, 0x65,
0x5f, 0x6c, 0x65, 0x76, 0x65, 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x63,
0x6f, 0x6d, 0x2e, 0x63, 0x77, 0x2e, 0x63, 0x68, 0x65, 0x73, 0x73, 0x2e, 0x70, 0x6c, 0x61, 0x74,
0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x47, 0x61, 0x6d, 0x65, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x44, 0x65,
0x73, 0x63, 0x52, 0x09, 0x67, 0x61, 0x6d, 0x65, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x12, 0x17, 0x0a,
0x07, 0x62, 0x65, 0x74, 0x5f, 0x6d, 0x69, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x06,
0x62, 0x65, 0x74, 0x4d, 0x69, 0x6e, 0x12, 0x17, 0x0a, 0x07, 0x62, 0x65, 0x74, 0x5f, 0x6d, 0x61,
0x78, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x06, 0x62, 0x65, 0x74, 0x4d, 0x61, 0x78, 0x12,
0x26, 0x0a, 0x0f, 0x53, 0x44, 0x5f, 0x70, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x73, 0x5f, 0x73, 0x69,
0x7a, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0d, 0x53, 0x44, 0x50, 0x6c, 0x61, 0x79,
0x65, 0x72, 0x73, 0x53, 0x69, 0x7a, 0x65, 0x12, 0x23, 0x0a, 0x0d, 0x63, 0x68, 0x69, 0x70, 0x5f,
0x74, 0x65, 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0c,
0x63, 0x68, 0x69, 0x70, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x65, 0x12, 0x19, 0x0a, 0x08,
0x62, 0x65, 0x74, 0x5f, 0x6d, 0x69, 0x6e, 0x31, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x07,
0x62, 0x65, 0x74, 0x4d, 0x69, 0x6e, 0x31, 0x12, 0x19, 0x0a, 0x08, 0x62, 0x65, 0x74, 0x5f, 0x6d,
0x61, 0x78, 0x31, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x07, 0x62, 0x65, 0x74, 0x4d, 0x61,
0x78, 0x31, 0x12, 0x19, 0x0a, 0x08, 0x62, 0x65, 0x74, 0x5f, 0x6d, 0x69, 0x6e, 0x32, 0x18, 0x08,
0x20, 0x01, 0x28, 0x0d, 0x52, 0x07, 0x62, 0x65, 0x74, 0x4d, 0x69, 0x6e, 0x32, 0x12, 0x19, 0x0a,
0x08, 0x62, 0x65, 0x74, 0x5f, 0x6d, 0x61, 0x78, 0x32, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0d, 0x52,
0x07, 0x62, 0x65, 0x74, 0x4d, 0x61, 0x78, 0x32, 0x12, 0x19, 0x0a, 0x08, 0x62, 0x65, 0x74, 0x5f,
0x6d, 0x69, 0x6e, 0x30, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x07, 0x62, 0x65, 0x74, 0x4d,
0x69, 0x6e, 0x30, 0x12, 0x19, 0x0a, 0x08, 0x62, 0x65, 0x74, 0x5f, 0x6d, 0x61, 0x78, 0x30, 0x18,
0x0b, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x07, 0x62, 0x65, 0x74, 0x4d, 0x61, 0x78, 0x30, 0x22, 0x74,
0x0a, 0x17, 0x52, 0x61, 0x70, 0x69, 0x64, 0x54, 0x65, 0x65, 0x6e, 0x70, 0x61, 0x74, 0x74, 0x69,
0x4c, 0x65, 0x76, 0x65, 0x6c, 0x44, 0x65, 0x73, 0x63, 0x12, 0x43, 0x0a, 0x0a, 0x67, 0x61, 0x6d,
0x65, 0x5f, 0x6c, 0x65, 0x76, 0x65, 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x24, 0x2e,
0x63, 0x6f, 0x6d, 0x2e, 0x63, 0x77, 0x2e, 0x63, 0x68, 0x65, 0x73, 0x73, 0x2e, 0x70, 0x6c, 0x61,
0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x47, 0x61, 0x6d, 0x65, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x44,
0x65, 0x73, 0x63, 0x52, 0x09, 0x67, 0x61, 0x6d, 0x65, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x12, 0x14,
0x0a, 0x05, 0x62, 0x6c, 0x69, 0x6e, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x62,
0x6c, 0x69, 0x6e, 0x64, 0x22, 0xfc, 0x02, 0x0a, 0x14, 0x44, 0x72, 0x61, 0x67, 0x6f, 0x6e, 0x54,
0x69, 0x67, 0x65, 0x72, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x44, 0x65, 0x73, 0x63, 0x12, 0x43, 0x0a,
0x0a, 0x67, 0x61, 0x6d, 0x65, 0x5f, 0x6c, 0x65, 0x76, 0x65, 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28,
0x0b, 0x32, 0x24, 0x2e, 0x63, 0x6f, 0x6d, 0x2e, 0x63, 0x77, 0x2e, 0x63, 0x68, 0x65, 0x73, 0x73,
0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x47, 0x61, 0x6d, 0x65, 0x4c, 0x65,
0x76, 0x65, 0x6c, 0x44, 0x65, 0x73, 0x63, 0x52, 0x09, 0x67, 0x61, 0x6d, 0x65, 0x4c, 0x65, 0x76,
0x65, 0x6c, 0x12, 0x17, 0x0a, 0x07, 0x62, 0x65, 0x74, 0x5f, 0x6d, 0x69, 0x6e, 0x18, 0x02, 0x20,
0x01, 0x28, 0x0d, 0x52, 0x06, 0x62, 0x65, 0x74, 0x4d, 0x69, 0x6e, 0x12, 0x17, 0x0a, 0x07, 0x62,
0x65, 0x74, 0x5f, 0x6d, 0x61, 0x78, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x06, 0x62, 0x65,
0x74, 0x4d, 0x61, 0x78, 0x12, 0x26, 0x0a, 0x0f, 0x53, 0x44, 0x5f, 0x70, 0x6c, 0x61, 0x79, 0x65,
0x72, 0x73, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0d, 0x53,
0x44, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x73, 0x53, 0x69, 0x7a, 0x65, 0x12, 0x23, 0x0a, 0x0d,
0x63, 0x68, 0x69, 0x70, 0x5f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x65, 0x18, 0x05, 0x20,
0x01, 0x28, 0x0d, 0x52, 0x0c, 0x63, 0x68, 0x69, 0x70, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x65, 0x74,
0x65, 0x12, 0x19, 0x0a, 0x08, 0x62, 0x65, 0x74, 0x5f, 0x6d, 0x69, 0x6e, 0x31, 0x18, 0x06, 0x20,
0x01, 0x28, 0x0d, 0x52, 0x07, 0x62, 0x65, 0x74, 0x4d, 0x69, 0x6e, 0x31, 0x12, 0x19, 0x0a, 0x08,
0x62, 0x65, 0x74, 0x5f, 0x6d, 0x61, 0x78, 0x31, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x07,
0x62, 0x65, 0x74, 0x4d, 0x61, 0x78, 0x31, 0x12, 0x19, 0x0a, 0x08, 0x62, 0x65, 0x74, 0x5f, 0x6d,
0x69, 0x6e, 0x32, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x07, 0x62, 0x65, 0x74, 0x4d, 0x69,
0x6e, 0x32, 0x12, 0x19, 0x0a, 0x08, 0x62, 0x65, 0x74, 0x5f, 0x6d, 0x61, 0x78, 0x32, 0x18, 0x09,
0x20, 0x01, 0x28, 0x0d, 0x52, 0x07, 0x62, 0x65, 0x74, 0x4d, 0x61, 0x78, 0x32, 0x12, 0x19, 0x0a,
0x08, 0x62, 0x65, 0x74, 0x5f, 0x6d, 0x69, 0x6e, 0x30, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x0d, 0x52,
0x07, 0x62, 0x65, 0x74, 0x4d, 0x69, 0x6e, 0x30, 0x12, 0x19, 0x0a, 0x08, 0x62, 0x65, 0x74, 0x5f,
0x6d, 0x61, 0x78, 0x30, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x07, 0x62, 0x65, 0x74, 0x4d,
0x61, 0x78, 0x30, 0x22, 0xd7, 0x01, 0x0a, 0x11, 0x42, 0x6c, 0x61, 0x63, 0x6b, 0x72, 0x65, 0x64,
0x4c, 0x65, 0x76, 0x65, 0x6c, 0x44, 0x65, 0x73, 0x63, 0x12, 0x43, 0x0a, 0x0a, 0x67, 0x61, 0x6d,
0x65, 0x5f, 0x6c, 0x65, 0x76, 0x65, 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x24, 0x2e,
0x63, 0x6f, 0x6d, 0x2e, 0x63, 0x77, 0x2e, 0x63, 0x68, 0x65, 0x73, 0x73, 0x2e, 0x70, 0x6c, 0x61,
0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x47, 0x61, 0x6d, 0x65, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x44,
0x65, 0x73, 0x63, 0x52, 0x09, 0x67, 0x61, 0x6d, 0x65, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x12, 0x17,
0x0a, 0x07, 0x62, 0x65, 0x74, 0x5f, 0x6d, 0x69, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52,
0x06, 0x62, 0x65, 0x74, 0x4d, 0x69, 0x6e, 0x12, 0x17, 0x0a, 0x07, 0x62, 0x65, 0x74, 0x5f, 0x6d,
0x61, 0x78, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x06, 0x62, 0x65, 0x74, 0x4d, 0x61, 0x78,
0x12, 0x26, 0x0a, 0x0f, 0x53, 0x44, 0x5f, 0x70, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x73, 0x5f, 0x73,
0x69, 0x7a, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0d, 0x53, 0x44, 0x50, 0x6c, 0x61,
0x79, 0x65, 0x72, 0x73, 0x53, 0x69, 0x7a, 0x65, 0x12, 0x23, 0x0a, 0x0d, 0x63, 0x68, 0x69, 0x70,
0x5f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0d, 0x52,
0x0c, 0x63, 0x68, 0x69, 0x70, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x65, 0x22, 0xff, 0x01,
0x0a, 0x0f, 0x48, 0x6f, 0x72, 0x73, 0x65, 0x72, 0x61, 0x63, 0x69, 0x6e, 0x67, 0x44, 0x65, 0x73,
0x63, 0x12, 0x43, 0x0a, 0x0a, 0x67, 0x61, 0x6d, 0x65, 0x5f, 0x6c, 0x65, 0x76, 0x65, 0x6c, 0x18,
0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x63, 0x6f, 0x6d, 0x2e, 0x63, 0x77, 0x2e, 0x63,
0x68, 0x65, 0x73, 0x73, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x47, 0x61,
0x6d, 0x65, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x44, 0x65, 0x73, 0x63, 0x52, 0x09, 0x67, 0x61, 0x6d,
0x65, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x12, 0x26, 0x0a, 0x0f, 0x53, 0x44, 0x5f, 0x70, 0x6c, 0x61,
0x79, 0x65, 0x72, 0x73, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52,
0x0d, 0x53, 0x44, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x73, 0x53, 0x69, 0x7a, 0x65, 0x12, 0x23,
0x0a, 0x0d, 0x63, 0x68, 0x69, 0x70, 0x5f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x65, 0x18,
0x03, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0c, 0x63, 0x68, 0x69, 0x70, 0x54, 0x65, 0x6d, 0x70, 0x6c,
0x65, 0x74, 0x65, 0x12, 0x28, 0x0a, 0x10, 0x6f, 0x5f, 0x65, 0x78, 0x70, 0x65, 0x63, 0x74, 0x65,
0x64, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0e, 0x6f,
0x45, 0x78, 0x70, 0x65, 0x63, 0x74, 0x65, 0x64, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x17, 0x0a,
0x07, 0x62, 0x65, 0x74, 0x5f, 0x6d, 0x69, 0x6e, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x06,
0x62, 0x65, 0x74, 0x4d, 0x69, 0x6e, 0x12, 0x17, 0x0a, 0x07, 0x62, 0x65, 0x74, 0x5f, 0x6d, 0x61,
0x78, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x06, 0x62, 0x65, 0x74, 0x4d, 0x61, 0x78, 0x22,
0xd1, 0x01, 0x0a, 0x0b, 0x4a, 0x4d, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x44, 0x65, 0x73, 0x63, 0x12,
0x43, 0x0a, 0x0a, 0x67, 0x61, 0x6d, 0x65, 0x5f, 0x6c, 0x65, 0x76, 0x65, 0x6c, 0x18, 0x01, 0x20,
0x01, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x63, 0x6f, 0x6d, 0x2e, 0x63, 0x77, 0x2e, 0x63, 0x68, 0x65,
0x73, 0x73, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x47, 0x61, 0x6d, 0x65,
0x4c, 0x65, 0x76, 0x65, 0x6c, 0x44, 0x65, 0x73, 0x63, 0x52, 0x09, 0x67, 0x61, 0x6d, 0x65, 0x4c,
0x65, 0x76, 0x65, 0x6c, 0x12, 0x17, 0x0a, 0x07, 0x62, 0x65, 0x74, 0x5f, 0x6d, 0x69, 0x6e, 0x18,
0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x06, 0x62, 0x65, 0x74, 0x4d, 0x69, 0x6e, 0x12, 0x17, 0x0a,
0x07, 0x62, 0x65, 0x74, 0x5f, 0x6d, 0x61, 0x78, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x06,
0x62, 0x65, 0x74, 0x4d, 0x61, 0x78, 0x12, 0x26, 0x0a, 0x0f, 0x53, 0x44, 0x5f, 0x70, 0x6c, 0x61,
0x79, 0x65, 0x72, 0x73, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0d, 0x52,
0x0d, 0x53, 0x44, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x73, 0x53, 0x69, 0x7a, 0x65, 0x12, 0x23,
0x0a, 0x0d, 0x63, 0x68, 0x69, 0x70, 0x5f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x65, 0x18,
0x05, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0c, 0x63, 0x68, 0x69, 0x70, 0x54, 0x65, 0x6d, 0x70, 0x6c,
0x65, 0x74, 0x65, 0x22, 0xb2, 0x01, 0x0a, 0x11, 0x42, 0x61, 0x63, 0x63, 0x61, 0x72, 0x61, 0x74,
0x4c, 0x65, 0x76, 0x65, 0x6c, 0x44, 0x65, 0x73, 0x63, 0x12, 0x43, 0x0a, 0x0a, 0x67, 0x61, 0x6d,
0x65, 0x5f, 0x6c, 0x65, 0x76, 0x65, 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x24, 0x2e,
0x63, 0x6f, 0x6d, 0x2e, 0x63, 0x77, 0x2e, 0x63, 0x68, 0x65, 0x73, 0x73, 0x2e, 0x70, 0x6c, 0x61,
0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x47, 0x61, 0x6d, 0x65, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x44,
0x65, 0x73, 0x63, 0x52, 0x09, 0x67, 0x61, 0x6d, 0x65, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x12, 0x17,
0x0a, 0x07, 0x62, 0x65, 0x74, 0x5f, 0x6d, 0x69, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52,
0x06, 0x62, 0x65, 0x74, 0x4d, 0x69, 0x6e, 0x12, 0x17, 0x0a, 0x07, 0x62, 0x65, 0x74, 0x5f, 0x6d,
0x61, 0x78, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x06, 0x62, 0x65, 0x74, 0x4d, 0x61, 0x78,
0x12, 0x26, 0x0a, 0x0f, 0x53, 0x44, 0x5f, 0x70, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x73, 0x5f, 0x73,
0x69, 0x7a, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0d, 0x53, 0x44, 0x50, 0x6c, 0x61,
0x79, 0x65, 0x72, 0x73, 0x53, 0x69, 0x7a, 0x65, 0x22, 0x4f, 0x0a, 0x0f, 0x47, 0x61, 0x6d, 0x65,
0x4b, 0x69, 0x6e, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x3c, 0x0a, 0x09, 0x67,
0x61, 0x6d, 0x65, 0x5f, 0x6b, 0x69, 0x6e, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1f,
0x2e, 0x63, 0x6f, 0x6d, 0x2e, 0x63, 0x77, 0x2e, 0x63, 0x68, 0x65, 0x73, 0x73, 0x2e, 0x70, 0x6c,
0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x47, 0x61, 0x6d, 0x65, 0x4b, 0x69, 0x6e, 0x64, 0x52,
0x08, 0x67, 0x61, 0x6d, 0x65, 0x4b, 0x69, 0x6e, 0x64, 0x22, 0x89, 0x07, 0x0a, 0x10, 0x47, 0x61,
0x6d, 0x65, 0x4b, 0x69, 0x6e, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x3c,
0x0a, 0x09, 0x67, 0x61, 0x6d, 0x65, 0x5f, 0x6b, 0x69, 0x6e, 0x64, 0x18, 0x01, 0x20, 0x03, 0x28,
0x0e, 0x32, 0x1f, 0x2e, 0x63, 0x6f, 0x6d, 0x2e, 0x63, 0x77, 0x2e, 0x63, 0x68, 0x65, 0x73, 0x73,
0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x47, 0x61, 0x6d, 0x65, 0x4b, 0x69,
0x6e, 0x64, 0x52, 0x08, 0x67, 0x61, 0x6d, 0x65, 0x4b, 0x69, 0x6e, 0x64, 0x12, 0x48, 0x0a, 0x0c,
0x72, 0x75, 0x6d, 0x6d, 0x79, 0x5f, 0x6c, 0x65, 0x76, 0x65, 0x6c, 0x73, 0x18, 0x02, 0x20, 0x03,
0x28, 0x0b, 0x32, 0x25, 0x2e, 0x63, 0x6f, 0x6d, 0x2e, 0x63, 0x77, 0x2e, 0x63, 0x68, 0x65, 0x73,
0x73, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x52, 0x75, 0x6d, 0x6d, 0x79,
0x4c, 0x65, 0x76, 0x65, 0x6c, 0x44, 0x65, 0x73, 0x63, 0x52, 0x0b, 0x72, 0x75, 0x6d, 0x6d, 0x79,
0x4c, 0x65, 0x76, 0x65, 0x6c, 0x73, 0x12, 0x51, 0x0a, 0x0f, 0x74, 0x65, 0x65, 0x70, 0x61, 0x74,
0x74, 0x69, 0x5f, 0x6c, 0x65, 0x76, 0x65, 0x6c, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32,
0x28, 0x2e, 0x63, 0x6f, 0x6d, 0x2e, 0x63, 0x77, 0x2e, 0x63, 0x68, 0x65, 0x73, 0x73, 0x2e, 0x70,
0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x54, 0x65, 0x65, 0x70, 0x61, 0x74, 0x74, 0x69,
0x4c, 0x65, 0x76, 0x65, 0x6c, 0x44, 0x65, 0x73, 0x63, 0x52, 0x0e, 0x74, 0x65, 0x65, 0x70, 0x61,
0x74, 0x74, 0x69, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x73, 0x12, 0x3f, 0x0a, 0x09, 0x61, 0x62, 0x5f,
0x6c, 0x65, 0x76, 0x65, 0x6c, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x63,
0x6f, 0x6d, 0x2e, 0x63, 0x77, 0x2e, 0x63, 0x68, 0x65, 0x73, 0x73, 0x2e, 0x70, 0x6c, 0x61, 0x74,
0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x41, 0x42, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x44, 0x65, 0x73, 0x63,
0x52, 0x08, 0x61, 0x62, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x73, 0x12, 0x5a, 0x0a, 0x12, 0x73, 0x65,
0x76, 0x65, 0x6e, 0x75, 0x70, 0x64, 0x6f, 0x77, 0x6e, 0x5f, 0x6c, 0x65, 0x76, 0x65, 0x6c, 0x73,
0x18, 0x05, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x63, 0x6f, 0x6d, 0x2e, 0x63, 0x77, 0x2e,
0x63, 0x68, 0x65, 0x73, 0x73, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x53,
0x65, 0x76, 0x65, 0x6e, 0x55, 0x70, 0x64, 0x6f, 0x77, 0x6e, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x44,
0x65, 0x73, 0x63, 0x52, 0x11, 0x73, 0x65, 0x76, 0x65, 0x6e, 0x75, 0x70, 0x64, 0x6f, 0x77, 0x6e,
0x4c, 0x65, 0x76, 0x65, 0x6c, 0x73, 0x12, 0x63, 0x0a, 0x15, 0x72, 0x61, 0x70, 0x69, 0x64, 0x74,
0x65, 0x65, 0x6e, 0x70, 0x61, 0x74, 0x74, 0x69, 0x5f, 0x6c, 0x65, 0x76, 0x65, 0x6c, 0x73, 0x18,
0x06, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2e, 0x2e, 0x63, 0x6f, 0x6d, 0x2e, 0x63, 0x77, 0x2e, 0x63,
0x68, 0x65, 0x73, 0x73, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x52, 0x61,
0x70, 0x69, 0x64, 0x54, 0x65, 0x65, 0x6e, 0x70, 0x61, 0x74, 0x74, 0x69, 0x4c, 0x65, 0x76, 0x65,
0x6c, 0x44, 0x65, 0x73, 0x63, 0x52, 0x14, 0x72, 0x61, 0x70, 0x69, 0x64, 0x74, 0x65, 0x65, 0x6e,
0x70, 0x61, 0x74, 0x74, 0x69, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x73, 0x12, 0x5a, 0x0a, 0x12, 0x64,
0x72, 0x61, 0x67, 0x6f, 0x6e, 0x74, 0x69, 0x67, 0x65, 0x72, 0x5f, 0x6c, 0x65, 0x76, 0x65, 0x6c,
0x73, 0x18, 0x07, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x63, 0x6f, 0x6d, 0x2e, 0x63, 0x77,
0x2e, 0x63, 0x68, 0x65, 0x73, 0x73, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e,
0x44, 0x72, 0x61, 0x67, 0x6f, 0x6e, 0x54, 0x69, 0x67, 0x65, 0x72, 0x4c, 0x65, 0x76, 0x65, 0x6c,
0x44, 0x65, 0x73, 0x63, 0x52, 0x11, 0x64, 0x72, 0x61, 0x67, 0x6f, 0x6e, 0x74, 0x69, 0x67, 0x65,
0x72, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x73, 0x12, 0x51, 0x0a, 0x0f, 0x62, 0x6c, 0x61, 0x63, 0x6b,
0x72, 0x65, 0x64, 0x5f, 0x6c, 0x65, 0x76, 0x65, 0x6c, 0x73, 0x18, 0x08, 0x20, 0x03, 0x28, 0x0b,
0x32, 0x28, 0x2e, 0x63, 0x6f, 0x6d, 0x2e, 0x63, 0x77, 0x2e, 0x63, 0x68, 0x65, 0x73, 0x73, 0x2e,
0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x42, 0x6c, 0x61, 0x63, 0x6b, 0x72, 0x65,
0x64, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x44, 0x65, 0x73, 0x63, 0x52, 0x0e, 0x62, 0x6c, 0x61, 0x63,
0x6b, 0x72, 0x65, 0x64, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x73, 0x12, 0x55, 0x0a, 0x12, 0x68, 0x6f,
0x72, 0x73, 0x65, 0x72, 0x61, 0x63, 0x69, 0x6e, 0x67, 0x5f, 0x6c, 0x65, 0x76, 0x65, 0x6c, 0x73,
0x18, 0x09, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x63, 0x6f, 0x6d, 0x2e, 0x63, 0x77, 0x2e,
0x63, 0x68, 0x65, 0x73, 0x73, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x48,
0x6f, 0x72, 0x73, 0x65, 0x72, 0x61, 0x63, 0x69, 0x6e, 0x67, 0x44, 0x65, 0x73, 0x63, 0x52, 0x11,
0x68, 0x6f, 0x72, 0x73, 0x65, 0x72, 0x61, 0x63, 0x69, 0x6e, 0x67, 0x4c, 0x65, 0x76, 0x65, 0x6c,
0x73, 0x12, 0x3f, 0x0a, 0x09, 0x6a, 0x6d, 0x5f, 0x6c, 0x65, 0x76, 0x65, 0x6c, 0x73, 0x18, 0x0a,
0x20, 0x03, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x63, 0x6f, 0x6d, 0x2e, 0x63, 0x77, 0x2e, 0x63, 0x68,
0x65, 0x73, 0x73, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x4a, 0x4d, 0x4c,
0x65, 0x76, 0x65, 0x6c, 0x44, 0x65, 0x73, 0x63, 0x52, 0x08, 0x6a, 0x6d, 0x4c, 0x65, 0x76, 0x65,
0x6c, 0x73, 0x12, 0x51, 0x0a, 0x0f, 0x62, 0x61, 0x63, 0x63, 0x61, 0x72, 0x61, 0x74, 0x5f, 0x6c,
0x65, 0x76, 0x65, 0x6c, 0x73, 0x18, 0x0b, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x63, 0x6f,
0x6d, 0x2e, 0x63, 0x77, 0x2e, 0x63, 0x68, 0x65, 0x73, 0x73, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66,
0x6f, 0x72, 0x6d, 0x2e, 0x42, 0x61, 0x63, 0x63, 0x61, 0x72, 0x61, 0x74, 0x4c, 0x65, 0x76, 0x65,
0x6c, 0x44, 0x65, 0x73, 0x63, 0x52, 0x0e, 0x62, 0x61, 0x63, 0x63, 0x61, 0x72, 0x61, 0x74, 0x4c,
0x65, 0x76, 0x65, 0x6c, 0x73, 0x22, 0x83, 0x01, 0x0a, 0x0c, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x52,
0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e,
0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x06, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x3c,
0x0a, 0x09, 0x67, 0x61, 0x6d, 0x65, 0x5f, 0x6b, 0x69, 0x6e, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28,
0x0e, 0x32, 0x1f, 0x2e, 0x63, 0x6f, 0x6d, 0x2e, 0x63, 0x77, 0x2e, 0x63, 0x68, 0x65, 0x73, 0x73,
0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x47, 0x61, 0x6d, 0x65, 0x4b, 0x69,
0x6e, 0x64, 0x52, 0x08, 0x67, 0x61, 0x6d, 0x65, 0x4b, 0x69, 0x6e, 0x64, 0x12, 0x1d, 0x0a, 0x0a,
0x67, 0x61, 0x6d, 0x65, 0x5f, 0x6c, 0x65, 0x76, 0x65, 0x6c, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d,
0x52, 0x09, 0x67, 0x61, 0x6d, 0x65, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x22, 0x65, 0x0a, 0x0d, 0x4d,
0x61, 0x74, 0x63, 0x68, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x16, 0x0a, 0x06,
0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x06, 0x72, 0x65,
0x73, 0x75, 0x6c, 0x74, 0x12, 0x19, 0x0a, 0x08, 0x6d, 0x61, 0x78, 0x5f, 0x74, 0x69, 0x6d, 0x65,
0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x07, 0x6d, 0x61, 0x78, 0x54, 0x69, 0x6d, 0x65, 0x12,
0x21, 0x0a, 0x0c, 0x61, 0x76, 0x65, 0x72, 0x61, 0x67, 0x65, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18,
0x03, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0b, 0x61, 0x76, 0x65, 0x72, 0x61, 0x67, 0x65, 0x54, 0x69,
0x6d, 0x65, 0x22, 0xbe, 0x01, 0x0a, 0x0f, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x4f, 0x4b, 0x52, 0x65,
0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74,
0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x12, 0x1b,
0x0a, 0x09, 0x67, 0x61, 0x6d, 0x65, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28,
0x0d, 0x52, 0x08, 0x67, 0x61, 0x6d, 0x65, 0x54, 0x79, 0x70, 0x65, 0x12, 0x19, 0x0a, 0x08, 0x74,
0x61, 0x62, 0x6c, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x07, 0x74,
0x61, 0x62, 0x6c, 0x65, 0x49, 0x64, 0x12, 0x3c, 0x0a, 0x09, 0x67, 0x61, 0x6d, 0x65, 0x5f, 0x6b,
0x69, 0x6e, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1f, 0x2e, 0x63, 0x6f, 0x6d, 0x2e,
0x63, 0x77, 0x2e, 0x63, 0x68, 0x65, 0x73, 0x73, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72,
0x6d, 0x2e, 0x47, 0x61, 0x6d, 0x65, 0x4b, 0x69, 0x6e, 0x64, 0x52, 0x08, 0x67, 0x61, 0x6d, 0x65,
0x4b, 0x69, 0x6e, 0x64, 0x12, 0x1d, 0x0a, 0x0a, 0x67, 0x61, 0x6d, 0x65, 0x5f, 0x6c, 0x65, 0x76,
0x65, 0x6c, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x09, 0x67, 0x61, 0x6d, 0x65, 0x4c, 0x65,
0x76, 0x65, 0x6c, 0x22, 0x6f, 0x0a, 0x10, 0x45, 0x6e, 0x74, 0x65, 0x72, 0x47, 0x61, 0x6d, 0x65,
0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x3c, 0x0a, 0x09, 0x67, 0x61, 0x6d, 0x65, 0x5f,
0x6b, 0x69, 0x6e, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1f, 0x2e, 0x63, 0x6f, 0x6d,
0x2e, 0x63, 0x77, 0x2e, 0x63, 0x68, 0x65, 0x73, 0x73, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f,
0x72, 0x6d, 0x2e, 0x47, 0x61, 0x6d, 0x65, 0x4b, 0x69, 0x6e, 0x64, 0x52, 0x08, 0x67, 0x61, 0x6d,
0x65, 0x4b, 0x69, 0x6e, 0x64, 0x12, 0x1d, 0x0a, 0x0a, 0x67, 0x61, 0x6d, 0x65, 0x5f, 0x6c, 0x65,
0x76, 0x65, 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x09, 0x67, 0x61, 0x6d, 0x65, 0x4c,
0x65, 0x76, 0x65, 0x6c, 0x2a, 0xa3, 0x03, 0x0a, 0x0a, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x54,
0x79, 0x70, 0x65, 0x12, 0x17, 0x0a, 0x13, 0x53, 0x45, 0x52, 0x56, 0x45, 0x52, 0x5f, 0x54, 0x50,
0x59, 0x45, 0x5f, 0x49, 0x4e, 0x56, 0x41, 0x4c, 0x49, 0x44, 0x10, 0x00, 0x12, 0x18, 0x0a, 0x13,
0x53, 0x45, 0x52, 0x56, 0x45, 0x52, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x47, 0x41, 0x54, 0x45,
0x57, 0x41, 0x59, 0x10, 0xe8, 0x07, 0x12, 0x17, 0x0a, 0x12, 0x53, 0x45, 0x52, 0x56, 0x45, 0x52,
0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x43, 0x4f, 0x4d, 0x4d, 0x4f, 0x4e, 0x10, 0xcc, 0x08, 0x12,
0x16, 0x0a, 0x11, 0x53, 0x45, 0x52, 0x56, 0x45, 0x52, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x4d,
0x41, 0x54, 0x43, 0x48, 0x10, 0xcd, 0x08, 0x12, 0x13, 0x0a, 0x0e, 0x53, 0x45, 0x52, 0x56, 0x45,
0x52, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x46, 0x54, 0x10, 0xce, 0x08, 0x12, 0x13, 0x0a, 0x0e,
0x53, 0x45, 0x52, 0x56, 0x45, 0x52, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x42, 0x41, 0x10, 0xd2,
0x0f, 0x12, 0x17, 0x0a, 0x12, 0x53, 0x45, 0x52, 0x56, 0x45, 0x52, 0x5f, 0x54, 0x59, 0x50, 0x45,
0x5f, 0x52, 0x55, 0x4d, 0x4d, 0x59, 0x5f, 0x10, 0xb8, 0x17, 0x12, 0x1a, 0x0a, 0x15, 0x53, 0x45,
0x52, 0x56, 0x45, 0x52, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x54, 0x45, 0x45, 0x50, 0x41, 0x54,
0x54, 0x49, 0x5f, 0x10, 0xa0, 0x1f, 0x12, 0x14, 0x0a, 0x0f, 0x53, 0x45, 0x52, 0x56, 0x45, 0x52,
0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x41, 0x42, 0x5f, 0x10, 0x88, 0x27, 0x12, 0x15, 0x0a, 0x10,
0x53, 0x45, 0x52, 0x56, 0x45, 0x52, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x37, 0x55, 0x44, 0x5f,
0x10, 0xf0, 0x2e, 0x12, 0x19, 0x0a, 0x14, 0x53, 0x45, 0x52, 0x56, 0x45, 0x52, 0x5f, 0x54, 0x59,
0x50, 0x45, 0x5f, 0x52, 0x41, 0x50, 0x49, 0x44, 0x54, 0x50, 0x5f, 0x10, 0xd8, 0x36, 0x12, 0x1d,
0x0a, 0x18, 0x53, 0x45, 0x52, 0x56, 0x45, 0x52, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x44, 0x52,
0x41, 0x47, 0x4f, 0x4e, 0x54, 0x49, 0x47, 0x45, 0x52, 0x5f, 0x10, 0xc0, 0x3e, 0x12, 0x1a, 0x0a,
0x15, 0x53, 0x45, 0x52, 0x56, 0x45, 0x52, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x42, 0x4c, 0x41,
0x43, 0x4b, 0x52, 0x45, 0x44, 0x5f, 0x10, 0xa8, 0x46, 0x12, 0x1d, 0x0a, 0x18, 0x53, 0x45, 0x52,
0x56, 0x45, 0x52, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x48, 0x4f, 0x52, 0x53, 0x45, 0x52, 0x41,
0x43, 0x49, 0x4e, 0x47, 0x5f, 0x10, 0x90, 0x4e, 0x12, 0x14, 0x0a, 0x0f, 0x53, 0x45, 0x52, 0x56,
0x45, 0x52, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x4a, 0x4d, 0x5f, 0x10, 0xf8, 0x55, 0x12, 0x1a,
0x0a, 0x15, 0x53, 0x45, 0x52, 0x56, 0x45, 0x52, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x42, 0x41,
0x43, 0x43, 0x41, 0x52, 0x41, 0x54, 0x5f, 0x10, 0xe0, 0x5d, 0x2a, 0xd6, 0x02, 0x0a, 0x10, 0x53,
0x65, 0x72, 0x76, 0x65, 0x72, 0x47, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x43, 0x6d, 0x64, 0x12,
0x17, 0x0a, 0x13, 0x43, 0x4d, 0x44, 0x5f, 0x47, 0x41, 0x54, 0x45, 0x57, 0x41, 0x59, 0x5f, 0x49,
0x4e, 0x56, 0x41, 0x4c, 0x49, 0x44, 0x10, 0x00, 0x12, 0x19, 0x0a, 0x15, 0x43, 0x4d, 0x44, 0x5f,
0x47, 0x41, 0x54, 0x45, 0x57, 0x41, 0x59, 0x5f, 0x4c, 0x4f, 0x47, 0x49, 0x4e, 0x5f, 0x52, 0x45,
0x51, 0x10, 0x01, 0x12, 0x1a, 0x0a, 0x16, 0x43, 0x4d, 0x44, 0x5f, 0x47, 0x41, 0x54, 0x45, 0x57,
0x41, 0x59, 0x5f, 0x4c, 0x4f, 0x47, 0x49, 0x4e, 0x5f, 0x52, 0x45, 0x53, 0x50, 0x10, 0x02, 0x12,
0x1a, 0x0a, 0x16, 0x43, 0x4d, 0x44, 0x5f, 0x47, 0x41, 0x54, 0x45, 0x57, 0x41, 0x59, 0x5f, 0x4c,
0x4f, 0x47, 0x4f, 0x55, 0x54, 0x5f, 0x52, 0x45, 0x51, 0x10, 0x03, 0x12, 0x1b, 0x0a, 0x17, 0x43,
0x4d, 0x44, 0x5f, 0x47, 0x41, 0x54, 0x45, 0x57, 0x41, 0x59, 0x5f, 0x4c, 0x4f, 0x47, 0x4f, 0x55,
0x54, 0x5f, 0x52, 0x45, 0x53, 0x50, 0x10, 0x04, 0x12, 0x1e, 0x0a, 0x1a, 0x43, 0x4d, 0x44, 0x5f,
0x47, 0x41, 0x54, 0x45, 0x57, 0x41, 0x59, 0x5f, 0x44, 0x49, 0x53, 0x43, 0x4f, 0x4e, 0x4e, 0x45,
0x43, 0x54, 0x5f, 0x52, 0x45, 0x51, 0x10, 0x05, 0x12, 0x1f, 0x0a, 0x1b, 0x43, 0x4d, 0x44, 0x5f,
0x47, 0x41, 0x54, 0x45, 0x57, 0x41, 0x59, 0x5f, 0x44, 0x49, 0x53, 0x43, 0x4f, 0x4e, 0x4e, 0x45,
0x43, 0x54, 0x5f, 0x52, 0x45, 0x53, 0x50, 0x10, 0x06, 0x12, 0x20, 0x0a, 0x1c, 0x43, 0x4d, 0x44,
0x5f, 0x47, 0x41, 0x54, 0x45, 0x57, 0x41, 0x59, 0x5f, 0x52, 0x45, 0x50, 0x45, 0x41, 0x54, 0x5f,
0x4c, 0x4f, 0x47, 0x49, 0x4e, 0x5f, 0x52, 0x45, 0x51, 0x10, 0x07, 0x12, 0x21, 0x0a, 0x1d, 0x43,
0x4d, 0x44, 0x5f, 0x47, 0x41, 0x54, 0x45, 0x57, 0x41, 0x59, 0x5f, 0x52, 0x45, 0x50, 0x45, 0x41,
0x54, 0x5f, 0x4c, 0x4f, 0x47, 0x49, 0x4e, 0x5f, 0x52, 0x45, 0x53, 0x50, 0x10, 0x08, 0x12, 0x18,
0x0a, 0x14, 0x43, 0x4d, 0x44, 0x5f, 0x47, 0x41, 0x54, 0x45, 0x57, 0x41, 0x59, 0x5f, 0x50, 0x49,
0x4e, 0x47, 0x5f, 0x52, 0x45, 0x51, 0x10, 0x09, 0x12, 0x19, 0x0a, 0x15, 0x43, 0x4d, 0x44, 0x5f,
0x47, 0x41, 0x54, 0x45, 0x57, 0x41, 0x59, 0x5f, 0x50, 0x49, 0x4e, 0x47, 0x5f, 0x52, 0x45, 0x53,
0x50, 0x10, 0x0a, 0x2a, 0xb9, 0x03, 0x0a, 0x0f, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x43, 0x6f,
0x6d, 0x6d, 0x6f, 0x6e, 0x43, 0x6d, 0x64, 0x12, 0x16, 0x0a, 0x12, 0x43, 0x4d, 0x44, 0x5f, 0x43,
0x4f, 0x4d, 0x4d, 0x4f, 0x4e, 0x5f, 0x49, 0x4e, 0x56, 0x41, 0x4c, 0x49, 0x44, 0x10, 0x00, 0x12,
0x0c, 0x0a, 0x08, 0x43, 0x4d, 0x44, 0x5f, 0x4e, 0x41, 0x5f, 0x31, 0x10, 0x01, 0x12, 0x1a, 0x0a,
0x16, 0x43, 0x4d, 0x44, 0x5f, 0x46, 0x52, 0x45, 0x45, 0x5a, 0x45, 0x5f, 0x50, 0x4c, 0x41, 0x59,
0x45, 0x52, 0x5f, 0x52, 0x45, 0x53, 0x50, 0x10, 0x02, 0x12, 0x1e, 0x0a, 0x1a, 0x43, 0x4d, 0x44,
0x5f, 0x47, 0x45, 0x54, 0x5f, 0x50, 0x4c, 0x41, 0x59, 0x45, 0x52, 0x5f, 0x42, 0x41, 0x4c, 0x41,
0x4e, 0x43, 0x45, 0x5f, 0x52, 0x45, 0x51, 0x10, 0x03, 0x12, 0x1f, 0x0a, 0x1b, 0x43, 0x4d, 0x44,
0x5f, 0x47, 0x45, 0x54, 0x5f, 0x50, 0x4c, 0x41, 0x59, 0x45, 0x52, 0x5f, 0x42, 0x41, 0x4c, 0x41,
0x4e, 0x43, 0x45, 0x5f, 0x52, 0x45, 0x53, 0x50, 0x10, 0x04, 0x12, 0x0c, 0x0a, 0x08, 0x43, 0x4d,
0x44, 0x5f, 0x4e, 0x41, 0x5f, 0x35, 0x10, 0x05, 0x12, 0x1f, 0x0a, 0x1b, 0x43, 0x4d, 0x44, 0x5f,
0x53, 0x59, 0x53, 0x4d, 0x45, 0x53, 0x53, 0x41, 0x47, 0x45, 0x5f, 0x54, 0x4f, 0x5f, 0x55, 0x53,
0x45, 0x52, 0x5f, 0x52, 0x45, 0x53, 0x50, 0x10, 0x06, 0x12, 0x0c, 0x0a, 0x08, 0x43, 0x4d, 0x44,
0x5f, 0x4e, 0x41, 0x5f, 0x37, 0x10, 0x07, 0x12, 0x1e, 0x0a, 0x1a, 0x43, 0x4d, 0x44, 0x5f, 0x50,
0x48, 0x50, 0x5f, 0x32, 0x5f, 0x55, 0x53, 0x45, 0x52, 0x5f, 0x43, 0x4f, 0x4d, 0x4d, 0x4f, 0x4e,
0x5f, 0x52, 0x45, 0x53, 0x50, 0x10, 0x08, 0x12, 0x1a, 0x0a, 0x16, 0x43, 0x4d, 0x44, 0x5f, 0x47,
0x45, 0x54, 0x5f, 0x55, 0x53, 0x45, 0x52, 0x5f, 0x41, 0x54, 0x54, 0x52, 0x49, 0x5f, 0x52, 0x45,
0x51, 0x10, 0x09, 0x12, 0x1b, 0x0a, 0x17, 0x43, 0x4d, 0x44, 0x5f, 0x47, 0x45, 0x54, 0x5f, 0x55,
0x53, 0x45, 0x52, 0x5f, 0x41, 0x54, 0x54, 0x52, 0x49, 0x5f, 0x52, 0x45, 0x53, 0x50, 0x10, 0x0a,
0x12, 0x1d, 0x0a, 0x19, 0x43, 0x4d, 0x44, 0x5f, 0x55, 0x50, 0x44, 0x41, 0x54, 0x45, 0x5f, 0x55,
0x53, 0x45, 0x52, 0x5f, 0x41, 0x54, 0x54, 0x52, 0x49, 0x5f, 0x52, 0x45, 0x51, 0x10, 0x0b, 0x12,
0x1e, 0x0a, 0x1a, 0x43, 0x4d, 0x44, 0x5f, 0x55, 0x50, 0x44, 0x41, 0x54, 0x45, 0x5f, 0x55, 0x53,
0x45, 0x52, 0x5f, 0x41, 0x54, 0x54, 0x52, 0x49, 0x5f, 0x52, 0x45, 0x53, 0x50, 0x10, 0x0c, 0x12,
0x15, 0x0a, 0x11, 0x43, 0x4d, 0x44, 0x5f, 0x47, 0x45, 0x54, 0x5f, 0x42, 0x4f, 0x4e, 0x55, 0x53,
0x5f, 0x52, 0x45, 0x51, 0x10, 0x0d, 0x12, 0x16, 0x0a, 0x12, 0x43, 0x4d, 0x44, 0x5f, 0x47, 0x45,
0x54, 0x5f, 0x42, 0x4f, 0x4e, 0x55, 0x53, 0x5f, 0x52, 0x45, 0x53, 0x50, 0x10, 0x0e, 0x12, 0x0e,
0x0a, 0x0a, 0x43, 0x4d, 0x44, 0x5f, 0x42, 0x53, 0x5f, 0x52, 0x45, 0x51, 0x10, 0x0f, 0x12, 0x0f,
0x0a, 0x0b, 0x43, 0x4d, 0x44, 0x5f, 0x42, 0x53, 0x5f, 0x52, 0x45, 0x53, 0x50, 0x10, 0x10, 0x2a,
0x3d, 0x0a, 0x0c, 0x43, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x63, 0x79, 0x4b, 0x69, 0x6e, 0x64, 0x12,
0x0e, 0x0a, 0x0a, 0x43, 0x4b, 0x5f, 0x49, 0x4e, 0x56, 0x41, 0x4c, 0x49, 0x44, 0x10, 0x00, 0x12,
0x0c, 0x0a, 0x08, 0x43, 0x4b, 0x5f, 0x4d, 0x6f, 0x6e, 0x65, 0x79, 0x10, 0x01, 0x12, 0x0f, 0x0a,
0x0b, 0x43, 0x4b, 0x5f, 0x50, 0x72, 0x61, 0x63, 0x74, 0x69, 0x63, 0x65, 0x10, 0x02, 0x2a, 0x80,
0x05, 0x0a, 0x0c, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x5f, 0x53, 0x5f, 0x43, 0x6d, 0x64, 0x12,
0x11, 0x0a, 0x0d, 0x43, 0x4d, 0x44, 0x5f, 0x53, 0x5f, 0x49, 0x4e, 0x56, 0x41, 0x4c, 0x49, 0x44,
0x10, 0x00, 0x12, 0x0e, 0x0a, 0x0a, 0x43, 0x4d, 0x44, 0x5f, 0x53, 0x5f, 0x50, 0x49, 0x4e, 0x47,
0x10, 0x01, 0x12, 0x0e, 0x0a, 0x0a, 0x43, 0x4d, 0x44, 0x5f, 0x53, 0x5f, 0x50, 0x4f, 0x4e, 0x47,
0x10, 0x02, 0x12, 0x16, 0x0a, 0x12, 0x43, 0x4d, 0x44, 0x5f, 0x53, 0x5f, 0x52, 0x55, 0x4d, 0x4d,
0x59, 0x5f, 0x42, 0x53, 0x5f, 0x52, 0x45, 0x51, 0x10, 0x03, 0x12, 0x17, 0x0a, 0x13, 0x43, 0x4d,
0x44, 0x5f, 0x53, 0x5f, 0x52, 0x55, 0x4d, 0x4d, 0x59, 0x5f, 0x42, 0x53, 0x5f, 0x52, 0x45, 0x53,
0x50, 0x10, 0x04, 0x12, 0x1a, 0x0a, 0x16, 0x43, 0x4d, 0x44, 0x5f, 0x53, 0x5f, 0x54, 0x45, 0x45,
0x4e, 0x50, 0x41, 0x54, 0x54, 0x49, 0x5f, 0x42, 0x53, 0x5f, 0x52, 0x45, 0x51, 0x10, 0x05, 0x12,
0x1b, 0x0a, 0x17, 0x43, 0x4d, 0x44, 0x5f, 0x53, 0x5f, 0x54, 0x45, 0x45, 0x4e, 0x50, 0x41, 0x54,
0x54, 0x49, 0x5f, 0x42, 0x53, 0x5f, 0x52, 0x45, 0x53, 0x50, 0x10, 0x06, 0x12, 0x13, 0x0a, 0x0f,
0x43, 0x4d, 0x44, 0x5f, 0x53, 0x5f, 0x41, 0x42, 0x5f, 0x42, 0x53, 0x5f, 0x52, 0x45, 0x51, 0x10,
0x07, 0x12, 0x14, 0x0a, 0x10, 0x43, 0x4d, 0x44, 0x5f, 0x53, 0x5f, 0x41, 0x42, 0x5f, 0x42, 0x53,
0x5f, 0x52, 0x45, 0x53, 0x50, 0x10, 0x08, 0x12, 0x13, 0x0a, 0x0f, 0x43, 0x4d, 0x44, 0x5f, 0x53,
0x5f, 0x46, 0x54, 0x5f, 0x42, 0x53, 0x5f, 0x52, 0x45, 0x51, 0x10, 0x09, 0x12, 0x14, 0x0a, 0x10,
0x43, 0x4d, 0x44, 0x5f, 0x53, 0x5f, 0x46, 0x54, 0x5f, 0x42, 0x53, 0x5f, 0x52, 0x45, 0x53, 0x50,
0x10, 0x0a, 0x12, 0x1c, 0x0a, 0x18, 0x43, 0x4d, 0x44, 0x5f, 0x53, 0x5f, 0x53, 0x45, 0x56, 0x45,
0x4e, 0x55, 0x50, 0x44, 0x4f, 0x57, 0x4e, 0x5f, 0x42, 0x53, 0x5f, 0x52, 0x45, 0x51, 0x10, 0x0b,
0x12, 0x1d, 0x0a, 0x19, 0x43, 0x4d, 0x44, 0x5f, 0x53, 0x5f, 0x53, 0x45, 0x56, 0x45, 0x4e, 0x55,
0x50, 0x44, 0x4f, 0x57, 0x4e, 0x5f, 0x42, 0x53, 0x5f, 0x52, 0x45, 0x53, 0x50, 0x10, 0x0c, 0x12,
0x1c, 0x0a, 0x18, 0x43, 0x4d, 0x44, 0x5f, 0x53, 0x5f, 0x44, 0x52, 0x41, 0x47, 0x4f, 0x4e, 0x54,
0x49, 0x47, 0x45, 0x52, 0x5f, 0x42, 0x53, 0x5f, 0x52, 0x45, 0x51, 0x10, 0x0d, 0x12, 0x1d, 0x0a,
0x19, 0x43, 0x4d, 0x44, 0x5f, 0x53, 0x5f, 0x44, 0x52, 0x41, 0x47, 0x4f, 0x4e, 0x54, 0x49, 0x47,
0x45, 0x52, 0x5f, 0x42, 0x53, 0x5f, 0x52, 0x45, 0x53, 0x50, 0x10, 0x0e, 0x12, 0x18, 0x0a, 0x14,
0x43, 0x4d, 0x44, 0x5f, 0x53, 0x5f, 0x52, 0x41, 0x50, 0x49, 0x44, 0x54, 0x50, 0x5f, 0x42, 0x53,
0x5f, 0x52, 0x45, 0x51, 0x10, 0x0f, 0x12, 0x19, 0x0a, 0x15, 0x43, 0x4d, 0x44, 0x5f, 0x53, 0x5f,
0x52, 0x41, 0x50, 0x49, 0x44, 0x54, 0x50, 0x5f, 0x42, 0x53, 0x5f, 0x52, 0x45, 0x53, 0x50, 0x10,
0x10, 0x12, 0x19, 0x0a, 0x15, 0x43, 0x4d, 0x44, 0x5f, 0x53, 0x5f, 0x42, 0x4c, 0x41, 0x43, 0x4b,
0x52, 0x45, 0x44, 0x5f, 0x42, 0x53, 0x5f, 0x52, 0x45, 0x51, 0x10, 0x11, 0x12, 0x1a, 0x0a, 0x16,
0x43, 0x4d, 0x44, 0x5f, 0x53, 0x5f, 0x42, 0x4c, 0x41, 0x43, 0x4b, 0x52, 0x45, 0x44, 0x5f, 0x42,
0x53, 0x5f, 0x52, 0x45, 0x53, 0x50, 0x10, 0x12, 0x12, 0x1c, 0x0a, 0x18, 0x43, 0x4d, 0x44, 0x5f,
0x53, 0x5f, 0x48, 0x4f, 0x52, 0x53, 0x45, 0x52, 0x41, 0x43, 0x49, 0x4e, 0x47, 0x5f, 0x42, 0x53,
0x5f, 0x52, 0x45, 0x51, 0x10, 0x13, 0x12, 0x1d, 0x0a, 0x19, 0x43, 0x4d, 0x44, 0x5f, 0x53, 0x5f,
0x48, 0x4f, 0x52, 0x53, 0x45, 0x52, 0x41, 0x43, 0x49, 0x4e, 0x47, 0x5f, 0x42, 0x53, 0x5f, 0x52,
0x45, 0x53, 0x50, 0x10, 0x14, 0x12, 0x13, 0x0a, 0x0f, 0x43, 0x4d, 0x44, 0x5f, 0x53, 0x5f, 0x4a,
0x4d, 0x5f, 0x42, 0x53, 0x5f, 0x52, 0x45, 0x51, 0x10, 0x15, 0x12, 0x14, 0x0a, 0x10, 0x43, 0x4d,
0x44, 0x5f, 0x53, 0x5f, 0x4a, 0x4d, 0x5f, 0x42, 0x53, 0x5f, 0x52, 0x45, 0x53, 0x50, 0x10, 0x16,
0x12, 0x16, 0x0a, 0x12, 0x43, 0x4d, 0x44, 0x5f, 0x53, 0x5f, 0x42, 0x41, 0x43, 0x43, 0x41, 0x52,
0x41, 0x54, 0x5f, 0x52, 0x45, 0x51, 0x10, 0x17, 0x12, 0x17, 0x0a, 0x13, 0x43, 0x4d, 0x44, 0x5f,
0x53, 0x5f, 0x42, 0x41, 0x43, 0x43, 0x41, 0x52, 0x41, 0x54, 0x5f, 0x52, 0x45, 0x53, 0x50, 0x10,
0x18, 0x2a, 0x90, 0x02, 0x0a, 0x0e, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x4d, 0x61, 0x74, 0x63,
0x68, 0x43, 0x6d, 0x64, 0x12, 0x15, 0x0a, 0x11, 0x43, 0x4d, 0x44, 0x5f, 0x4d, 0x41, 0x54, 0x43,
0x48, 0x5f, 0x49, 0x4e, 0x56, 0x41, 0x4c, 0x49, 0x44, 0x10, 0x00, 0x12, 0x19, 0x0a, 0x15, 0x43,
0x4d, 0x44, 0x5f, 0x47, 0x45, 0x54, 0x5f, 0x47, 0x41, 0x4d, 0x45, 0x5f, 0x4b, 0x49, 0x4e, 0x44,
0x5f, 0x52, 0x45, 0x51, 0x10, 0x01, 0x12, 0x1a, 0x0a, 0x16, 0x43, 0x4d, 0x44, 0x5f, 0x47, 0x45,
0x54, 0x5f, 0x47, 0x41, 0x4d, 0x45, 0x5f, 0x4b, 0x49, 0x4e, 0x44, 0x5f, 0x52, 0x45, 0x53, 0x50,
0x10, 0x02, 0x12, 0x15, 0x0a, 0x11, 0x43, 0x4d, 0x44, 0x5f, 0x47, 0x45, 0x54, 0x5f, 0x52, 0x4f,
0x4f, 0x4d, 0x53, 0x5f, 0x52, 0x45, 0x51, 0x10, 0x03, 0x12, 0x16, 0x0a, 0x12, 0x43, 0x4d, 0x44,
0x5f, 0x47, 0x45, 0x54, 0x5f, 0x52, 0x4f, 0x4f, 0x4d, 0x53, 0x5f, 0x52, 0x45, 0x53, 0x50, 0x10,
0x04, 0x12, 0x11, 0x0a, 0x0d, 0x43, 0x4d, 0x44, 0x5f, 0x4d, 0x41, 0x54, 0x43, 0x48, 0x5f, 0x52,
0x45, 0x51, 0x10, 0x05, 0x12, 0x12, 0x0a, 0x0e, 0x43, 0x4d, 0x44, 0x5f, 0x4d, 0x41, 0x54, 0x43,
0x48, 0x5f, 0x52, 0x45, 0x53, 0x50, 0x10, 0x06, 0x12, 0x12, 0x0a, 0x0e, 0x43, 0x4d, 0x44, 0x5f,
0x4d, 0x41, 0x54, 0x43, 0x48, 0x5f, 0x4e, 0x41, 0x5f, 0x37, 0x10, 0x07, 0x12, 0x15, 0x0a, 0x11,
0x43, 0x4d, 0x44, 0x5f, 0x4d, 0x41, 0x54, 0x43, 0x48, 0x5f, 0x4f, 0x4b, 0x5f, 0x52, 0x45, 0x53,
0x50, 0x10, 0x08, 0x12, 0x16, 0x0a, 0x12, 0x43, 0x4d, 0x44, 0x5f, 0x45, 0x4e, 0x54, 0x45, 0x52,
0x5f, 0x47, 0x41, 0x4d, 0x45, 0x5f, 0x52, 0x45, 0x51, 0x10, 0x09, 0x12, 0x17, 0x0a, 0x13, 0x43,
0x4d, 0x44, 0x5f, 0x45, 0x4e, 0x54, 0x45, 0x52, 0x5f, 0x47, 0x41, 0x4d, 0x45, 0x5f, 0x52, 0x45,
0x53, 0x50, 0x10, 0x0a, 0x2a, 0xc7, 0x02, 0x0a, 0x08, 0x47, 0x61, 0x6d, 0x65, 0x4b, 0x69, 0x6e,
0x64, 0x12, 0x0b, 0x0a, 0x07, 0x49, 0x4e, 0x56, 0x41, 0x4c, 0x49, 0x44, 0x10, 0x00, 0x12, 0x13,
0x0a, 0x0f, 0x47, 0x41, 0x4d, 0x45, 0x5f, 0x4b, 0x49, 0x4e, 0x44, 0x5f, 0x52, 0x75, 0x6d, 0x6d,
0x79, 0x10, 0x01, 0x12, 0x18, 0x0a, 0x14, 0x47, 0x41, 0x4d, 0x45, 0x5f, 0x4b, 0x49, 0x4e, 0x44,
0x5f, 0x52, 0x75, 0x6d, 0x6d, 0x79, 0x5f, 0x70, 0x6f, 0x6f, 0x6c, 0x10, 0x02, 0x12, 0x16, 0x0a,
0x12, 0x47, 0x41, 0x4d, 0x45, 0x5f, 0x4b, 0x49, 0x4e, 0x44, 0x5f, 0x52, 0x75, 0x6d, 0x6d, 0x79,
0x5f, 0x31, 0x30, 0x10, 0x03, 0x12, 0x16, 0x0a, 0x12, 0x47, 0x41, 0x4d, 0x45, 0x5f, 0x4b, 0x49,
0x4e, 0x44, 0x5f, 0x54, 0x45, 0x45, 0x50, 0x41, 0x54, 0x54, 0x49, 0x10, 0x04, 0x12, 0x10, 0x0a,
0x0c, 0x47, 0x41, 0x4d, 0x45, 0x5f, 0x4b, 0x49, 0x4e, 0x44, 0x5f, 0x41, 0x42, 0x10, 0x05, 0x12,
0x15, 0x0a, 0x11, 0x47, 0x41, 0x4d, 0x45, 0x5f, 0x4b, 0x49, 0x4e, 0x44, 0x5f, 0x53, 0x65, 0x76,
0x65, 0x6e, 0x55, 0x44, 0x10, 0x06, 0x12, 0x1c, 0x0a, 0x18, 0x47, 0x41, 0x4d, 0x45, 0x5f, 0x4b,
0x49, 0x4e, 0x44, 0x5f, 0x52, 0x61, 0x70, 0x69, 0x64, 0x54, 0x65, 0x65, 0x6e, 0x61, 0x70, 0x74,
0x74, 0x69, 0x10, 0x07, 0x12, 0x19, 0x0a, 0x15, 0x47, 0x41, 0x4d, 0x45, 0x5f, 0x4b, 0x49, 0x4e,
0x44, 0x5f, 0x44, 0x72, 0x61, 0x67, 0x6f, 0x6e, 0x54, 0x69, 0x67, 0x65, 0x72, 0x10, 0x08, 0x12,
0x16, 0x0a, 0x12, 0x47, 0x41, 0x4d, 0x45, 0x5f, 0x4b, 0x49, 0x4e, 0x44, 0x5f, 0x42, 0x6c, 0x61,
0x63, 0x6b, 0x52, 0x65, 0x64, 0x10, 0x09, 0x12, 0x19, 0x0a, 0x15, 0x47, 0x41, 0x4d, 0x45, 0x5f,
0x4b, 0x49, 0x4e, 0x44, 0x5f, 0x48, 0x6f, 0x72, 0x73, 0x65, 0x52, 0x61, 0x63, 0x69, 0x6e, 0x67,
0x10, 0x0a, 0x12, 0x10, 0x0a, 0x0c, 0x47, 0x41, 0x4d, 0x45, 0x5f, 0x4b, 0x49, 0x4e, 0x44, 0x5f,
0x4a, 0x4d, 0x10, 0x0b, 0x12, 0x16, 0x0a, 0x12, 0x47, 0x41, 0x4d, 0x45, 0x5f, 0x4b, 0x49, 0x4e,
0x44, 0x5f, 0x42, 0x41, 0x43, 0x43, 0x41, 0x52, 0x41, 0x54, 0x10, 0x0c, 0x12, 0x10, 0x0a, 0x0c,
0x47, 0x41, 0x4d, 0x45, 0x5f, 0x4b, 0x49, 0x4e, 0x44, 0x5f, 0x46, 0x54, 0x10, 0x14, 0x42, 0x19,
0x5a, 0x17, 0x2e, 0x2f, 0x63, 0x6f, 0x6d, 0x2f, 0x63, 0x77, 0x2f, 0x63, 0x68, 0x65, 0x73, 0x73,
0x2f, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f,
0x33,
}
var (
file_platform_proto_rawDescOnce sync.Once
file_platform_proto_rawDescData = file_platform_proto_rawDesc
)
func file_platform_proto_rawDescGZIP() []byte {
file_platform_proto_rawDescOnce.Do(func() {
file_platform_proto_rawDescData = protoimpl.X.CompressGZIP(file_platform_proto_rawDescData)
})
return file_platform_proto_rawDescData
}
var file_platform_proto_enumTypes = make([]protoimpl.EnumInfo, 7)
var file_platform_proto_msgTypes = make([]protoimpl.MessageInfo, 33)
var file_platform_proto_goTypes = []interface{}{
(ServerType)(0), // 0: com.cw.chess.platform.ServerType
(ServerGatewayCmd)(0), // 1: com.cw.chess.platform.ServerGatewayCmd
(ServerCommonCmd)(0), // 2: com.cw.chess.platform.ServerCommonCmd
(CurrencyKind)(0), // 3: com.cw.chess.platform.CurrencyKind
(Common_S_Cmd)(0), // 4: com.cw.chess.platform.Common_S_Cmd
(ServerMatchCmd)(0), // 5: com.cw.chess.platform.ServerMatchCmd
(GameKind)(0), // 6: com.cw.chess.platform.GameKind
(*GameUser)(nil), // 7: com.cw.chess.platform.GameUser
(*CommonResponse)(nil), // 8: com.cw.chess.platform.CommonResponse
(*LoginRequest)(nil), // 9: com.cw.chess.platform.LoginRequest
(*LoginResponse)(nil), // 10: com.cw.chess.platform.LoginResponse
(*GetPlayerBalanceResponse)(nil), // 11: com.cw.chess.platform.GetPlayerBalanceResponse
(*MessageToUserResp)(nil), // 12: com.cw.chess.platform.MessageToUserResp
(*UserAttri)(nil), // 13: com.cw.chess.platform.UserAttri
(*MSG_GET_USER_ATTRI_REQ)(nil), // 14: com.cw.chess.platform.MSG_GET_USER_ATTRI_REQ
(*MSG_GET_USER_ATTRI_RESP)(nil), // 15: com.cw.chess.platform.MSG_GET_USER_ATTRI_RESP
(*MSG_UPDATE_USER_ATTRI_REQ)(nil), // 16: com.cw.chess.platform.MSG_UPDATE_USER_ATTRI_REQ
(*MSG_GET_BONUS_RESP)(nil), // 17: com.cw.chess.platform.MSG_GET_BONUS_RESP
(*BS_RECHARGE)(nil), // 18: com.cw.chess.platform.BS_RECHARGE
(*BS_GAME)(nil), // 19: com.cw.chess.platform.BS_GAME
(*MSG_BS_DATA)(nil), // 20: com.cw.chess.platform.MSG_BS_DATA
(*MSG_MSG_QUE_DATA)(nil), // 21: com.cw.chess.platform.MSG_MSG_QUE_DATA
(*MSG_MSG_QUE)(nil), // 22: com.cw.chess.platform.MSG_MSG_QUE
(*GameLevelDesc)(nil), // 23: com.cw.chess.platform.GameLevelDesc
(*RummyLevelDesc)(nil), // 24: com.cw.chess.platform.RummyLevelDesc
(*TeepattiLevelDesc)(nil), // 25: com.cw.chess.platform.TeepattiLevelDesc
(*ABLevelDesc)(nil), // 26: com.cw.chess.platform.ABLevelDesc
(*SevenUpdownLevelDesc)(nil), // 27: com.cw.chess.platform.SevenUpdownLevelDesc
(*RapidTeenpattiLevelDesc)(nil), // 28: com.cw.chess.platform.RapidTeenpattiLevelDesc
(*DragonTigerLevelDesc)(nil), // 29: com.cw.chess.platform.DragonTigerLevelDesc
(*BlackredLevelDesc)(nil), // 30: com.cw.chess.platform.BlackredLevelDesc
(*HorseracingDesc)(nil), // 31: com.cw.chess.platform.HorseracingDesc
(*JMLevelDesc)(nil), // 32: com.cw.chess.platform.JMLevelDesc
(*BaccaratLevelDesc)(nil), // 33: com.cw.chess.platform.BaccaratLevelDesc
(*GameKindRequest)(nil), // 34: com.cw.chess.platform.GameKindRequest
(*GameKindResponse)(nil), // 35: com.cw.chess.platform.GameKindResponse
(*MatchRequest)(nil), // 36: com.cw.chess.platform.MatchRequest
(*MatchResponse)(nil), // 37: com.cw.chess.platform.MatchResponse
(*MatchOKResponse)(nil), // 38: com.cw.chess.platform.MatchOKResponse
(*EnterGameRequest)(nil), // 39: com.cw.chess.platform.EnterGameRequest
}
var file_platform_proto_depIdxs = []int32{
3, // 0: com.cw.chess.platform.GetPlayerBalanceResponse.game_currency:type_name -> com.cw.chess.platform.CurrencyKind
13, // 1: com.cw.chess.platform.MSG_GET_USER_ATTRI_RESP.user_attris:type_name -> com.cw.chess.platform.UserAttri
13, // 2: com.cw.chess.platform.MSG_UPDATE_USER_ATTRI_REQ.user_attri:type_name -> com.cw.chess.platform.UserAttri
18, // 3: com.cw.chess.platform.MSG_BS_DATA.msg_recharge:type_name -> com.cw.chess.platform.BS_RECHARGE
19, // 4: com.cw.chess.platform.MSG_BS_DATA.msg_game:type_name -> com.cw.chess.platform.BS_GAME
21, // 5: com.cw.chess.platform.MSG_MSG_QUE.data_list:type_name -> com.cw.chess.platform.MSG_MSG_QUE_DATA
3, // 6: com.cw.chess.platform.GameLevelDesc.currency_kind:type_name -> com.cw.chess.platform.CurrencyKind
23, // 7: com.cw.chess.platform.RummyLevelDesc.game_level:type_name -> com.cw.chess.platform.GameLevelDesc
23, // 8: com.cw.chess.platform.TeepattiLevelDesc.game_level:type_name -> com.cw.chess.platform.GameLevelDesc
23, // 9: com.cw.chess.platform.ABLevelDesc.game_level:type_name -> com.cw.chess.platform.GameLevelDesc
23, // 10: com.cw.chess.platform.SevenUpdownLevelDesc.game_level:type_name -> com.cw.chess.platform.GameLevelDesc
23, // 11: com.cw.chess.platform.RapidTeenpattiLevelDesc.game_level:type_name -> com.cw.chess.platform.GameLevelDesc
23, // 12: com.cw.chess.platform.DragonTigerLevelDesc.game_level:type_name -> com.cw.chess.platform.GameLevelDesc
23, // 13: com.cw.chess.platform.BlackredLevelDesc.game_level:type_name -> com.cw.chess.platform.GameLevelDesc
23, // 14: com.cw.chess.platform.HorseracingDesc.game_level:type_name -> com.cw.chess.platform.GameLevelDesc
23, // 15: com.cw.chess.platform.JMLevelDesc.game_level:type_name -> com.cw.chess.platform.GameLevelDesc
23, // 16: com.cw.chess.platform.BaccaratLevelDesc.game_level:type_name -> com.cw.chess.platform.GameLevelDesc
6, // 17: com.cw.chess.platform.GameKindRequest.game_kind:type_name -> com.cw.chess.platform.GameKind
6, // 18: com.cw.chess.platform.GameKindResponse.game_kind:type_name -> com.cw.chess.platform.GameKind
24, // 19: com.cw.chess.platform.GameKindResponse.rummy_levels:type_name -> com.cw.chess.platform.RummyLevelDesc
25, // 20: com.cw.chess.platform.GameKindResponse.teepatti_levels:type_name -> com.cw.chess.platform.TeepattiLevelDesc
26, // 21: com.cw.chess.platform.GameKindResponse.ab_levels:type_name -> com.cw.chess.platform.ABLevelDesc
27, // 22: com.cw.chess.platform.GameKindResponse.sevenupdown_levels:type_name -> com.cw.chess.platform.SevenUpdownLevelDesc
28, // 23: com.cw.chess.platform.GameKindResponse.rapidteenpatti_levels:type_name -> com.cw.chess.platform.RapidTeenpattiLevelDesc
29, // 24: com.cw.chess.platform.GameKindResponse.dragontiger_levels:type_name -> com.cw.chess.platform.DragonTigerLevelDesc
30, // 25: com.cw.chess.platform.GameKindResponse.blackred_levels:type_name -> com.cw.chess.platform.BlackredLevelDesc
31, // 26: com.cw.chess.platform.GameKindResponse.horseracing_levels:type_name -> com.cw.chess.platform.HorseracingDesc
32, // 27: com.cw.chess.platform.GameKindResponse.jm_levels:type_name -> com.cw.chess.platform.JMLevelDesc
33, // 28: com.cw.chess.platform.GameKindResponse.baccarat_levels:type_name -> com.cw.chess.platform.BaccaratLevelDesc
6, // 29: com.cw.chess.platform.MatchRequest.game_kind:type_name -> com.cw.chess.platform.GameKind
6, // 30: com.cw.chess.platform.MatchOKResponse.game_kind:type_name -> com.cw.chess.platform.GameKind
6, // 31: com.cw.chess.platform.EnterGameRequest.game_kind:type_name -> com.cw.chess.platform.GameKind
32, // [32:32] is the sub-list for method output_type
32, // [32:32] is the sub-list for method input_type
32, // [32:32] is the sub-list for extension type_name
32, // [32:32] is the sub-list for extension extendee
0, // [0:32] is the sub-list for field type_name
}
func init() { file_platform_proto_init() }
func file_platform_proto_init() {
if File_platform_proto != nil {
return
}
if !protoimpl.UnsafeEnabled {
file_platform_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*GameUser); i {
case 0:
return &v.state
case 1:
return &v.sizeCache
case 2:
return &v.unknownFields
default:
return nil
}
}
file_platform_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*CommonResponse); i {
case 0:
return &v.state
case 1:
return &v.sizeCache
case 2:
return &v.unknownFields
default:
return nil
}
}
file_platform_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*LoginRequest); i {
case 0:
return &v.state
case 1:
return &v.sizeCache
case 2:
return &v.unknownFields
default:
return nil
}
}
file_platform_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*LoginResponse); i {
case 0:
return &v.state
case 1:
return &v.sizeCache
case 2:
return &v.unknownFields
default:
return nil
}
}
file_platform_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*GetPlayerBalanceResponse); i {
case 0:
return &v.state
case 1:
return &v.sizeCache
case 2:
return &v.unknownFields
default:
return nil
}
}
file_platform_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*MessageToUserResp); i {
case 0:
return &v.state
case 1:
return &v.sizeCache
case 2:
return &v.unknownFields
default:
return nil
}
}
file_platform_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*UserAttri); i {
case 0:
return &v.state
case 1:
return &v.sizeCache
case 2:
return &v.unknownFields
default:
return nil
}
}
file_platform_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*MSG_GET_USER_ATTRI_REQ); i {
case 0:
return &v.state
case 1:
return &v.sizeCache
case 2:
return &v.unknownFields
default:
return nil
}
}
file_platform_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*MSG_GET_USER_ATTRI_RESP); i {
case 0:
return &v.state
case 1:
return &v.sizeCache
case 2:
return &v.unknownFields
default:
return nil
}
}
file_platform_proto_msgTypes[9].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*MSG_UPDATE_USER_ATTRI_REQ); i {
case 0:
return &v.state
case 1:
return &v.sizeCache
case 2:
return &v.unknownFields
default:
return nil
}
}
file_platform_proto_msgTypes[10].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*MSG_GET_BONUS_RESP); i {
case 0:
return &v.state
case 1:
return &v.sizeCache
case 2:
return &v.unknownFields
default:
return nil
}
}
file_platform_proto_msgTypes[11].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*BS_RECHARGE); i {
case 0:
return &v.state
case 1:
return &v.sizeCache
case 2:
return &v.unknownFields
default:
return nil
}
}
file_platform_proto_msgTypes[12].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*BS_GAME); i {
case 0:
return &v.state
case 1:
return &v.sizeCache
case 2:
return &v.unknownFields
default:
return nil
}
}
file_platform_proto_msgTypes[13].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*MSG_BS_DATA); i {
case 0:
return &v.state
case 1:
return &v.sizeCache
case 2:
return &v.unknownFields
default:
return nil
}
}
file_platform_proto_msgTypes[14].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*MSG_MSG_QUE_DATA); i {
case 0:
return &v.state
case 1:
return &v.sizeCache
case 2:
return &v.unknownFields
default:
return nil
}
}
file_platform_proto_msgTypes[15].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*MSG_MSG_QUE); i {
case 0:
return &v.state
case 1:
return &v.sizeCache
case 2:
return &v.unknownFields
default:
return nil
}
}
file_platform_proto_msgTypes[16].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*GameLevelDesc); i {
case 0:
return &v.state
case 1:
return &v.sizeCache
case 2:
return &v.unknownFields
default:
return nil
}
}
file_platform_proto_msgTypes[17].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*RummyLevelDesc); i {
case 0:
return &v.state
case 1:
return &v.sizeCache
case 2:
return &v.unknownFields
default:
return nil
}
}
file_platform_proto_msgTypes[18].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*TeepattiLevelDesc); i {
case 0:
return &v.state
case 1:
return &v.sizeCache
case 2:
return &v.unknownFields
default:
return nil
}
}
file_platform_proto_msgTypes[19].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*ABLevelDesc); i {
case 0:
return &v.state
case 1:
return &v.sizeCache
case 2:
return &v.unknownFields
default:
return nil
}
}
file_platform_proto_msgTypes[20].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*SevenUpdownLevelDesc); i {
case 0:
return &v.state
case 1:
return &v.sizeCache
case 2:
return &v.unknownFields
default:
return nil
}
}
file_platform_proto_msgTypes[21].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*RapidTeenpattiLevelDesc); i {
case 0:
return &v.state
case 1:
return &v.sizeCache
case 2:
return &v.unknownFields
default:
return nil
}
}
file_platform_proto_msgTypes[22].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*DragonTigerLevelDesc); i {
case 0:
return &v.state
case 1:
return &v.sizeCache
case 2:
return &v.unknownFields
default:
return nil
}
}
file_platform_proto_msgTypes[23].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*BlackredLevelDesc); i {
case 0:
return &v.state
case 1:
return &v.sizeCache
case 2:
return &v.unknownFields
default:
return nil
}
}
file_platform_proto_msgTypes[24].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*HorseracingDesc); i {
case 0:
return &v.state
case 1:
return &v.sizeCache
case 2:
return &v.unknownFields
default:
return nil
}
}
file_platform_proto_msgTypes[25].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*JMLevelDesc); i {
case 0:
return &v.state
case 1:
return &v.sizeCache
case 2:
return &v.unknownFields
default:
return nil
}
}
file_platform_proto_msgTypes[26].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*BaccaratLevelDesc); i {
case 0:
return &v.state
case 1:
return &v.sizeCache
case 2:
return &v.unknownFields
default:
return nil
}
}
file_platform_proto_msgTypes[27].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*GameKindRequest); i {
case 0:
return &v.state
case 1:
return &v.sizeCache
case 2:
return &v.unknownFields
default:
return nil
}
}
file_platform_proto_msgTypes[28].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*GameKindResponse); i {
case 0:
return &v.state
case 1:
return &v.sizeCache
case 2:
return &v.unknownFields
default:
return nil
}
}
file_platform_proto_msgTypes[29].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*MatchRequest); i {
case 0:
return &v.state
case 1:
return &v.sizeCache
case 2:
return &v.unknownFields
default:
return nil
}
}
file_platform_proto_msgTypes[30].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*MatchResponse); i {
case 0:
return &v.state
case 1:
return &v.sizeCache
case 2:
return &v.unknownFields
default:
return nil
}
}
file_platform_proto_msgTypes[31].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*MatchOKResponse); i {
case 0:
return &v.state
case 1:
return &v.sizeCache
case 2:
return &v.unknownFields
default:
return nil
}
}
file_platform_proto_msgTypes[32].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*EnterGameRequest); i {
case 0:
return &v.state
case 1:
return &v.sizeCache
case 2:
return &v.unknownFields
default:
return nil
}
}
}
type x struct{}
out := protoimpl.TypeBuilder{
File: protoimpl.DescBuilder{
GoPackagePath: reflect.TypeOf(x{}).PkgPath(),
RawDescriptor: file_platform_proto_rawDesc,
NumEnums: 7,
NumMessages: 33,
NumExtensions: 0,
NumServices: 0,
},
GoTypes: file_platform_proto_goTypes,
DependencyIndexes: file_platform_proto_depIdxs,
EnumInfos: file_platform_proto_enumTypes,
MessageInfos: file_platform_proto_msgTypes,
}.Build()
File_platform_proto = out.File
file_platform_proto_rawDesc = nil
file_platform_proto_goTypes = nil
file_platform_proto_depIdxs = nil
}
mqant_rpb.pb.go
// Code generated by protoc-gen-go. DO NOT EDIT.
// versions:
// protoc-gen-go v1.26.0
// protoc v3.7.0
// source: mqant_rpc.proto
package main
import (
protoreflect "google.golang.org/protobuf/reflect/protoreflect"
protoimpl "google.golang.org/protobuf/runtime/protoimpl"
reflect "reflect"
sync "sync"
)
const (
// Verify that this generated code is sufficiently up-to-date.
_ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion)
// Verify that runtime/protoimpl is sufficiently up-to-date.
_ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20)
)
type RPCInfo struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
Cid string `protobuf:"bytes,1,opt,name=Cid,proto3" json:"Cid,omitempty"`
Fn string `protobuf:"bytes,2,opt,name=Fn,proto3" json:"Fn,omitempty"`
ReplyTo string `protobuf:"bytes,3,opt,name=ReplyTo,proto3" json:"ReplyTo,omitempty"`
Track string `protobuf:"bytes,4,opt,name=track,proto3" json:"track,omitempty"`
Expired int64 `protobuf:"varint,5,opt,name=Expired,proto3" json:"Expired,omitempty"`
Reply bool `protobuf:"varint,6,opt,name=Reply,proto3" json:"Reply,omitempty"`
ArgsType []string `protobuf:"bytes,7,rep,name=ArgsType,proto3" json:"ArgsType,omitempty"`
Args [][]byte `protobuf:"bytes,8,rep,name=Args,proto3" json:"Args,omitempty"`
Caller string `protobuf:"bytes,9,opt,name=caller,proto3" json:"caller,omitempty"`
Hostname string `protobuf:"bytes,10,opt,name=hostname,proto3" json:"hostname,omitempty"`
}
func (x *RPCInfo) Reset() {
*x = RPCInfo{}
if protoimpl.UnsafeEnabled {
mi := &file_mqant_rpc_proto_msgTypes[0]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
}
func (x *RPCInfo) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*RPCInfo) ProtoMessage() {}
func (x *RPCInfo) ProtoReflect() protoreflect.Message {
mi := &file_mqant_rpc_proto_msgTypes[0]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
}
return ms
}
return mi.MessageOf(x)
}
// Deprecated: Use RPCInfo.ProtoReflect.Descriptor instead.
func (*RPCInfo) Descriptor() ([]byte, []int) {
return file_mqant_rpc_proto_rawDescGZIP(), []int{0}
}
func (x *RPCInfo) GetCid() string {
if x != nil {
return x.Cid
}
return ""
}
func (x *RPCInfo) GetFn() string {
if x != nil {
return x.Fn
}
return ""
}
func (x *RPCInfo) GetReplyTo() string {
if x != nil {
return x.ReplyTo
}
return ""
}
func (x *RPCInfo) GetTrack() string {
if x != nil {
return x.Track
}
return ""
}
func (x *RPCInfo) GetExpired() int64 {
if x != nil {
return x.Expired
}
return 0
}
func (x *RPCInfo) GetReply() bool {
if x != nil {
return x.Reply
}
return false
}
func (x *RPCInfo) GetArgsType() []string {
if x != nil {
return x.ArgsType
}
return nil
}
func (x *RPCInfo) GetArgs() [][]byte {
if x != nil {
return x.Args
}
return nil
}
func (x *RPCInfo) GetCaller() string {
if x != nil {
return x.Caller
}
return ""
}
func (x *RPCInfo) GetHostname() string {
if x != nil {
return x.Hostname
}
return ""
}
type ResultInfo struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
Cid string `protobuf:"bytes,1,opt,name=Cid,proto3" json:"Cid,omitempty"`
Error string `protobuf:"bytes,2,opt,name=Error,proto3" json:"Error,omitempty"`
ResultType string `protobuf:"bytes,4,opt,name=ResultType,proto3" json:"ResultType,omitempty"`
Result []byte `protobuf:"bytes,5,opt,name=Result,proto3" json:"Result,omitempty"`
}
func (x *ResultInfo) Reset() {
*x = ResultInfo{}
if protoimpl.UnsafeEnabled {
mi := &file_mqant_rpc_proto_msgTypes[1]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
}
func (x *ResultInfo) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*ResultInfo) ProtoMessage() {}
func (x *ResultInfo) ProtoReflect() protoreflect.Message {
mi := &file_mqant_rpc_proto_msgTypes[1]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
}
return ms
}
return mi.MessageOf(x)
}
// Deprecated: Use ResultInfo.ProtoReflect.Descriptor instead.
func (*ResultInfo) Descriptor() ([]byte, []int) {
return file_mqant_rpc_proto_rawDescGZIP(), []int{1}
}
func (x *ResultInfo) GetCid() string {
if x != nil {
return x.Cid
}
return ""
}
func (x *ResultInfo) GetError() string {
if x != nil {
return x.Error
}
return ""
}
func (x *ResultInfo) GetResultType() string {
if x != nil {
return x.ResultType
}
return ""
}
func (x *ResultInfo) GetResult() []byte {
if x != nil {
return x.Result
}
return nil
}
var File_mqant_rpc_proto protoreflect.FileDescriptor
var file_mqant_rpc_proto_rawDesc = []byte{
0x0a, 0x0f, 0x6d, 0x71, 0x61, 0x6e, 0x74, 0x5f, 0x72, 0x70, 0x63, 0x2e, 0x70, 0x72, 0x6f, 0x74,
0x6f, 0x12, 0x05, 0x72, 0x70, 0x63, 0x70, 0x62, 0x22, 0xef, 0x01, 0x0a, 0x07, 0x52, 0x50, 0x43,
0x49, 0x6e, 0x66, 0x6f, 0x12, 0x10, 0x0a, 0x03, 0x43, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28,
0x09, 0x52, 0x03, 0x43, 0x69, 0x64, 0x12, 0x0e, 0x0a, 0x02, 0x46, 0x6e, 0x18, 0x02, 0x20, 0x01,
0x28, 0x09, 0x52, 0x02, 0x46, 0x6e, 0x12, 0x18, 0x0a, 0x07, 0x52, 0x65, 0x70, 0x6c, 0x79, 0x54,
0x6f, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x52, 0x65, 0x70, 0x6c, 0x79, 0x54, 0x6f,
0x12, 0x14, 0x0a, 0x05, 0x74, 0x72, 0x61, 0x63, 0x6b, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52,
0x05, 0x74, 0x72, 0x61, 0x63, 0x6b, 0x12, 0x18, 0x0a, 0x07, 0x45, 0x78, 0x70, 0x69, 0x72, 0x65,
0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, 0x45, 0x78, 0x70, 0x69, 0x72, 0x65, 0x64,
0x12, 0x14, 0x0a, 0x05, 0x52, 0x65, 0x70, 0x6c, 0x79, 0x18, 0x06, 0x20, 0x01, 0x28, 0x08, 0x52,
0x05, 0x52, 0x65, 0x70, 0x6c, 0x79, 0x12, 0x1a, 0x0a, 0x08, 0x41, 0x72, 0x67, 0x73, 0x54, 0x79,
0x70, 0x65, 0x18, 0x07, 0x20, 0x03, 0x28, 0x09, 0x52, 0x08, 0x41, 0x72, 0x67, 0x73, 0x54, 0x79,
0x70, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x41, 0x72, 0x67, 0x73, 0x18, 0x08, 0x20, 0x03, 0x28, 0x0c,
0x52, 0x04, 0x41, 0x72, 0x67, 0x73, 0x12, 0x16, 0x0a, 0x06, 0x63, 0x61, 0x6c, 0x6c, 0x65, 0x72,
0x18, 0x09, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x63, 0x61, 0x6c, 0x6c, 0x65, 0x72, 0x12, 0x1a,
0x0a, 0x08, 0x68, 0x6f, 0x73, 0x74, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x09,
0x52, 0x08, 0x68, 0x6f, 0x73, 0x74, 0x6e, 0x61, 0x6d, 0x65, 0x22, 0x6c, 0x0a, 0x0a, 0x52, 0x65,
0x73, 0x75, 0x6c, 0x74, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x10, 0x0a, 0x03, 0x43, 0x69, 0x64, 0x18,
0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x43, 0x69, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x45, 0x72,
0x72, 0x6f, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x45, 0x72, 0x72, 0x6f, 0x72,
0x12, 0x1e, 0x0a, 0x0a, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x54, 0x79, 0x70, 0x65, 0x18, 0x04,
0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x54, 0x79, 0x70, 0x65,
0x12, 0x16, 0x0a, 0x06, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0c,
0x52, 0x06, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x42, 0x25, 0x5a, 0x23, 0x67, 0x69, 0x74, 0x68,
0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x6c, 0x69, 0x61, 0x6e, 0x67, 0x64, 0x61, 0x73, 0x2f,
0x6d, 0x71, 0x61, 0x6e, 0x74, 0x2f, 0x72, 0x70, 0x63, 0x2f, 0x72, 0x70, 0x63, 0x70, 0x62, 0x62,
0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
}
var (
file_mqant_rpc_proto_rawDescOnce sync.Once
file_mqant_rpc_proto_rawDescData = file_mqant_rpc_proto_rawDesc
)
func file_mqant_rpc_proto_rawDescGZIP() []byte {
file_mqant_rpc_proto_rawDescOnce.Do(func() {
file_mqant_rpc_proto_rawDescData = protoimpl.X.CompressGZIP(file_mqant_rpc_proto_rawDescData)
})
return file_mqant_rpc_proto_rawDescData
}
var file_mqant_rpc_proto_msgTypes = make([]protoimpl.MessageInfo, 2)
var file_mqant_rpc_proto_goTypes = []interface{}{
(*RPCInfo)(nil), // 0: rpcpb.RPCInfo
(*ResultInfo)(nil), // 1: rpcpb.ResultInfo
}
var file_mqant_rpc_proto_depIdxs = []int32{
0, // [0:0] is the sub-list for method output_type
0, // [0:0] is the sub-list for method input_type
0, // [0:0] is the sub-list for extension type_name
0, // [0:0] is the sub-list for extension extendee
0, // [0:0] is the sub-list for field type_name
}
func init() { file_mqant_rpc_proto_init() }
func file_mqant_rpc_proto_init() {
if File_mqant_rpc_proto != nil {
return
}
if !protoimpl.UnsafeEnabled {
file_mqant_rpc_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*RPCInfo); i {
case 0:
return &v.state
case 1:
return &v.sizeCache
case 2:
return &v.unknownFields
default:
return nil
}
}
file_mqant_rpc_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*ResultInfo); i {
case 0:
return &v.state
case 1:
return &v.sizeCache
case 2:
return &v.unknownFields
default:
return nil
}
}
}
type x struct{}
out := protoimpl.TypeBuilder{
File: protoimpl.DescBuilder{
GoPackagePath: reflect.TypeOf(x{}).PkgPath(),
RawDescriptor: file_mqant_rpc_proto_rawDesc,
NumEnums: 0,
NumMessages: 2,
NumExtensions: 0,
NumServices: 0,
},
GoTypes: file_mqant_rpc_proto_goTypes,
DependencyIndexes: file_mqant_rpc_proto_depIdxs,
MessageInfos: file_mqant_rpc_proto_msgTypes,
}.Build()
File_mqant_rpc_proto = out.File
file_mqant_rpc_proto_rawDesc = nil
file_mqant_rpc_proto_goTypes = nil
file_mqant_rpc_proto_depIdxs = nil
}
|