Commit 495e91422f95cee75b0cce25194f935654fe5f2a

Authored by zhangqijia
1 parent 8f6d9ea9

fix: 增加DisConnectRsp协议。增加测试工具

1   -Subproject commit 3b86cdcde67acc5d79e9bcd51bde67c667f69613
  1 +Subproject commit 5048930a93ad2f32939c0bfd14d83a87ffd816bb
... ...
Makefile
... ... @@ -49,6 +49,8 @@ excel:
49 49 -s all
50 50  
51 51 gen:proto excel
  52 +pull:
  53 + git submodule update --remote
52 54  
53 55  
54   -.PHONY: all build protos test cert plugin doc proto
55 56 \ No newline at end of file
  57 +.PHONY: all build protos test cert plugin doc proto pull
56 58 \ No newline at end of file
... ...
cmd/gameserver/action/RoleAction.go
... ... @@ -198,14 +198,8 @@ func RoleEndBattleRpc(role *models.RoleModel, msg components.IMessage) (int32, i
198 198 logger.Error("loginRpc err: %v", err)
199 199 return 1, nil
200 200 }
201   -
202   - //find chapter from table config
203 201 chapterInfo := csvdata.Get().TbRogueChapter.Get(req.ChapterId)
204   -
205   - //find chapter from role pass
206 202 chapterCount, first := role.Role.PassChapters[req.ChapterId]
207   -
208   - //find carbon
209 203 carbonInfo, ok := chapterInfo.Carbons[req.CarbonId]
210 204 if !ok {
211 205 logger.Error("carbonInfo not exists")
... ...
cmd/gameserver/main.go
... ... @@ -26,7 +26,7 @@ func main() {
26 26 return
27 27 }
28 28 go func() {
29   - err <- http.ListenAndServe(fmt.Sprintf("localhost:%d", common.GlobalSconf.DebugPort), nil)
  29 + err <- http.ListenAndServe(fmt.Sprintf(":%d", common.GlobalSconf.DebugPort), nil)
30 30 }()
31 31  
32 32 gm := service.NewGmServer(s, fmt.Sprintf(":%d", common.GlobalSconf.GMPort))
... ...
cmd/gameserver/service/agent.go
1 1 package service
2 2  
3 3 import (
  4 + "fmt"
4 5 "github.com/golang/protobuf/proto"
5 6 "math"
6 7 "pro2d/common"
... ... @@ -40,6 +41,7 @@ func (c *Agent) SetSchema(schema components.ISchema) {
40 41 c.Role.SetConn(c)
41 42  
42 43 c.Server.GetConnManage().AddRID(c.Role.Role.Id, c.IConnection.GetID())
  44 + c.Server.GetConnManage().AddUID(c.Role.Role.Uid, c.IConnection.GetID())
43 45 }
44 46  
45 47 func (c *Agent) GetSchema() components.ISchema {
... ... @@ -69,7 +71,18 @@ func (c *Agent) OnLoginQuery(msg components.IMessage) (int32, proto.Message) {
69 71 return 1, nil
70 72 }
71 73  
72   - role := models.RoleExistByUid(req.Token)
  74 + uid := req.Token
  75 +
  76 + // 判断是否已经登录 ,挤掉,断开连接
  77 + conn := c.Server.GetConnManage().GetConnByUID(uid)
  78 + logger.Debug(conn)
  79 + if conn != nil {
  80 + logger.Debug("挤掉。。。。。。。。")
  81 + conn.SendSuccess(uint32(pb.ProtoCode_DisConnectRsp), nil)
  82 + conn.Stop()
  83 + }
  84 +
  85 + role := models.RoleExistByUid(uid)
73 86 if role == nil {
74 87 return 2, nil
75 88 }
... ... @@ -85,50 +98,46 @@ func (c *Agent) OnLoginQuery(msg components.IMessage) (int32, proto.Message) {
85 98 return 0, protoMsg
86 99 }
87 100  
88   -func (c *Agent) SendMsg(errCode int32, cmd uint32, msg interface{}) {
  101 +func (c *Agent) SendMsg(errCode int32, cmd uint32, msg interface{}) error {
89 102 if msg == nil || errCode != 0 {
90   - c.Send(errCode, cmd, nil)
91   - return
  103 + return c.Send(errCode, cmd, nil)
92 104 }
93 105 rsp, err := proto.Marshal(msg.(proto.Message))
94 106 if err != nil {
95   - c.Send(-100, cmd, nil)
96   - return
  107 + return c.Send(-100, cmd, nil)
97 108 }
98   - c.Send(errCode, cmd, rsp)
  109 + return c.Send(errCode, cmd, rsp)
99 110 }
100 111  
101   -func (c *Agent) OnMessage(msg components.IMessage) {
  112 +func (c *Agent) OnMessage(msg components.IMessage) error {
102 113 atomic.StoreInt64(&c.lastHeartCheckTime, common.Timex())
103   - logger.Debug("protocolID: %d", msg.GetHeader().GetMsgID())
  114 + logger.Debug("req protocolID: %d", msg.GetHeader().GetMsgID())
104 115 //heart
105 116 if msg.GetHeader().GetMsgID() == uint32(pb.ProtoCode_HeartReq) {
106   - return
  117 + return nil
107 118 }
108 119  
109 120 //login
110 121 if msg.GetHeader().GetMsgID() == uint32(pb.ProtoCode_LoginReq) {
111 122 code, protoMsg := c.OnLoginQuery(msg)
112   - c.SendMsg(code, msg.GetHeader().GetMsgID(), protoMsg)
113   - return
  123 + return c.SendMsg(code, msg.GetHeader().GetMsgID(), protoMsg)
114 124 }
115 125  
116 126 //get handler by msgid
117 127 md := c.Server.GetAction(msg.GetHeader().GetMsgID())
118 128 if md == nil {
119   - logger.Debug("cmd: %d, handler is nil", msg.GetHeader().GetMsgID())
120   - return
  129 + return fmt.Errorf("cmd: %d, handler is nil", msg.GetHeader().GetMsgID())
121 130 }
122 131  
123 132 if msg.GetHeader().GetMsgID() != uint32(pb.ProtoCode_CreateReq) && c.Role == nil {
124   - c.Send(-101, msg.GetHeader().GetMsgID(), nil)
125   - return
  133 + return c.Send(-101, msg.GetHeader().GetMsgID(), nil)
126 134 }
127 135  
128 136 //调用协议号对应的逻辑函数
129 137 f := md.(func(role *models.RoleModel, msg components.IMessage) (int32, interface{}))
130 138 errCode, protoMsg := f(c.Role, msg)
131   - c.SendMsg(errCode, msg.GetHeader().GetMsgID(), protoMsg)
  139 + logger.Debug("rsp errcode: %d, protocode: %d", errCode, msg.GetHeader().GetMsgID())
  140 + return c.SendMsg(errCode, msg.GetHeader().GetMsgID(), protoMsg)
132 141 }
133 142  
134 143 func (c *Agent) OnTimer() {
... ... @@ -158,6 +167,7 @@ func (c *Agent) OnClose() {
158 167  
159 168 logger.Debug("ID: %d close, roleid", c.IConnection.GetID(), c.Role.Role.Id)
160 169 c.Server.GetConnManage().DelRID(c.Role.Role.Id)
  170 + c.Server.GetConnManage().DelUID(c.Role.Role.Uid)
161 171 c.Role.OnOfflineEvent()
162 172 }
163 173  
... ...
cmd/gameserver/service/game.go
... ... @@ -106,7 +106,11 @@ func (s *GameServer) OnMessage(msg components.IMessage) {
106 106 if agent == nil {
107 107 return
108 108 }
109   - agent.(*Agent).OnMessage(msg)
  109 + err := agent.(*Agent).OnMessage(msg)
  110 + if err != nil {
  111 + logger.Error("%d, onmessage err: %s", agent.GetID(), err.Error())
  112 + s.OnClose(agent)
  113 + }
110 114 }
111 115  
112 116 func (s *GameServer) OnTimer(conn components.IConnection) {
... ...
cmd/test/action/TestAction.go 0 → 100644
... ... @@ -0,0 +1,33 @@
  1 +package action
  2 +
  3 +import (
  4 + "github.com/golang/protobuf/proto"
  5 + "pro2d/common/components"
  6 + "pro2d/common/logger"
  7 + "pro2d/models"
  8 + "pro2d/pb"
  9 +)
  10 +
  11 +func HeartReq(role *models.RoleTestModel, msg components.IMessage) {
  12 +}
  13 +
  14 +func CreateReq(role *models.RoleTestModel, msg components.IMessage) {
  15 +}
  16 +func ChangeTeamReq(role *models.RoleTestModel, msg components.IMessage) {
  17 +}
  18 +func HeroEquipReferReq(role *models.RoleTestModel, msg components.IMessage) {
  19 +}
  20 +func RoleClearItemsReq(role *models.RoleTestModel, msg components.IMessage) {
  21 +}
  22 +func RoleStartBattleReq(role *models.RoleTestModel, msg components.IMessage) {
  23 +}
  24 +func RoleEndBattleReq(role *models.RoleTestModel, msg components.IMessage) {
  25 + rsp := pb.RoleEndBattleRsp{}
  26 + if err := proto.Unmarshal(msg.GetData(), &rsp); err != nil {
  27 + logger.Error("rsp err: %v", err)
  28 + return
  29 + }
  30 + logger.Debug(rsp)
  31 +}
  32 +func EquipmentDelReq(role *models.RoleTestModel, msg components.IMessage) {
  33 +}
... ...
cmd/test/action/protocode.go 0 → 100644
... ... @@ -0,0 +1,19 @@
  1 +package action
  2 +
  3 +import (
  4 + "pro2d/pb"
  5 +)
  6 +
  7 +func GetTestActionMap() map[interface{}]interface{} {
  8 + am := make(map[interface{}]interface{})
  9 + am[uint32(pb.ProtoCode_HeartReq)] = HeartReq
  10 + am[uint32(pb.ProtoCode_CreateReq)] = CreateReq
  11 + am[uint32(pb.ProtoCode_ChangeTeamReq)] = ChangeTeamReq
  12 + am[uint32(pb.ProtoCode_HeroEquipReferReq)] = HeroEquipReferReq
  13 + am[uint32(pb.ProtoCode_RoleClearItemsReq)] = RoleClearItemsReq
  14 + am[uint32(pb.ProtoCode_RoleStartBattleReq)] = RoleStartBattleReq
  15 + am[uint32(pb.ProtoCode_RoleEndBattleReq)] = RoleEndBattleReq
  16 + am[uint32(pb.ProtoCode_EquipmentDelReq)] = EquipmentDelReq
  17 +
  18 + return am
  19 +}
... ...
cmd/test/client.go deleted
... ... @@ -1,42 +0,0 @@
1   -package main
2   -
3   -import (
4   - "github.com/golang/protobuf/proto"
5   - "pro2d/common"
6   - "pro2d/common/components"
7   - "pro2d/common/logger"
8   - "pro2d/pb"
9   - "time"
10   -)
11   -
12   -func main() {
13   -
14   - head := &components.PBHead{
15   - Length: 0,
16   - Cmd: uint32(pb.ProtoCode_LoginReq),
17   - ErrCode: 0,
18   - PreField: 0,
19   - }
20   -
21   - loginReq := &pb.LoginReq{
22   - Token: "141815055745814528",
23   - Device: "123123",
24   - }
25   - l, _ := proto.Marshal(loginReq)
26   -
27   - options := []components.ConnectorOption{
28   - components.WithCtorCount(common.GlobalConf.TestClient.Count),
29   - components.WithCtorSplitter(components.NewPBSplitter(nil)),
30   - }
31   -
32   - client := components.NewConnector(common.GlobalConf.TestClient.Ip, common.GlobalConf.TestClient.Port, options...)
33   - if err := client.Connect(); err != nil {
34   - logger.Error(err)
35   - return
36   - }
37   -
38   - for {
39   - client.Send(head.Cmd, l)
40   - time.Sleep(1 * time.Second)
41   - }
42   -}
cmd/test/client_test.go deleted
... ... @@ -1,32 +0,0 @@
1   -package main
2   -
3   -import (
4   - "testing"
5   -)
6   -
7   -type Error struct {
8   - errCode uint8
9   -}
10   -func (e *Error) Error() string {
11   - switch e.errCode {
12   - case 1:
13   - return "file not found"
14   - case 2:
15   - return "time out"
16   - case 3:
17   - return "permission denied"
18   - default:
19   - return "unknown error"
20   - }
21   -}
22   -
23   -func checkError(err error) {
24   - if err != nil {
25   - panic(err)
26   - }
27   -}
28   -
29   -func TestStart( t *testing.T) {
30   - var e *Error
31   - checkError(e)
32   -}
33 0 \ No newline at end of file
cmd/test/main.go 0 → 100644
... ... @@ -0,0 +1,30 @@
  1 +package main
  2 +
  3 +import (
  4 + "pro2d/cmd/test/service"
  5 + "pro2d/pb"
  6 + "time"
  7 +)
  8 +
  9 +func main() {
  10 + tc := service.NewTestClient()
  11 + if tc == nil {
  12 + return
  13 + }
  14 +
  15 + tc.Login("1")
  16 +
  17 + pp := &pb.RoleEndBattleReq{
  18 + ChapterId: 1,
  19 + CarbonId: 1,
  20 + Pass: true,
  21 + }
  22 +
  23 + time.Sleep(2 * time.Second)
  24 + for {
  25 + //tc.SendPB(pb.ProtoCode_HeartReq, nil)
  26 + tc.SendPB(pb.ProtoCode_RoleEndBattleReq, pp)
  27 + time.Sleep(5 * time.Second)
  28 + }
  29 +
  30 +}
... ...
cmd/test/service/TestClient.go 0 → 100644
... ... @@ -0,0 +1,119 @@
  1 +package service
  2 +
  3 +import (
  4 + "fmt"
  5 + "github.com/golang/protobuf/proto"
  6 + "pro2d/cmd/test/action"
  7 + "pro2d/common"
  8 + "pro2d/common/components"
  9 + "pro2d/common/logger"
  10 + "pro2d/models"
  11 + "pro2d/pb"
  12 + "sync/atomic"
  13 +)
  14 +
  15 +type TestClient struct {
  16 + components.IConnector
  17 +
  18 + Token string
  19 + RoleTest *models.RoleTestModel
  20 + lastHeartCheckTime int64
  21 +}
  22 +
  23 +func NewTestClient() *TestClient {
  24 + options := []components.ConnectorOption{
  25 + components.WithCtorCount(common.GlobalConf.TestClient.Count),
  26 + components.WithCtorSplitter(components.NewPBSplitter(nil)),
  27 + }
  28 +
  29 + client := components.NewConnector(common.GlobalConf.TestClient.Ip, common.GlobalConf.TestClient.Port, options...)
  30 + if err := client.Connect(); err != nil {
  31 + logger.Error(err)
  32 + return nil
  33 + }
  34 + t := &TestClient{IConnector: client}
  35 +
  36 + client.GetConn().SetConnectionCallback(t.OnConn)
  37 + client.GetConn().SetMessageCallback(t.OnMessage)
  38 + client.GetConn().SetCloseCallback(t.OnClose)
  39 + client.GetConn().SetTimerCallback(t.OnTimer)
  40 + client.GetConn().Start()
  41 + return t
  42 +}
  43 +
  44 +func (t *TestClient) OnConn(conn components.IConnection) {
  45 +}
  46 +
  47 +func (t *TestClient) OnLoginQuery(msg components.IMessage) {
  48 + errCode := msg.GetHeader().GetErrCode()
  49 + if errCode != 0 {
  50 + logger.Error("Login errcode: %d", errCode)
  51 +
  52 + if errCode == 2 {
  53 + req := &pb.CreateReq{
  54 + Token: t.Token,
  55 + Device: "test-create",
  56 + }
  57 + r, _ := proto.Marshal(req)
  58 + t.GetConn().SendSuccess(uint32(pb.ProtoCode_CreateReq), r)
  59 + return
  60 + }
  61 + }
  62 +
  63 + req := pb.RoleRsp{}
  64 + if err := proto.Unmarshal(msg.GetData(), &req); err != nil {
  65 + logger.Error("loginRpc err: %v", err)
  66 + return
  67 + }
  68 +
  69 + t.RoleTest = models.NewRoleTestModel(req)
  70 +}
  71 +
  72 +func (t *TestClient) OnMessage(msg components.IMessage) {
  73 + atomic.StoreInt64(&t.lastHeartCheckTime, common.Timex())
  74 + logger.Debug("rsp errCode:%d, protocolID: %d", msg.GetHeader().GetErrCode(), msg.GetHeader().GetMsgID())
  75 +
  76 + //login rsp
  77 + if msg.GetHeader().GetMsgID() == uint32(pb.ProtoCode_LoginReq) {
  78 + t.OnLoginQuery(msg)
  79 + return
  80 + }
  81 +
  82 + errCode := msg.GetHeader().GetErrCode()
  83 + if errCode != 0 {
  84 + logger.Error("protocolID: %d, errCode %d", msg.GetHeader().GetMsgID(), errCode)
  85 + return
  86 + }
  87 +
  88 + //get handler by msgid
  89 + md, ok := action.GetTestActionMap()[msg.GetHeader().GetMsgID()]
  90 + if !ok {
  91 + fmt.Errorf("cmd: %d, handler is nil", msg.GetHeader().GetMsgID())
  92 + return
  93 + }
  94 +
  95 + //调用协议号对应的逻辑函数
  96 + f := md.(func(role *models.RoleTestModel, msg components.IMessage))
  97 + f(t.RoleTest, msg)
  98 +}
  99 +
  100 +func (t *TestClient) OnClose(conn components.IConnection) {
  101 +}
  102 +func (t *TestClient) OnTimer(conn components.IConnection) {
  103 +}
  104 +
  105 +func (t *TestClient) Login(token string) {
  106 + t.Token = token
  107 + head := &components.PBHead{
  108 + Length: 0,
  109 + Cmd: uint32(pb.ProtoCode_LoginReq),
  110 + ErrCode: 0,
  111 + PreField: 0,
  112 + }
  113 + loginReq := &pb.LoginReq{
  114 + Token: token,
  115 + Device: "test-login",
  116 + }
  117 + l, _ := proto.Marshal(loginReq)
  118 + t.Send(head.Cmd, l)
  119 +}
... ...
common/components/conn.go
... ... @@ -39,8 +39,8 @@ var connectionPool = &amp;sync.Pool{
39 39  
40 40 func NewConn(id int, conn net.Conn, splitter ISplitter) IConnection {
41 41 c := connectionPool.Get().(*Connection)
42   - closed := atomic.LoadUint32(&c.Status)
43   - if closed != 0 {
  42 + status := atomic.LoadUint32(&c.Status)
  43 + if status != 0 {
44 44 connectionPool.Put(c)
45 45 c = new(Connection)
46 46 }
... ...
common/components/connector.go
... ... @@ -2,8 +2,10 @@ package components
2 2  
3 3 import (
4 4 "fmt"
  5 + "github.com/golang/protobuf/proto"
5 6 "net"
6 7 "pro2d/common/logger"
  8 + "pro2d/pb"
7 9 )
8 10  
9 11 type ConnectorOption func(*Connector)
... ... @@ -22,22 +24,19 @@ func WithCtorCount(count int) ConnectorOption {
22 24  
23 25 type Connector struct {
24 26 IConnector
  27 + IConnection
25 28 IServer
  29 + Id int
26 30 splitter ISplitter
27 31 ip string
28 32 port int
29 33 sum int
30   -
31   - Conns IConnManage
32   - ids uint32
33 34 }
34 35  
35 36 func NewConnector(ip string, port int, options ...ConnectorOption) IConnector {
36 37 c := &Connector{
37   - ids: 0,
38   - ip: ip,
39   - port: port,
40   - Conns: NewConnManage(),
  38 + ip: ip,
  39 + port: port,
41 40 }
42 41 for _, option := range options {
43 42 option(c)
... ... @@ -45,50 +44,51 @@ func NewConnector(ip string, port int, options ...ConnectorOption) IConnector {
45 44 return c
46 45 }
47 46  
  47 +func (c *Connector) GetConn() IConnection {
  48 + return c.IConnection
  49 +}
  50 +
48 51 func (c *Connector) Connect() error {
49   - if c.sum == 0 {
50   - c.sum = 1
51   - }
52   - for i := 0; i < c.sum; i++ {
53   - conn, err := net.Dial("tcp", fmt.Sprintf("%s:%d", c.ip, c.port))
54   - if err != nil {
55   - return err
56   - }
57   - c.ids++
58   - cli := NewConn(int(c.ids), conn, c.splitter)
59   - cli.SetConnectionCallback(c.OnConnect)
60   - cli.SetMessageCallback(c.OnMessage)
61   - cli.SetCloseCallback(c.OnClose)
62   - cli.SetTimerCallback(c.OnTimer)
63   -
64   - cli.Start()
  52 + conn, err := net.Dial("tcp", fmt.Sprintf("%s:%d", c.ip, c.port))
  53 + if err != nil {
  54 + return err
65 55 }
  56 + cli := NewConn(c.Id, conn, c.splitter)
  57 + cli.SetMessageCallback(c.OnMessage)
  58 + cli.SetCloseCallback(c.OnClose)
  59 + cli.SetTimerCallback(c.OnTimer)
  60 + c.IConnection = cli
66 61  
67 62 return nil
68 63 }
69 64  
70 65 func (c *Connector) DisConnect() {
71   - c.Conns.StopAllConns()
  66 + c.IConnection.Stop()
72 67 }
73 68  
74   -func (c *Connector) Send(cmd uint32, b []byte) {
75   - c.Conns.Range(func(key interface{}, value interface{}) bool {
76   - conn := value.(IConnection)
77   - conn.Send(0, cmd, b)
78   - return true
79   - })
  69 +func (c *Connector) Send(cmd uint32, b []byte) error {
  70 + logger.Debug("connector send cmd: %d, msg: %s", cmd, b)
  71 + return c.IConnection.Send(0, cmd, b)
80 72 }
81 73  
82   -func (c *Connector) GetSplitter() ISplitter {
83   - return c.splitter
  74 +func (c *Connector) SendPB(cmd pb.ProtoCode, b proto.Message) error {
  75 + if b == nil {
  76 + return c.Send(uint32(cmd), nil)
  77 + }
  78 +
  79 + l, err := proto.Marshal(b)
  80 + if err != nil {
  81 + return err
  82 + }
  83 + return c.Send(uint32(cmd), l)
84 84 }
85 85  
86   -func (c *Connector) OnConnect(conn IConnection) {
87   - c.Conns.AddConn(conn.GetID(), conn)
  86 +func (c *Connector) GetSplitter() ISplitter {
  87 + return c.splitter
88 88 }
89 89  
90 90 func (c *Connector) OnMessage(msg IMessage) {
91   - logger.Debug("recv msg cmd: %d, conn: %d data: %s", msg.GetHeader().GetMsgID(), msg.GetSID(), msg.GetData())
  91 + logger.Debug("recv msg errorCode: %d cmd: %d, conn: %d data: %s", msg.GetHeader().GetErrCode(), msg.GetHeader().GetMsgID(), msg.GetSID(), msg.GetData())
92 92 }
93 93  
94 94 func (c *Connector) OnClose(conn IConnection) {
... ... @@ -96,5 +96,5 @@ func (c *Connector) OnClose(conn IConnection) {
96 96 }
97 97  
98 98 func (c *Connector) OnTimer(conn IConnection) {
99   - logger.Debug("ontimer id: %d", conn.GetID())
  99 + //logger.Debug("ontimer id: %d", conn.GetID())
100 100 }
... ...
common/components/connmanage.go
... ... @@ -8,6 +8,9 @@ type ConnManage struct {
8 8  
9 9 r2cRW sync.RWMutex
10 10 r2c map[string]uint32 // role to connID
  11 +
  12 + u2cRW sync.RWMutex
  13 + u2c map[string]uint32 // uid to connID
11 14 }
12 15  
13 16 func NewConnManage() *ConnManage {
... ... @@ -17,6 +20,9 @@ func NewConnManage() *ConnManage {
17 20  
18 21 r2cRW: sync.RWMutex{},
19 22 r2c: make(map[string]uint32),
  23 +
  24 + u2cRW: sync.RWMutex{},
  25 + u2c: make(map[string]uint32),
20 26 }
21 27 }
22 28  
... ... @@ -76,3 +82,22 @@ func (c *ConnManage) GetConnByRID(rid string) IConnection {
76 82 cid := c.r2c[rid]
77 83 return c.GetConn(cid)
78 84 }
  85 +
  86 +func (c *ConnManage) AddUID(uid string, id uint32) {
  87 + c.u2cRW.Lock()
  88 + defer c.u2cRW.Unlock()
  89 + c.u2c[uid] = id
  90 +}
  91 +
  92 +func (c *ConnManage) DelUID(uid string) {
  93 + c.r2cRW.Lock()
  94 + defer c.r2cRW.Unlock()
  95 + delete(c.r2c, uid)
  96 +}
  97 +
  98 +func (c *ConnManage) GetConnByUID(uid string) IConnection {
  99 + c.u2cRW.RLock()
  100 + defer c.u2cRW.RUnlock()
  101 + cid := c.u2c[uid]
  102 + return c.GetConn(cid)
  103 +}
... ...
common/components/icompontents.go
... ... @@ -4,6 +4,7 @@ import (
4 4 "github.com/gin-gonic/gin"
5 5 "github.com/golang/protobuf/proto"
6 6 "google.golang.org/protobuf/reflect/protoreflect"
  7 + "pro2d/pb"
7 8 "reflect"
8 9 )
9 10  
... ... @@ -71,6 +72,10 @@ type (
71 72 AddRID(rid string, id uint32)
72 73 DelRID(rid string)
73 74 GetConnByRID(rid string) IConnection
  75 +
  76 + AddUID(uid string, id uint32)
  77 + DelUID(uid string)
  78 + GetConnByUID(uid string) IConnection
74 79 }
75 80 //server
76 81 IServer interface {
... ... @@ -102,7 +107,9 @@ type (
102 107 Connect() error
103 108 DisConnect()
104 109  
105   - Send(cmd uint32, b []byte)
  110 + GetConn() IConnection
  111 + Send(cmd uint32, b []byte) error
  112 + SendPB(cmd pb.ProtoCode, b proto.Message) error
106 113 }
107 114  
108 115 //httpserver
... ...
conf/conf.yaml
... ... @@ -69,8 +69,8 @@ server_game1:
69 69 db: 0
70 70 test_client:
71 71 ip: "127.0.0.1"
72   - port: 8850
73   - count: 10
  72 + port: 8849
  73 + count: 1
74 74  
75 75 logconf:
76 76 TimeFormat: "2006-01-02 15:04:05"
... ...
models/role.go
... ... @@ -133,7 +133,8 @@ func (m *RoleModel) InitRole() {
133 133 m.AddTeam(&t4)
134 134  
135 135 //init limit
136   - m.UpdateProperties(map[string]interface{}{"clotheslimit": 100, "weaponslimit": 100, "otherlimit": 100}, false)
  136 + var limit uint32 = 50
  137 + m.UpdateProperties(map[string]interface{}{"clotheslimit": limit, "weaponslimit": limit, "otherlimit": limit, "jewelrylimit": limit, "materiallimit": limit}, false)
137 138  
138 139 m.Update()
139 140 }
... ...
models/roleTest.go 0 → 100644
... ... @@ -0,0 +1,37 @@
  1 +package models
  2 +
  3 +import (
  4 + "github.com/golang/protobuf/proto"
  5 + "pro2d/pb"
  6 +)
  7 +
  8 +type ProtoMap map[string]proto.Message
  9 +
  10 +type RoleTestModel struct {
  11 + Role *pb.Role
  12 + Hero ProtoMap
  13 + Team ProtoMap
  14 + Equipment ProtoMap
  15 +}
  16 +
  17 +func NewRoleTestModel(rsp pb.RoleRsp) *RoleTestModel {
  18 + data := &RoleTestModel{
  19 + Role: rsp.Role,
  20 + Hero: make(ProtoMap),
  21 + Team: make(ProtoMap),
  22 + Equipment: make(ProtoMap),
  23 + }
  24 +
  25 + for _, hero := range rsp.Hero {
  26 + data.Hero[hero.Id] = hero
  27 + }
  28 +
  29 + for _, team := range rsp.Team {
  30 + data.Team[team.Id] = team
  31 + }
  32 + for _, equip := range rsp.Equipments {
  33 + data.Equipment[equip.Id] = equip
  34 + }
  35 +
  36 + return data
  37 +}
... ...
pb/game.pb.go
... ... @@ -227,6 +227,44 @@ func (x *CreateReq) GetDevice() string {
227 227 return ""
228 228 }
229 229  
  230 +type DisConnectRsp struct {
  231 + state protoimpl.MessageState
  232 + sizeCache protoimpl.SizeCache
  233 + unknownFields protoimpl.UnknownFields
  234 +}
  235 +
  236 +func (x *DisConnectRsp) Reset() {
  237 + *x = DisConnectRsp{}
  238 + if protoimpl.UnsafeEnabled {
  239 + mi := &file_game_proto_msgTypes[4]
  240 + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
  241 + ms.StoreMessageInfo(mi)
  242 + }
  243 +}
  244 +
  245 +func (x *DisConnectRsp) String() string {
  246 + return protoimpl.X.MessageStringOf(x)
  247 +}
  248 +
  249 +func (*DisConnectRsp) ProtoMessage() {}
  250 +
  251 +func (x *DisConnectRsp) ProtoReflect() protoreflect.Message {
  252 + mi := &file_game_proto_msgTypes[4]
  253 + if protoimpl.UnsafeEnabled && x != nil {
  254 + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
  255 + if ms.LoadMessageInfo() == nil {
  256 + ms.StoreMessageInfo(mi)
  257 + }
  258 + return ms
  259 + }
  260 + return mi.MessageOf(x)
  261 +}
  262 +
  263 +// Deprecated: Use DisConnectRsp.ProtoReflect.Descriptor instead.
  264 +func (*DisConnectRsp) Descriptor() ([]byte, []int) {
  265 + return file_game_proto_rawDescGZIP(), []int{4}
  266 +}
  267 +
230 268 //ResponseCmd ChangeTeamReq
231 269 type ChangeTeamReq struct {
232 270 state protoimpl.MessageState
... ... @@ -239,7 +277,7 @@ type ChangeTeamReq struct {
239 277 func (x *ChangeTeamReq) Reset() {
240 278 *x = ChangeTeamReq{}
241 279 if protoimpl.UnsafeEnabled {
242   - mi := &file_game_proto_msgTypes[4]
  280 + mi := &file_game_proto_msgTypes[5]
243 281 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
244 282 ms.StoreMessageInfo(mi)
245 283 }
... ... @@ -252,7 +290,7 @@ func (x *ChangeTeamReq) String() string {
252 290 func (*ChangeTeamReq) ProtoMessage() {}
253 291  
254 292 func (x *ChangeTeamReq) ProtoReflect() protoreflect.Message {
255   - mi := &file_game_proto_msgTypes[4]
  293 + mi := &file_game_proto_msgTypes[5]
256 294 if protoimpl.UnsafeEnabled && x != nil {
257 295 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
258 296 if ms.LoadMessageInfo() == nil {
... ... @@ -265,7 +303,7 @@ func (x *ChangeTeamReq) ProtoReflect() protoreflect.Message {
265 303  
266 304 // Deprecated: Use ChangeTeamReq.ProtoReflect.Descriptor instead.
267 305 func (*ChangeTeamReq) Descriptor() ([]byte, []int) {
268   - return file_game_proto_rawDescGZIP(), []int{4}
  306 + return file_game_proto_rawDescGZIP(), []int{5}
269 307 }
270 308  
271 309 func (x *ChangeTeamReq) GetTeam() []*Team {
... ... @@ -289,7 +327,7 @@ type HeroEquipReferReq struct {
289 327 func (x *HeroEquipReferReq) Reset() {
290 328 *x = HeroEquipReferReq{}
291 329 if protoimpl.UnsafeEnabled {
292   - mi := &file_game_proto_msgTypes[5]
  330 + mi := &file_game_proto_msgTypes[6]
293 331 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
294 332 ms.StoreMessageInfo(mi)
295 333 }
... ... @@ -302,7 +340,7 @@ func (x *HeroEquipReferReq) String() string {
302 340 func (*HeroEquipReferReq) ProtoMessage() {}
303 341  
304 342 func (x *HeroEquipReferReq) ProtoReflect() protoreflect.Message {
305   - mi := &file_game_proto_msgTypes[5]
  343 + mi := &file_game_proto_msgTypes[6]
306 344 if protoimpl.UnsafeEnabled && x != nil {
307 345 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
308 346 if ms.LoadMessageInfo() == nil {
... ... @@ -315,7 +353,7 @@ func (x *HeroEquipReferReq) ProtoReflect() protoreflect.Message {
315 353  
316 354 // Deprecated: Use HeroEquipReferReq.ProtoReflect.Descriptor instead.
317 355 func (*HeroEquipReferReq) Descriptor() ([]byte, []int) {
318   - return file_game_proto_rawDescGZIP(), []int{5}
  356 + return file_game_proto_rawDescGZIP(), []int{6}
319 357 }
320 358  
321 359 func (x *HeroEquipReferReq) GetEquipId() string {
... ... @@ -353,7 +391,7 @@ type RoleRsp struct {
353 391 func (x *RoleRsp) Reset() {
354 392 *x = RoleRsp{}
355 393 if protoimpl.UnsafeEnabled {
356   - mi := &file_game_proto_msgTypes[6]
  394 + mi := &file_game_proto_msgTypes[7]
357 395 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
358 396 ms.StoreMessageInfo(mi)
359 397 }
... ... @@ -366,7 +404,7 @@ func (x *RoleRsp) String() string {
366 404 func (*RoleRsp) ProtoMessage() {}
367 405  
368 406 func (x *RoleRsp) ProtoReflect() protoreflect.Message {
369   - mi := &file_game_proto_msgTypes[6]
  407 + mi := &file_game_proto_msgTypes[7]
370 408 if protoimpl.UnsafeEnabled && x != nil {
371 409 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
372 410 if ms.LoadMessageInfo() == nil {
... ... @@ -379,7 +417,7 @@ func (x *RoleRsp) ProtoReflect() protoreflect.Message {
379 417  
380 418 // Deprecated: Use RoleRsp.ProtoReflect.Descriptor instead.
381 419 func (*RoleRsp) Descriptor() ([]byte, []int) {
382   - return file_game_proto_rawDescGZIP(), []int{6}
  420 + return file_game_proto_rawDescGZIP(), []int{7}
383 421 }
384 422  
385 423 func (x *RoleRsp) GetRole() *Role {
... ... @@ -423,7 +461,7 @@ type RoleUpdatePropertyRsp struct {
423 461 func (x *RoleUpdatePropertyRsp) Reset() {
424 462 *x = RoleUpdatePropertyRsp{}
425 463 if protoimpl.UnsafeEnabled {
426   - mi := &file_game_proto_msgTypes[7]
  464 + mi := &file_game_proto_msgTypes[8]
427 465 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
428 466 ms.StoreMessageInfo(mi)
429 467 }
... ... @@ -436,7 +474,7 @@ func (x *RoleUpdatePropertyRsp) String() string {
436 474 func (*RoleUpdatePropertyRsp) ProtoMessage() {}
437 475  
438 476 func (x *RoleUpdatePropertyRsp) ProtoReflect() protoreflect.Message {
439   - mi := &file_game_proto_msgTypes[7]
  477 + mi := &file_game_proto_msgTypes[8]
440 478 if protoimpl.UnsafeEnabled && x != nil {
441 479 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
442 480 if ms.LoadMessageInfo() == nil {
... ... @@ -449,7 +487,7 @@ func (x *RoleUpdatePropertyRsp) ProtoReflect() protoreflect.Message {
449 487  
450 488 // Deprecated: Use RoleUpdatePropertyRsp.ProtoReflect.Descriptor instead.
451 489 func (*RoleUpdatePropertyRsp) Descriptor() ([]byte, []int) {
452   - return file_game_proto_rawDescGZIP(), []int{7}
  490 + return file_game_proto_rawDescGZIP(), []int{8}
453 491 }
454 492  
455 493 func (x *RoleUpdatePropertyRsp) GetId() []int32 {
... ... @@ -478,7 +516,7 @@ type RoleUpdateItemsRsp struct {
478 516 func (x *RoleUpdateItemsRsp) Reset() {
479 517 *x = RoleUpdateItemsRsp{}
480 518 if protoimpl.UnsafeEnabled {
481   - mi := &file_game_proto_msgTypes[8]
  519 + mi := &file_game_proto_msgTypes[9]
482 520 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
483 521 ms.StoreMessageInfo(mi)
484 522 }
... ... @@ -491,7 +529,7 @@ func (x *RoleUpdateItemsRsp) String() string {
491 529 func (*RoleUpdateItemsRsp) ProtoMessage() {}
492 530  
493 531 func (x *RoleUpdateItemsRsp) ProtoReflect() protoreflect.Message {
494   - mi := &file_game_proto_msgTypes[8]
  532 + mi := &file_game_proto_msgTypes[9]
495 533 if protoimpl.UnsafeEnabled && x != nil {
496 534 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
497 535 if ms.LoadMessageInfo() == nil {
... ... @@ -504,7 +542,7 @@ func (x *RoleUpdateItemsRsp) ProtoReflect() protoreflect.Message {
504 542  
505 543 // Deprecated: Use RoleUpdateItemsRsp.ProtoReflect.Descriptor instead.
506 544 func (*RoleUpdateItemsRsp) Descriptor() ([]byte, []int) {
507   - return file_game_proto_rawDescGZIP(), []int{8}
  545 + return file_game_proto_rawDescGZIP(), []int{9}
508 546 }
509 547  
510 548 func (x *RoleUpdateItemsRsp) GetItems() string {
... ... @@ -527,7 +565,7 @@ type RoleClearItemsReq struct {
527 565 func (x *RoleClearItemsReq) Reset() {
528 566 *x = RoleClearItemsReq{}
529 567 if protoimpl.UnsafeEnabled {
530   - mi := &file_game_proto_msgTypes[9]
  568 + mi := &file_game_proto_msgTypes[10]
531 569 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
532 570 ms.StoreMessageInfo(mi)
533 571 }
... ... @@ -540,7 +578,7 @@ func (x *RoleClearItemsReq) String() string {
540 578 func (*RoleClearItemsReq) ProtoMessage() {}
541 579  
542 580 func (x *RoleClearItemsReq) ProtoReflect() protoreflect.Message {
543   - mi := &file_game_proto_msgTypes[9]
  581 + mi := &file_game_proto_msgTypes[10]
544 582 if protoimpl.UnsafeEnabled && x != nil {
545 583 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
546 584 if ms.LoadMessageInfo() == nil {
... ... @@ -553,7 +591,7 @@ func (x *RoleClearItemsReq) ProtoReflect() protoreflect.Message {
553 591  
554 592 // Deprecated: Use RoleClearItemsReq.ProtoReflect.Descriptor instead.
555 593 func (*RoleClearItemsReq) Descriptor() ([]byte, []int) {
556   - return file_game_proto_rawDescGZIP(), []int{9}
  594 + return file_game_proto_rawDescGZIP(), []int{10}
557 595 }
558 596  
559 597 func (x *RoleClearItemsReq) GetId() string {
... ... @@ -582,7 +620,7 @@ type RoleStartBattleReq struct {
582 620 func (x *RoleStartBattleReq) Reset() {
583 621 *x = RoleStartBattleReq{}
584 622 if protoimpl.UnsafeEnabled {
585   - mi := &file_game_proto_msgTypes[10]
  623 + mi := &file_game_proto_msgTypes[11]
586 624 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
587 625 ms.StoreMessageInfo(mi)
588 626 }
... ... @@ -595,7 +633,7 @@ func (x *RoleStartBattleReq) String() string {
595 633 func (*RoleStartBattleReq) ProtoMessage() {}
596 634  
597 635 func (x *RoleStartBattleReq) ProtoReflect() protoreflect.Message {
598   - mi := &file_game_proto_msgTypes[10]
  636 + mi := &file_game_proto_msgTypes[11]
599 637 if protoimpl.UnsafeEnabled && x != nil {
600 638 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
601 639 if ms.LoadMessageInfo() == nil {
... ... @@ -608,7 +646,7 @@ func (x *RoleStartBattleReq) ProtoReflect() protoreflect.Message {
608 646  
609 647 // Deprecated: Use RoleStartBattleReq.ProtoReflect.Descriptor instead.
610 648 func (*RoleStartBattleReq) Descriptor() ([]byte, []int) {
611   - return file_game_proto_rawDescGZIP(), []int{10}
  649 + return file_game_proto_rawDescGZIP(), []int{11}
612 650 }
613 651  
614 652 func (x *RoleStartBattleReq) GetChapterId() int32 {
... ... @@ -625,6 +663,7 @@ func (x *RoleStartBattleReq) GetCarbonId() int32 {
625 663 return 0
626 664 }
627 665  
  666 +//ResponseCmd RoleEndBattleRsp
628 667 type RoleEndBattleReq struct {
629 668 state protoimpl.MessageState
630 669 sizeCache protoimpl.SizeCache
... ... @@ -638,7 +677,7 @@ type RoleEndBattleReq struct {
638 677 func (x *RoleEndBattleReq) Reset() {
639 678 *x = RoleEndBattleReq{}
640 679 if protoimpl.UnsafeEnabled {
641   - mi := &file_game_proto_msgTypes[11]
  680 + mi := &file_game_proto_msgTypes[12]
642 681 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
643 682 ms.StoreMessageInfo(mi)
644 683 }
... ... @@ -651,7 +690,7 @@ func (x *RoleEndBattleReq) String() string {
651 690 func (*RoleEndBattleReq) ProtoMessage() {}
652 691  
653 692 func (x *RoleEndBattleReq) ProtoReflect() protoreflect.Message {
654   - mi := &file_game_proto_msgTypes[11]
  693 + mi := &file_game_proto_msgTypes[12]
655 694 if protoimpl.UnsafeEnabled && x != nil {
656 695 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
657 696 if ms.LoadMessageInfo() == nil {
... ... @@ -664,7 +703,7 @@ func (x *RoleEndBattleReq) ProtoReflect() protoreflect.Message {
664 703  
665 704 // Deprecated: Use RoleEndBattleReq.ProtoReflect.Descriptor instead.
666 705 func (*RoleEndBattleReq) Descriptor() ([]byte, []int) {
667   - return file_game_proto_rawDescGZIP(), []int{11}
  706 + return file_game_proto_rawDescGZIP(), []int{12}
668 707 }
669 708  
670 709 func (x *RoleEndBattleReq) GetChapterId() int32 {
... ... @@ -704,7 +743,7 @@ type RoleEndBattleRsp struct {
704 743 func (x *RoleEndBattleRsp) Reset() {
705 744 *x = RoleEndBattleRsp{}
706 745 if protoimpl.UnsafeEnabled {
707   - mi := &file_game_proto_msgTypes[12]
  746 + mi := &file_game_proto_msgTypes[13]
708 747 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
709 748 ms.StoreMessageInfo(mi)
710 749 }
... ... @@ -717,7 +756,7 @@ func (x *RoleEndBattleRsp) String() string {
717 756 func (*RoleEndBattleRsp) ProtoMessage() {}
718 757  
719 758 func (x *RoleEndBattleRsp) ProtoReflect() protoreflect.Message {
720   - mi := &file_game_proto_msgTypes[12]
  759 + mi := &file_game_proto_msgTypes[13]
721 760 if protoimpl.UnsafeEnabled && x != nil {
722 761 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
723 762 if ms.LoadMessageInfo() == nil {
... ... @@ -730,7 +769,7 @@ func (x *RoleEndBattleRsp) ProtoReflect() protoreflect.Message {
730 769  
731 770 // Deprecated: Use RoleEndBattleRsp.ProtoReflect.Descriptor instead.
732 771 func (*RoleEndBattleRsp) Descriptor() ([]byte, []int) {
733   - return file_game_proto_rawDescGZIP(), []int{12}
  772 + return file_game_proto_rawDescGZIP(), []int{13}
734 773 }
735 774  
736 775 func (x *RoleEndBattleRsp) GetRoleLevel() int32 {
... ... @@ -787,7 +826,7 @@ type EquipmentDelReq struct {
787 826 func (x *EquipmentDelReq) Reset() {
788 827 *x = EquipmentDelReq{}
789 828 if protoimpl.UnsafeEnabled {
790   - mi := &file_game_proto_msgTypes[13]
  829 + mi := &file_game_proto_msgTypes[14]
791 830 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
792 831 ms.StoreMessageInfo(mi)
793 832 }
... ... @@ -800,7 +839,7 @@ func (x *EquipmentDelReq) String() string {
800 839 func (*EquipmentDelReq) ProtoMessage() {}
801 840  
802 841 func (x *EquipmentDelReq) ProtoReflect() protoreflect.Message {
803   - mi := &file_game_proto_msgTypes[13]
  842 + mi := &file_game_proto_msgTypes[14]
804 843 if protoimpl.UnsafeEnabled && x != nil {
805 844 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
806 845 if ms.LoadMessageInfo() == nil {
... ... @@ -813,7 +852,7 @@ func (x *EquipmentDelReq) ProtoReflect() protoreflect.Message {
813 852  
814 853 // Deprecated: Use EquipmentDelReq.ProtoReflect.Descriptor instead.
815 854 func (*EquipmentDelReq) Descriptor() ([]byte, []int) {
816   - return file_game_proto_rawDescGZIP(), []int{13}
  855 + return file_game_proto_rawDescGZIP(), []int{14}
817 856 }
818 857  
819 858 func (x *EquipmentDelReq) GetId() string {
... ... @@ -835,7 +874,7 @@ type EquipmentAddRsp struct {
835 874 func (x *EquipmentAddRsp) Reset() {
836 875 *x = EquipmentAddRsp{}
837 876 if protoimpl.UnsafeEnabled {
838   - mi := &file_game_proto_msgTypes[14]
  877 + mi := &file_game_proto_msgTypes[15]
839 878 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
840 879 ms.StoreMessageInfo(mi)
841 880 }
... ... @@ -848,7 +887,7 @@ func (x *EquipmentAddRsp) String() string {
848 887 func (*EquipmentAddRsp) ProtoMessage() {}
849 888  
850 889 func (x *EquipmentAddRsp) ProtoReflect() protoreflect.Message {
851   - mi := &file_game_proto_msgTypes[14]
  890 + mi := &file_game_proto_msgTypes[15]
852 891 if protoimpl.UnsafeEnabled && x != nil {
853 892 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
854 893 if ms.LoadMessageInfo() == nil {
... ... @@ -861,7 +900,7 @@ func (x *EquipmentAddRsp) ProtoReflect() protoreflect.Message {
861 900  
862 901 // Deprecated: Use EquipmentAddRsp.ProtoReflect.Descriptor instead.
863 902 func (*EquipmentAddRsp) Descriptor() ([]byte, []int) {
864   - return file_game_proto_rawDescGZIP(), []int{14}
  903 + return file_game_proto_rawDescGZIP(), []int{15}
865 904 }
866 905  
867 906 func (x *EquipmentAddRsp) GetEquip() *Equipment {
... ... @@ -887,68 +926,69 @@ var file_game_proto_rawDesc = []byte{
887 926 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e,
888 927 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x16, 0x0a,
889 928 0x06, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x64,
890   - 0x65, 0x76, 0x69, 0x63, 0x65, 0x22, 0x31, 0x0a, 0x0d, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x54,
891   - 0x65, 0x61, 0x6d, 0x52, 0x65, 0x71, 0x12, 0x20, 0x0a, 0x04, 0x74, 0x65, 0x61, 0x6d, 0x18, 0x01,
892   - 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0c, 0x2e, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x73, 0x2e, 0x54, 0x65,
893   - 0x61, 0x6d, 0x52, 0x04, 0x74, 0x65, 0x61, 0x6d, 0x22, 0x5c, 0x0a, 0x11, 0x48, 0x65, 0x72, 0x6f,
894   - 0x45, 0x71, 0x75, 0x69, 0x70, 0x52, 0x65, 0x66, 0x65, 0x72, 0x52, 0x65, 0x71, 0x12, 0x18, 0x0a,
895   - 0x07, 0x65, 0x71, 0x75, 0x69, 0x70, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07,
896   - 0x65, 0x71, 0x75, 0x69, 0x70, 0x49, 0x64, 0x12, 0x17, 0x0a, 0x07, 0x68, 0x65, 0x72, 0x6f, 0x5f,
897   - 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x68, 0x65, 0x72, 0x6f, 0x49, 0x64,
898   - 0x12, 0x14, 0x0a, 0x05, 0x72, 0x65, 0x66, 0x65, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52,
899   - 0x05, 0x72, 0x65, 0x66, 0x65, 0x72, 0x22, 0xa2, 0x01, 0x0a, 0x07, 0x52, 0x6f, 0x6c, 0x65, 0x52,
900   - 0x73, 0x70, 0x12, 0x20, 0x0a, 0x04, 0x72, 0x6f, 0x6c, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b,
901   - 0x32, 0x0c, 0x2e, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x73, 0x2e, 0x52, 0x6f, 0x6c, 0x65, 0x52, 0x04,
902   - 0x72, 0x6f, 0x6c, 0x65, 0x12, 0x20, 0x0a, 0x04, 0x68, 0x65, 0x72, 0x6f, 0x18, 0x03, 0x20, 0x03,
903   - 0x28, 0x0b, 0x32, 0x0c, 0x2e, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x73, 0x2e, 0x48, 0x65, 0x72, 0x6f,
904   - 0x52, 0x04, 0x68, 0x65, 0x72, 0x6f, 0x12, 0x20, 0x0a, 0x04, 0x74, 0x65, 0x61, 0x6d, 0x18, 0x04,
905   - 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0c, 0x2e, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x73, 0x2e, 0x54, 0x65,
906   - 0x61, 0x6d, 0x52, 0x04, 0x74, 0x65, 0x61, 0x6d, 0x12, 0x31, 0x0a, 0x0a, 0x65, 0x71, 0x75, 0x69,
907   - 0x70, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x6d,
908   - 0x6f, 0x64, 0x65, 0x6c, 0x73, 0x2e, 0x45, 0x71, 0x75, 0x69, 0x70, 0x6d, 0x65, 0x6e, 0x74, 0x52,
909   - 0x0a, 0x65, 0x71, 0x75, 0x69, 0x70, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x22, 0x49, 0x0a, 0x15, 0x52,
910   - 0x6f, 0x6c, 0x65, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x50, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74,
911   - 0x79, 0x52, 0x73, 0x70, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x03, 0x28, 0x05,
912   - 0x52, 0x02, 0x69, 0x64, 0x12, 0x20, 0x0a, 0x04, 0x72, 0x6f, 0x6c, 0x65, 0x18, 0x02, 0x20, 0x01,
913   - 0x28, 0x0b, 0x32, 0x0c, 0x2e, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x73, 0x2e, 0x52, 0x6f, 0x6c, 0x65,
914   - 0x52, 0x04, 0x72, 0x6f, 0x6c, 0x65, 0x22, 0x2a, 0x0a, 0x12, 0x52, 0x6f, 0x6c, 0x65, 0x55, 0x70,
915   - 0x64, 0x61, 0x74, 0x65, 0x49, 0x74, 0x65, 0x6d, 0x73, 0x52, 0x73, 0x70, 0x12, 0x14, 0x0a, 0x05,
916   - 0x69, 0x74, 0x65, 0x6d, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x69, 0x74, 0x65,
917   - 0x6d, 0x73, 0x22, 0x39, 0x0a, 0x11, 0x52, 0x6f, 0x6c, 0x65, 0x43, 0x6c, 0x65, 0x61, 0x72, 0x49,
918   - 0x74, 0x65, 0x6d, 0x73, 0x52, 0x65, 0x71, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20,
919   - 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74,
920   - 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x22, 0x50, 0x0a,
921   - 0x12, 0x52, 0x6f, 0x6c, 0x65, 0x53, 0x74, 0x61, 0x72, 0x74, 0x42, 0x61, 0x74, 0x74, 0x6c, 0x65,
922   - 0x52, 0x65, 0x71, 0x12, 0x1d, 0x0a, 0x0a, 0x63, 0x68, 0x61, 0x70, 0x74, 0x65, 0x72, 0x5f, 0x69,
923   - 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, 0x63, 0x68, 0x61, 0x70, 0x74, 0x65, 0x72,
924   - 0x49, 0x64, 0x12, 0x1b, 0x0a, 0x09, 0x63, 0x61, 0x72, 0x62, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18,
925   - 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x63, 0x61, 0x72, 0x62, 0x6f, 0x6e, 0x49, 0x64, 0x22,
926   - 0x62, 0x0a, 0x10, 0x52, 0x6f, 0x6c, 0x65, 0x45, 0x6e, 0x64, 0x42, 0x61, 0x74, 0x74, 0x6c, 0x65,
927   - 0x52, 0x65, 0x71, 0x12, 0x1d, 0x0a, 0x0a, 0x63, 0x68, 0x61, 0x70, 0x74, 0x65, 0x72, 0x5f, 0x69,
928   - 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, 0x63, 0x68, 0x61, 0x70, 0x74, 0x65, 0x72,
929   - 0x49, 0x64, 0x12, 0x1b, 0x0a, 0x09, 0x63, 0x61, 0x72, 0x62, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18,
930   - 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x63, 0x61, 0x72, 0x62, 0x6f, 0x6e, 0x49, 0x64, 0x12,
931   - 0x12, 0x0a, 0x04, 0x70, 0x61, 0x73, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x04, 0x70,
932   - 0x61, 0x73, 0x73, 0x22, 0xc1, 0x01, 0x0a, 0x10, 0x52, 0x6f, 0x6c, 0x65, 0x45, 0x6e, 0x64, 0x42,
933   - 0x61, 0x74, 0x74, 0x6c, 0x65, 0x52, 0x73, 0x70, 0x12, 0x1d, 0x0a, 0x0a, 0x72, 0x6f, 0x6c, 0x65,
934   - 0x5f, 0x6c, 0x65, 0x76, 0x65, 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, 0x72, 0x6f,
935   - 0x6c, 0x65, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x12, 0x19, 0x0a, 0x08, 0x72, 0x6f, 0x6c, 0x65, 0x5f,
936   - 0x65, 0x78, 0x70, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x72, 0x6f, 0x6c, 0x65, 0x45,
937   - 0x78, 0x70, 0x12, 0x25, 0x0a, 0x0e, 0x72, 0x6f, 0x6c, 0x65, 0x5f, 0x65, 0x78, 0x70, 0x61, 0x6d,
938   - 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0d, 0x72, 0x6f, 0x6c, 0x65,
939   - 0x45, 0x78, 0x70, 0x61, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x72, 0x65, 0x77,
940   - 0x61, 0x72, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x72, 0x65, 0x77, 0x61, 0x72,
941   - 0x64, 0x12, 0x12, 0x0a, 0x04, 0x70, 0x61, 0x73, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x52,
942   - 0x04, 0x70, 0x61, 0x73, 0x73, 0x12, 0x20, 0x0a, 0x04, 0x68, 0x65, 0x72, 0x6f, 0x18, 0x06, 0x20,
  929 + 0x65, 0x76, 0x69, 0x63, 0x65, 0x22, 0x0f, 0x0a, 0x0d, 0x44, 0x69, 0x73, 0x43, 0x6f, 0x6e, 0x6e,
  930 + 0x65, 0x63, 0x74, 0x52, 0x73, 0x70, 0x22, 0x31, 0x0a, 0x0d, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65,
  931 + 0x54, 0x65, 0x61, 0x6d, 0x52, 0x65, 0x71, 0x12, 0x20, 0x0a, 0x04, 0x74, 0x65, 0x61, 0x6d, 0x18,
  932 + 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0c, 0x2e, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x73, 0x2e, 0x54,
  933 + 0x65, 0x61, 0x6d, 0x52, 0x04, 0x74, 0x65, 0x61, 0x6d, 0x22, 0x5c, 0x0a, 0x11, 0x48, 0x65, 0x72,
  934 + 0x6f, 0x45, 0x71, 0x75, 0x69, 0x70, 0x52, 0x65, 0x66, 0x65, 0x72, 0x52, 0x65, 0x71, 0x12, 0x18,
  935 + 0x0a, 0x07, 0x65, 0x71, 0x75, 0x69, 0x70, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52,
  936 + 0x07, 0x65, 0x71, 0x75, 0x69, 0x70, 0x49, 0x64, 0x12, 0x17, 0x0a, 0x07, 0x68, 0x65, 0x72, 0x6f,
  937 + 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x68, 0x65, 0x72, 0x6f, 0x49,
  938 + 0x64, 0x12, 0x14, 0x0a, 0x05, 0x72, 0x65, 0x66, 0x65, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08,
  939 + 0x52, 0x05, 0x72, 0x65, 0x66, 0x65, 0x72, 0x22, 0xa2, 0x01, 0x0a, 0x07, 0x52, 0x6f, 0x6c, 0x65,
  940 + 0x52, 0x73, 0x70, 0x12, 0x20, 0x0a, 0x04, 0x72, 0x6f, 0x6c, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28,
  941 + 0x0b, 0x32, 0x0c, 0x2e, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x73, 0x2e, 0x52, 0x6f, 0x6c, 0x65, 0x52,
  942 + 0x04, 0x72, 0x6f, 0x6c, 0x65, 0x12, 0x20, 0x0a, 0x04, 0x68, 0x65, 0x72, 0x6f, 0x18, 0x03, 0x20,
943 943 0x03, 0x28, 0x0b, 0x32, 0x0c, 0x2e, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x73, 0x2e, 0x48, 0x65, 0x72,
944   - 0x6f, 0x52, 0x04, 0x68, 0x65, 0x72, 0x6f, 0x22, 0x21, 0x0a, 0x0f, 0x45, 0x71, 0x75, 0x69, 0x70,
945   - 0x6d, 0x65, 0x6e, 0x74, 0x44, 0x65, 0x6c, 0x52, 0x65, 0x71, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64,
946   - 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x22, 0x3a, 0x0a, 0x0f, 0x45, 0x71,
947   - 0x75, 0x69, 0x70, 0x6d, 0x65, 0x6e, 0x74, 0x41, 0x64, 0x64, 0x52, 0x73, 0x70, 0x12, 0x27, 0x0a,
948   - 0x05, 0x65, 0x71, 0x75, 0x69, 0x70, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x6d,
949   - 0x6f, 0x64, 0x65, 0x6c, 0x73, 0x2e, 0x45, 0x71, 0x75, 0x69, 0x70, 0x6d, 0x65, 0x6e, 0x74, 0x52,
950   - 0x05, 0x65, 0x71, 0x75, 0x69, 0x70, 0x42, 0x0a, 0x5a, 0x08, 0x2e, 0x2e, 0x2f, 0x70, 0x62, 0x3b,
951   - 0x70, 0x62, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
  944 + 0x6f, 0x52, 0x04, 0x68, 0x65, 0x72, 0x6f, 0x12, 0x20, 0x0a, 0x04, 0x74, 0x65, 0x61, 0x6d, 0x18,
  945 + 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0c, 0x2e, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x73, 0x2e, 0x54,
  946 + 0x65, 0x61, 0x6d, 0x52, 0x04, 0x74, 0x65, 0x61, 0x6d, 0x12, 0x31, 0x0a, 0x0a, 0x65, 0x71, 0x75,
  947 + 0x69, 0x70, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x11, 0x2e,
  948 + 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x73, 0x2e, 0x45, 0x71, 0x75, 0x69, 0x70, 0x6d, 0x65, 0x6e, 0x74,
  949 + 0x52, 0x0a, 0x65, 0x71, 0x75, 0x69, 0x70, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x22, 0x49, 0x0a, 0x15,
  950 + 0x52, 0x6f, 0x6c, 0x65, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x50, 0x72, 0x6f, 0x70, 0x65, 0x72,
  951 + 0x74, 0x79, 0x52, 0x73, 0x70, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x03, 0x28,
  952 + 0x05, 0x52, 0x02, 0x69, 0x64, 0x12, 0x20, 0x0a, 0x04, 0x72, 0x6f, 0x6c, 0x65, 0x18, 0x02, 0x20,
  953 + 0x01, 0x28, 0x0b, 0x32, 0x0c, 0x2e, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x73, 0x2e, 0x52, 0x6f, 0x6c,
  954 + 0x65, 0x52, 0x04, 0x72, 0x6f, 0x6c, 0x65, 0x22, 0x2a, 0x0a, 0x12, 0x52, 0x6f, 0x6c, 0x65, 0x55,
  955 + 0x70, 0x64, 0x61, 0x74, 0x65, 0x49, 0x74, 0x65, 0x6d, 0x73, 0x52, 0x73, 0x70, 0x12, 0x14, 0x0a,
  956 + 0x05, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x69, 0x74,
  957 + 0x65, 0x6d, 0x73, 0x22, 0x39, 0x0a, 0x11, 0x52, 0x6f, 0x6c, 0x65, 0x43, 0x6c, 0x65, 0x61, 0x72,
  958 + 0x49, 0x74, 0x65, 0x6d, 0x73, 0x52, 0x65, 0x71, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01,
  959 + 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x63, 0x6f, 0x75, 0x6e,
  960 + 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x22, 0x50,
  961 + 0x0a, 0x12, 0x52, 0x6f, 0x6c, 0x65, 0x53, 0x74, 0x61, 0x72, 0x74, 0x42, 0x61, 0x74, 0x74, 0x6c,
  962 + 0x65, 0x52, 0x65, 0x71, 0x12, 0x1d, 0x0a, 0x0a, 0x63, 0x68, 0x61, 0x70, 0x74, 0x65, 0x72, 0x5f,
  963 + 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, 0x63, 0x68, 0x61, 0x70, 0x74, 0x65,
  964 + 0x72, 0x49, 0x64, 0x12, 0x1b, 0x0a, 0x09, 0x63, 0x61, 0x72, 0x62, 0x6f, 0x6e, 0x5f, 0x69, 0x64,
  965 + 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x63, 0x61, 0x72, 0x62, 0x6f, 0x6e, 0x49, 0x64,
  966 + 0x22, 0x62, 0x0a, 0x10, 0x52, 0x6f, 0x6c, 0x65, 0x45, 0x6e, 0x64, 0x42, 0x61, 0x74, 0x74, 0x6c,
  967 + 0x65, 0x52, 0x65, 0x71, 0x12, 0x1d, 0x0a, 0x0a, 0x63, 0x68, 0x61, 0x70, 0x74, 0x65, 0x72, 0x5f,
  968 + 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, 0x63, 0x68, 0x61, 0x70, 0x74, 0x65,
  969 + 0x72, 0x49, 0x64, 0x12, 0x1b, 0x0a, 0x09, 0x63, 0x61, 0x72, 0x62, 0x6f, 0x6e, 0x5f, 0x69, 0x64,
  970 + 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x63, 0x61, 0x72, 0x62, 0x6f, 0x6e, 0x49, 0x64,
  971 + 0x12, 0x12, 0x0a, 0x04, 0x70, 0x61, 0x73, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x04,
  972 + 0x70, 0x61, 0x73, 0x73, 0x22, 0xc1, 0x01, 0x0a, 0x10, 0x52, 0x6f, 0x6c, 0x65, 0x45, 0x6e, 0x64,
  973 + 0x42, 0x61, 0x74, 0x74, 0x6c, 0x65, 0x52, 0x73, 0x70, 0x12, 0x1d, 0x0a, 0x0a, 0x72, 0x6f, 0x6c,
  974 + 0x65, 0x5f, 0x6c, 0x65, 0x76, 0x65, 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, 0x72,
  975 + 0x6f, 0x6c, 0x65, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x12, 0x19, 0x0a, 0x08, 0x72, 0x6f, 0x6c, 0x65,
  976 + 0x5f, 0x65, 0x78, 0x70, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x72, 0x6f, 0x6c, 0x65,
  977 + 0x45, 0x78, 0x70, 0x12, 0x25, 0x0a, 0x0e, 0x72, 0x6f, 0x6c, 0x65, 0x5f, 0x65, 0x78, 0x70, 0x61,
  978 + 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0d, 0x72, 0x6f, 0x6c,
  979 + 0x65, 0x45, 0x78, 0x70, 0x61, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x72, 0x65,
  980 + 0x77, 0x61, 0x72, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x72, 0x65, 0x77, 0x61,
  981 + 0x72, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x70, 0x61, 0x73, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08,
  982 + 0x52, 0x04, 0x70, 0x61, 0x73, 0x73, 0x12, 0x20, 0x0a, 0x04, 0x68, 0x65, 0x72, 0x6f, 0x18, 0x06,
  983 + 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0c, 0x2e, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x73, 0x2e, 0x48, 0x65,
  984 + 0x72, 0x6f, 0x52, 0x04, 0x68, 0x65, 0x72, 0x6f, 0x22, 0x21, 0x0a, 0x0f, 0x45, 0x71, 0x75, 0x69,
  985 + 0x70, 0x6d, 0x65, 0x6e, 0x74, 0x44, 0x65, 0x6c, 0x52, 0x65, 0x71, 0x12, 0x0e, 0x0a, 0x02, 0x69,
  986 + 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x22, 0x3a, 0x0a, 0x0f, 0x45,
  987 + 0x71, 0x75, 0x69, 0x70, 0x6d, 0x65, 0x6e, 0x74, 0x41, 0x64, 0x64, 0x52, 0x73, 0x70, 0x12, 0x27,
  988 + 0x0a, 0x05, 0x65, 0x71, 0x75, 0x69, 0x70, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x11, 0x2e,
  989 + 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x73, 0x2e, 0x45, 0x71, 0x75, 0x69, 0x70, 0x6d, 0x65, 0x6e, 0x74,
  990 + 0x52, 0x05, 0x65, 0x71, 0x75, 0x69, 0x70, 0x42, 0x0a, 0x5a, 0x08, 0x2e, 0x2e, 0x2f, 0x70, 0x62,
  991 + 0x3b, 0x70, 0x62, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
952 992 }
953 993  
954 994 var (
... ... @@ -963,37 +1003,38 @@ func file_game_proto_rawDescGZIP() []byte {
963 1003 return file_game_proto_rawDescData
964 1004 }
965 1005  
966   -var file_game_proto_msgTypes = make([]protoimpl.MessageInfo, 15)
  1006 +var file_game_proto_msgTypes = make([]protoimpl.MessageInfo, 16)
967 1007 var file_game_proto_goTypes = []interface{}{
968 1008 (*HeartReq)(nil), // 0: game.HeartReq
969 1009 (*HeartRsp)(nil), // 1: game.HeartRsp
970 1010 (*LoginReq)(nil), // 2: game.LoginReq
971 1011 (*CreateReq)(nil), // 3: game.CreateReq
972   - (*ChangeTeamReq)(nil), // 4: game.ChangeTeamReq
973   - (*HeroEquipReferReq)(nil), // 5: game.HeroEquipReferReq
974   - (*RoleRsp)(nil), // 6: game.RoleRsp
975   - (*RoleUpdatePropertyRsp)(nil), // 7: game.RoleUpdatePropertyRsp
976   - (*RoleUpdateItemsRsp)(nil), // 8: game.RoleUpdateItemsRsp
977   - (*RoleClearItemsReq)(nil), // 9: game.RoleClearItemsReq
978   - (*RoleStartBattleReq)(nil), // 10: game.RoleStartBattleReq
979   - (*RoleEndBattleReq)(nil), // 11: game.RoleEndBattleReq
980   - (*RoleEndBattleRsp)(nil), // 12: game.RoleEndBattleRsp
981   - (*EquipmentDelReq)(nil), // 13: game.EquipmentDelReq
982   - (*EquipmentAddRsp)(nil), // 14: game.EquipmentAddRsp
983   - (*Team)(nil), // 15: models.Team
984   - (*Role)(nil), // 16: models.Role
985   - (*Hero)(nil), // 17: models.Hero
986   - (*Equipment)(nil), // 18: models.Equipment
  1012 + (*DisConnectRsp)(nil), // 4: game.DisConnectRsp
  1013 + (*ChangeTeamReq)(nil), // 5: game.ChangeTeamReq
  1014 + (*HeroEquipReferReq)(nil), // 6: game.HeroEquipReferReq
  1015 + (*RoleRsp)(nil), // 7: game.RoleRsp
  1016 + (*RoleUpdatePropertyRsp)(nil), // 8: game.RoleUpdatePropertyRsp
  1017 + (*RoleUpdateItemsRsp)(nil), // 9: game.RoleUpdateItemsRsp
  1018 + (*RoleClearItemsReq)(nil), // 10: game.RoleClearItemsReq
  1019 + (*RoleStartBattleReq)(nil), // 11: game.RoleStartBattleReq
  1020 + (*RoleEndBattleReq)(nil), // 12: game.RoleEndBattleReq
  1021 + (*RoleEndBattleRsp)(nil), // 13: game.RoleEndBattleRsp
  1022 + (*EquipmentDelReq)(nil), // 14: game.EquipmentDelReq
  1023 + (*EquipmentAddRsp)(nil), // 15: game.EquipmentAddRsp
  1024 + (*Team)(nil), // 16: models.Team
  1025 + (*Role)(nil), // 17: models.Role
  1026 + (*Hero)(nil), // 18: models.Hero
  1027 + (*Equipment)(nil), // 19: models.Equipment
987 1028 }
988 1029 var file_game_proto_depIdxs = []int32{
989   - 15, // 0: game.ChangeTeamReq.team:type_name -> models.Team
990   - 16, // 1: game.RoleRsp.role:type_name -> models.Role
991   - 17, // 2: game.RoleRsp.hero:type_name -> models.Hero
992   - 15, // 3: game.RoleRsp.team:type_name -> models.Team
993   - 18, // 4: game.RoleRsp.equipments:type_name -> models.Equipment
994   - 16, // 5: game.RoleUpdatePropertyRsp.role:type_name -> models.Role
995   - 17, // 6: game.RoleEndBattleRsp.hero:type_name -> models.Hero
996   - 18, // 7: game.EquipmentAddRsp.equip:type_name -> models.Equipment
  1030 + 16, // 0: game.ChangeTeamReq.team:type_name -> models.Team
  1031 + 17, // 1: game.RoleRsp.role:type_name -> models.Role
  1032 + 18, // 2: game.RoleRsp.hero:type_name -> models.Hero
  1033 + 16, // 3: game.RoleRsp.team:type_name -> models.Team
  1034 + 19, // 4: game.RoleRsp.equipments:type_name -> models.Equipment
  1035 + 17, // 5: game.RoleUpdatePropertyRsp.role:type_name -> models.Role
  1036 + 18, // 6: game.RoleEndBattleRsp.hero:type_name -> models.Hero
  1037 + 19, // 7: game.EquipmentAddRsp.equip:type_name -> models.Equipment
997 1038 8, // [8:8] is the sub-list for method output_type
998 1039 8, // [8:8] is the sub-list for method input_type
999 1040 8, // [8:8] is the sub-list for extension type_name
... ... @@ -1057,7 +1098,7 @@ func file_game_proto_init() {
1057 1098 }
1058 1099 }
1059 1100 file_game_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} {
1060   - switch v := v.(*ChangeTeamReq); i {
  1101 + switch v := v.(*DisConnectRsp); i {
1061 1102 case 0:
1062 1103 return &v.state
1063 1104 case 1:
... ... @@ -1069,7 +1110,7 @@ func file_game_proto_init() {
1069 1110 }
1070 1111 }
1071 1112 file_game_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} {
1072   - switch v := v.(*HeroEquipReferReq); i {
  1113 + switch v := v.(*ChangeTeamReq); i {
1073 1114 case 0:
1074 1115 return &v.state
1075 1116 case 1:
... ... @@ -1081,7 +1122,7 @@ func file_game_proto_init() {
1081 1122 }
1082 1123 }
1083 1124 file_game_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} {
1084   - switch v := v.(*RoleRsp); i {
  1125 + switch v := v.(*HeroEquipReferReq); i {
1085 1126 case 0:
1086 1127 return &v.state
1087 1128 case 1:
... ... @@ -1093,7 +1134,7 @@ func file_game_proto_init() {
1093 1134 }
1094 1135 }
1095 1136 file_game_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} {
1096   - switch v := v.(*RoleUpdatePropertyRsp); i {
  1137 + switch v := v.(*RoleRsp); i {
1097 1138 case 0:
1098 1139 return &v.state
1099 1140 case 1:
... ... @@ -1105,7 +1146,7 @@ func file_game_proto_init() {
1105 1146 }
1106 1147 }
1107 1148 file_game_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} {
1108   - switch v := v.(*RoleUpdateItemsRsp); i {
  1149 + switch v := v.(*RoleUpdatePropertyRsp); i {
1109 1150 case 0:
1110 1151 return &v.state
1111 1152 case 1:
... ... @@ -1117,7 +1158,7 @@ func file_game_proto_init() {
1117 1158 }
1118 1159 }
1119 1160 file_game_proto_msgTypes[9].Exporter = func(v interface{}, i int) interface{} {
1120   - switch v := v.(*RoleClearItemsReq); i {
  1161 + switch v := v.(*RoleUpdateItemsRsp); i {
1121 1162 case 0:
1122 1163 return &v.state
1123 1164 case 1:
... ... @@ -1129,7 +1170,7 @@ func file_game_proto_init() {
1129 1170 }
1130 1171 }
1131 1172 file_game_proto_msgTypes[10].Exporter = func(v interface{}, i int) interface{} {
1132   - switch v := v.(*RoleStartBattleReq); i {
  1173 + switch v := v.(*RoleClearItemsReq); i {
1133 1174 case 0:
1134 1175 return &v.state
1135 1176 case 1:
... ... @@ -1141,7 +1182,7 @@ func file_game_proto_init() {
1141 1182 }
1142 1183 }
1143 1184 file_game_proto_msgTypes[11].Exporter = func(v interface{}, i int) interface{} {
1144   - switch v := v.(*RoleEndBattleReq); i {
  1185 + switch v := v.(*RoleStartBattleReq); i {
1145 1186 case 0:
1146 1187 return &v.state
1147 1188 case 1:
... ... @@ -1153,7 +1194,7 @@ func file_game_proto_init() {
1153 1194 }
1154 1195 }
1155 1196 file_game_proto_msgTypes[12].Exporter = func(v interface{}, i int) interface{} {
1156   - switch v := v.(*RoleEndBattleRsp); i {
  1197 + switch v := v.(*RoleEndBattleReq); i {
1157 1198 case 0:
1158 1199 return &v.state
1159 1200 case 1:
... ... @@ -1165,7 +1206,7 @@ func file_game_proto_init() {
1165 1206 }
1166 1207 }
1167 1208 file_game_proto_msgTypes[13].Exporter = func(v interface{}, i int) interface{} {
1168   - switch v := v.(*EquipmentDelReq); i {
  1209 + switch v := v.(*RoleEndBattleRsp); i {
1169 1210 case 0:
1170 1211 return &v.state
1171 1212 case 1:
... ... @@ -1177,6 +1218,18 @@ func file_game_proto_init() {
1177 1218 }
1178 1219 }
1179 1220 file_game_proto_msgTypes[14].Exporter = func(v interface{}, i int) interface{} {
  1221 + switch v := v.(*EquipmentDelReq); i {
  1222 + case 0:
  1223 + return &v.state
  1224 + case 1:
  1225 + return &v.sizeCache
  1226 + case 2:
  1227 + return &v.unknownFields
  1228 + default:
  1229 + return nil
  1230 + }
  1231 + }
  1232 + file_game_proto_msgTypes[15].Exporter = func(v interface{}, i int) interface{} {
1180 1233 switch v := v.(*EquipmentAddRsp); i {
1181 1234 case 0:
1182 1235 return &v.state
... ... @@ -1195,7 +1248,7 @@ func file_game_proto_init() {
1195 1248 GoPackagePath: reflect.TypeOf(x{}).PkgPath(),
1196 1249 RawDescriptor: file_game_proto_rawDesc,
1197 1250 NumEnums: 0,
1198   - NumMessages: 15,
  1251 + NumMessages: 16,
1199 1252 NumExtensions: 0,
1200 1253 NumServices: 0,
1201 1254 },
... ...
pb/models.pb.go
... ... @@ -95,7 +95,7 @@ type Hero struct {
95 95 ReinCount int32 `protobuf:"varint,5,opt,name=rein_count,json=reinCount,proto3" json:"rein_count,omitempty"`
96 96 ReinPoint int32 `protobuf:"varint,6,opt,name=rein_point,json=reinPoint,proto3" json:"rein_point,omitempty"`
97 97 Equipments string `protobuf:"bytes,7,opt,name=equipments,proto3" json:"equipments,omitempty"` //"id=type id1=type1"
98   - Exp int64 `protobuf:"varint,8,opt,name=exp,proto3" json:"exp,omitempty"`
  98 + Exp int32 `protobuf:"varint,8,opt,name=exp,proto3" json:"exp,omitempty"`
99 99 }
100 100  
101 101 func (x *Hero) Reset() {
... ... @@ -179,7 +179,7 @@ func (x *Hero) GetEquipments() string {
179 179 return ""
180 180 }
181 181  
182   -func (x *Hero) GetExp() int64 {
  182 +func (x *Hero) GetExp() int32 {
183 183 if x != nil {
184 184 return x.Exp
185 185 }
... ... @@ -674,7 +674,7 @@ var file_models_proto_rawDesc = []byte{
674 674 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, 0x72, 0x65, 0x69, 0x6e, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x12,
675 675 0x1e, 0x0a, 0x0a, 0x65, 0x71, 0x75, 0x69, 0x70, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x18, 0x07, 0x20,
676 676 0x01, 0x28, 0x09, 0x52, 0x0a, 0x65, 0x71, 0x75, 0x69, 0x70, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x12,
677   - 0x10, 0x0a, 0x03, 0x65, 0x78, 0x70, 0x18, 0x08, 0x20, 0x01, 0x28, 0x03, 0x52, 0x03, 0x65, 0x78,
  677 + 0x10, 0x0a, 0x03, 0x65, 0x78, 0x70, 0x18, 0x08, 0x20, 0x01, 0x28, 0x05, 0x52, 0x03, 0x65, 0x78,
678 678 0x70, 0x22, 0xa0, 0x01, 0x0a, 0x09, 0x45, 0x71, 0x75, 0x69, 0x70, 0x6d, 0x65, 0x6e, 0x74, 0x12,
679 679 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12,
680 680 0x17, 0x0a, 0x07, 0x72, 0x6f, 0x6c, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09,
... ...
pb/protocode.pb.go
... ... @@ -29,17 +29,18 @@ const (
29 29 ProtoCode_HeartRsp ProtoCode = 3
30 30 ProtoCode_LoginReq ProtoCode = 4
31 31 ProtoCode_CreateReq ProtoCode = 5
32   - ProtoCode_ChangeTeamReq ProtoCode = 6
33   - ProtoCode_HeroEquipReferReq ProtoCode = 7
34   - ProtoCode_RoleRsp ProtoCode = 8
35   - ProtoCode_RoleUpdatePropertyRsp ProtoCode = 9
36   - ProtoCode_RoleUpdateItemsRsp ProtoCode = 10
37   - ProtoCode_RoleClearItemsReq ProtoCode = 11
38   - ProtoCode_RoleStartBattleReq ProtoCode = 12
39   - ProtoCode_RoleEndBattleReq ProtoCode = 13
40   - ProtoCode_RoleEndBattleRsp ProtoCode = 14
41   - ProtoCode_EquipmentDelReq ProtoCode = 15
42   - ProtoCode_EquipmentAddRsp ProtoCode = 16
  32 + ProtoCode_DisConnectRsp ProtoCode = 6
  33 + ProtoCode_ChangeTeamReq ProtoCode = 7
  34 + ProtoCode_HeroEquipReferReq ProtoCode = 8
  35 + ProtoCode_RoleRsp ProtoCode = 9
  36 + ProtoCode_RoleUpdatePropertyRsp ProtoCode = 10
  37 + ProtoCode_RoleUpdateItemsRsp ProtoCode = 11
  38 + ProtoCode_RoleClearItemsReq ProtoCode = 12
  39 + ProtoCode_RoleStartBattleReq ProtoCode = 13
  40 + ProtoCode_RoleEndBattleReq ProtoCode = 14
  41 + ProtoCode_RoleEndBattleRsp ProtoCode = 15
  42 + ProtoCode_EquipmentDelReq ProtoCode = 16
  43 + ProtoCode_EquipmentAddRsp ProtoCode = 17
43 44 )
44 45  
45 46 // Enum value maps for ProtoCode.
... ... @@ -51,17 +52,18 @@ var (
51 52 3: "HeartRsp",
52 53 4: "LoginReq",
53 54 5: "CreateReq",
54   - 6: "ChangeTeamReq",
55   - 7: "HeroEquipReferReq",
56   - 8: "RoleRsp",
57   - 9: "RoleUpdatePropertyRsp",
58   - 10: "RoleUpdateItemsRsp",
59   - 11: "RoleClearItemsReq",
60   - 12: "RoleStartBattleReq",
61   - 13: "RoleEndBattleReq",
62   - 14: "RoleEndBattleRsp",
63   - 15: "EquipmentDelReq",
64   - 16: "EquipmentAddRsp",
  55 + 6: "DisConnectRsp",
  56 + 7: "ChangeTeamReq",
  57 + 8: "HeroEquipReferReq",
  58 + 9: "RoleRsp",
  59 + 10: "RoleUpdatePropertyRsp",
  60 + 11: "RoleUpdateItemsRsp",
  61 + 12: "RoleClearItemsReq",
  62 + 13: "RoleStartBattleReq",
  63 + 14: "RoleEndBattleReq",
  64 + 15: "RoleEndBattleRsp",
  65 + 16: "EquipmentDelReq",
  66 + 17: "EquipmentAddRsp",
65 67 }
66 68 ProtoCode_value = map[string]int32{
67 69 "UNKNOWN": 0,
... ... @@ -70,17 +72,18 @@ var (
70 72 "HeartRsp": 3,
71 73 "LoginReq": 4,
72 74 "CreateReq": 5,
73   - "ChangeTeamReq": 6,
74   - "HeroEquipReferReq": 7,
75   - "RoleRsp": 8,
76   - "RoleUpdatePropertyRsp": 9,
77   - "RoleUpdateItemsRsp": 10,
78   - "RoleClearItemsReq": 11,
79   - "RoleStartBattleReq": 12,
80   - "RoleEndBattleReq": 13,
81   - "RoleEndBattleRsp": 14,
82   - "EquipmentDelReq": 15,
83   - "EquipmentAddRsp": 16,
  75 + "DisConnectRsp": 6,
  76 + "ChangeTeamReq": 7,
  77 + "HeroEquipReferReq": 8,
  78 + "RoleRsp": 9,
  79 + "RoleUpdatePropertyRsp": 10,
  80 + "RoleUpdateItemsRsp": 11,
  81 + "RoleClearItemsReq": 12,
  82 + "RoleStartBattleReq": 13,
  83 + "RoleEndBattleReq": 14,
  84 + "RoleEndBattleRsp": 15,
  85 + "EquipmentDelReq": 16,
  86 + "EquipmentAddRsp": 17,
84 87 }
85 88 )
86 89  
... ... @@ -115,30 +118,31 @@ var File_protocode_proto protoreflect.FileDescriptor
115 118  
116 119 var file_protocode_proto_rawDesc = []byte{
117 120 0x0a, 0x0f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74,
118   - 0x6f, 0x12, 0x09, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x64, 0x65, 0x2a, 0xce, 0x02, 0x0a,
  121 + 0x6f, 0x12, 0x09, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x64, 0x65, 0x2a, 0xe1, 0x02, 0x0a,
119 122 0x09, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x0b, 0x0a, 0x07, 0x55, 0x4e,
120 123 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x10, 0x00, 0x12, 0x0c, 0x0a, 0x08, 0x4c, 0x6f, 0x67, 0x69, 0x6e,
121 124 0x52, 0x73, 0x70, 0x10, 0x01, 0x12, 0x0c, 0x0a, 0x08, 0x48, 0x65, 0x61, 0x72, 0x74, 0x52, 0x65,
122 125 0x71, 0x10, 0x02, 0x12, 0x0c, 0x0a, 0x08, 0x48, 0x65, 0x61, 0x72, 0x74, 0x52, 0x73, 0x70, 0x10,
123 126 0x03, 0x12, 0x0c, 0x0a, 0x08, 0x4c, 0x6f, 0x67, 0x69, 0x6e, 0x52, 0x65, 0x71, 0x10, 0x04, 0x12,
124 127 0x0d, 0x0a, 0x09, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x10, 0x05, 0x12, 0x11,
125   - 0x0a, 0x0d, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x54, 0x65, 0x61, 0x6d, 0x52, 0x65, 0x71, 0x10,
126   - 0x06, 0x12, 0x15, 0x0a, 0x11, 0x48, 0x65, 0x72, 0x6f, 0x45, 0x71, 0x75, 0x69, 0x70, 0x52, 0x65,
127   - 0x66, 0x65, 0x72, 0x52, 0x65, 0x71, 0x10, 0x07, 0x12, 0x0b, 0x0a, 0x07, 0x52, 0x6f, 0x6c, 0x65,
128   - 0x52, 0x73, 0x70, 0x10, 0x08, 0x12, 0x19, 0x0a, 0x15, 0x52, 0x6f, 0x6c, 0x65, 0x55, 0x70, 0x64,
129   - 0x61, 0x74, 0x65, 0x50, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x52, 0x73, 0x70, 0x10, 0x09,
130   - 0x12, 0x16, 0x0a, 0x12, 0x52, 0x6f, 0x6c, 0x65, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x49, 0x74,
131   - 0x65, 0x6d, 0x73, 0x52, 0x73, 0x70, 0x10, 0x0a, 0x12, 0x15, 0x0a, 0x11, 0x52, 0x6f, 0x6c, 0x65,
132   - 0x43, 0x6c, 0x65, 0x61, 0x72, 0x49, 0x74, 0x65, 0x6d, 0x73, 0x52, 0x65, 0x71, 0x10, 0x0b, 0x12,
133   - 0x16, 0x0a, 0x12, 0x52, 0x6f, 0x6c, 0x65, 0x53, 0x74, 0x61, 0x72, 0x74, 0x42, 0x61, 0x74, 0x74,
134   - 0x6c, 0x65, 0x52, 0x65, 0x71, 0x10, 0x0c, 0x12, 0x14, 0x0a, 0x10, 0x52, 0x6f, 0x6c, 0x65, 0x45,
135   - 0x6e, 0x64, 0x42, 0x61, 0x74, 0x74, 0x6c, 0x65, 0x52, 0x65, 0x71, 0x10, 0x0d, 0x12, 0x14, 0x0a,
136   - 0x10, 0x52, 0x6f, 0x6c, 0x65, 0x45, 0x6e, 0x64, 0x42, 0x61, 0x74, 0x74, 0x6c, 0x65, 0x52, 0x73,
137   - 0x70, 0x10, 0x0e, 0x12, 0x13, 0x0a, 0x0f, 0x45, 0x71, 0x75, 0x69, 0x70, 0x6d, 0x65, 0x6e, 0x74,
138   - 0x44, 0x65, 0x6c, 0x52, 0x65, 0x71, 0x10, 0x0f, 0x12, 0x13, 0x0a, 0x0f, 0x45, 0x71, 0x75, 0x69,
139   - 0x70, 0x6d, 0x65, 0x6e, 0x74, 0x41, 0x64, 0x64, 0x52, 0x73, 0x70, 0x10, 0x10, 0x42, 0x0a, 0x5a,
140   - 0x08, 0x2e, 0x2e, 0x2f, 0x70, 0x62, 0x3b, 0x70, 0x62, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f,
141   - 0x33,
  128 + 0x0a, 0x0d, 0x44, 0x69, 0x73, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x52, 0x73, 0x70, 0x10,
  129 + 0x06, 0x12, 0x11, 0x0a, 0x0d, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x54, 0x65, 0x61, 0x6d, 0x52,
  130 + 0x65, 0x71, 0x10, 0x07, 0x12, 0x15, 0x0a, 0x11, 0x48, 0x65, 0x72, 0x6f, 0x45, 0x71, 0x75, 0x69,
  131 + 0x70, 0x52, 0x65, 0x66, 0x65, 0x72, 0x52, 0x65, 0x71, 0x10, 0x08, 0x12, 0x0b, 0x0a, 0x07, 0x52,
  132 + 0x6f, 0x6c, 0x65, 0x52, 0x73, 0x70, 0x10, 0x09, 0x12, 0x19, 0x0a, 0x15, 0x52, 0x6f, 0x6c, 0x65,
  133 + 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x50, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x52, 0x73,
  134 + 0x70, 0x10, 0x0a, 0x12, 0x16, 0x0a, 0x12, 0x52, 0x6f, 0x6c, 0x65, 0x55, 0x70, 0x64, 0x61, 0x74,
  135 + 0x65, 0x49, 0x74, 0x65, 0x6d, 0x73, 0x52, 0x73, 0x70, 0x10, 0x0b, 0x12, 0x15, 0x0a, 0x11, 0x52,
  136 + 0x6f, 0x6c, 0x65, 0x43, 0x6c, 0x65, 0x61, 0x72, 0x49, 0x74, 0x65, 0x6d, 0x73, 0x52, 0x65, 0x71,
  137 + 0x10, 0x0c, 0x12, 0x16, 0x0a, 0x12, 0x52, 0x6f, 0x6c, 0x65, 0x53, 0x74, 0x61, 0x72, 0x74, 0x42,
  138 + 0x61, 0x74, 0x74, 0x6c, 0x65, 0x52, 0x65, 0x71, 0x10, 0x0d, 0x12, 0x14, 0x0a, 0x10, 0x52, 0x6f,
  139 + 0x6c, 0x65, 0x45, 0x6e, 0x64, 0x42, 0x61, 0x74, 0x74, 0x6c, 0x65, 0x52, 0x65, 0x71, 0x10, 0x0e,
  140 + 0x12, 0x14, 0x0a, 0x10, 0x52, 0x6f, 0x6c, 0x65, 0x45, 0x6e, 0x64, 0x42, 0x61, 0x74, 0x74, 0x6c,
  141 + 0x65, 0x52, 0x73, 0x70, 0x10, 0x0f, 0x12, 0x13, 0x0a, 0x0f, 0x45, 0x71, 0x75, 0x69, 0x70, 0x6d,
  142 + 0x65, 0x6e, 0x74, 0x44, 0x65, 0x6c, 0x52, 0x65, 0x71, 0x10, 0x10, 0x12, 0x13, 0x0a, 0x0f, 0x45,
  143 + 0x71, 0x75, 0x69, 0x70, 0x6d, 0x65, 0x6e, 0x74, 0x41, 0x64, 0x64, 0x52, 0x73, 0x70, 0x10, 0x11,
  144 + 0x42, 0x0a, 0x5a, 0x08, 0x2e, 0x2e, 0x2f, 0x70, 0x62, 0x3b, 0x70, 0x62, 0x62, 0x06, 0x70, 0x72,
  145 + 0x6f, 0x74, 0x6f, 0x33,
142 146 }
143 147  
144 148 var (
... ...
1   -Subproject commit aac4a98512069d7ea74a88fd61637b59e7345bff
  1 +Subproject commit 015742626c9deaa014003202fa6981a3fa9f9df9
... ...