IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 网络协议 -> go加密二进制数据流并打包发通过websocket送给客户端 -> 正文阅读

[网络协议]go加密二进制数据流并打包发通过websocket送给客户端

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
}

  网络协议 最新文章
使用Easyswoole 搭建简单的Websoket服务
常见的数据通信方式有哪些?
Openssl 1024bit RSA算法---公私钥获取和处
HTTPS协议的密钥交换流程
《小白WEB安全入门》03. 漏洞篇
HttpRunner4.x 安装与使用
2021-07-04
手写RPC学习笔记
K8S高可用版本部署
mySQL计算IP地址范围
上一篇文章      下一篇文章      查看所有文章
加:2021-08-26 12:28:31  更:2021-08-26 12:29:20 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/25 21:33:02-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码