Commit 101d1cc1d6942fce43f18df8a5f27f50022c8f18
1 parent
8aaf28dd
feat: 一个基于redis的自增ID功能。
Showing
17 changed files
with
511 additions
and
97 deletions
Show diff stats
cmd/gameserver/action/RoleAction.go
... | ... | @@ -39,14 +39,18 @@ func CreateRpc(agent components.IAgent, msg components.IMessage) (int32, interfa |
39 | 39 | req := pb.CreateReq{} |
40 | 40 | if err := proto.Unmarshal(msg.GetData(), &req); err != nil { |
41 | 41 | logger.Error("CreateRpc err: %v", err) |
42 | - return 1, nil | |
42 | + return 1, err | |
43 | 43 | } |
44 | 44 | role := models.RoleExistByUid(req.Token) |
45 | 45 | if role != nil { |
46 | - return 2, nil | |
46 | + return 2, "role exists" | |
47 | + } | |
48 | + | |
49 | + roleId, err := common.GetNextRoleId() | |
50 | + if err != nil { | |
51 | + return 3, err | |
47 | 52 | } |
48 | 53 | |
49 | - roleId := common.SnowFlack.NextValStr() | |
50 | 54 | role = models.NewRole(roleId) |
51 | 55 | role.Role.Uid = req.Token |
52 | 56 | role.Role.Nick = getRandomName() | ... | ... |
cmd/gameserver/service/game.go
... | ... | @@ -49,7 +49,6 @@ func NewGameServer(sconf *common.SConf) (*GameServer, error) { |
49 | 49 | if err != nil { |
50 | 50 | return nil, err |
51 | 51 | } |
52 | - models.InitGameModels() | |
53 | 52 | |
54 | 53 | //redis init |
55 | 54 | if err = redisproxy.ConnectRedis(sconf.RedisConf.DB, sconf.RedisConf.Auth, sconf.RedisConf.Address); err != nil { |
... | ... | @@ -61,15 +60,29 @@ func NewGameServer(sconf *common.SConf) (*GameServer, error) { |
61 | 60 | if err != nil { |
62 | 61 | return nil, err |
63 | 62 | } |
64 | - s.EtcdClient.PutWithLeasePrefix(common.GlobalConf.GameConf.Name, common.GlobalConf.GameConf.ID, fmt.Sprintf("%s:%d", common.GlobalConf.GameConf.IP, common.GlobalConf.GameConf.Port), 5) | |
63 | + s.EtcdClient.PutWithLeasePrefix(common.GlobalConf.GameConf.Name, fmt.Sprintf("%d", common.GlobalConf.GameConf.ID), fmt.Sprintf("%s:%d", common.GlobalConf.GameConf.IP, common.GlobalConf.GameConf.Port), 5) | |
64 | + | |
65 | + //设置服务器ID & game | |
66 | + models.NewDBSeed(sconf.ID).InitServerDatabase(models.GameModels()) | |
67 | + models.DBSeedS().InitAutoIncreUidTable(models.GameModels()) | |
65 | 68 | |
66 | 69 | return s, nil |
67 | 70 | } |
68 | 71 | |
72 | +func (s *GameServer) Timeout() { | |
73 | + //每秒中保存一下自增ID | |
74 | + models.DBSeedS().SaveAutoincrementTimer(models.GameModels()) | |
75 | + | |
76 | + components.TimeOut(1*time.Second, s.Timeout) | |
77 | +} | |
78 | + | |
69 | 79 | func (s *GameServer) Start() error { |
70 | 80 | //设置随机种子 |
71 | 81 | rand.Seed(time.Now().Unix()) |
72 | 82 | |
83 | + //启动定时器 | |
84 | + s.Timeout() | |
85 | + | |
73 | 86 | return s.IServer.Start() |
74 | 87 | } |
75 | 88 | ... | ... |
cmd/httpserver/AccountAction.go
... | ... | @@ -37,9 +37,13 @@ func (h *AccountAction) Register(c *gin.Context) (int, interface{}) { |
37 | 37 | return 3, "account exists: " + register.Phone |
38 | 38 | } |
39 | 39 | |
40 | - account.Uid = common.SnowFlack.NextValStr() | |
40 | + uid, err := common.GetNextUId() | |
41 | + if err != nil { | |
42 | + return 4, "uid get error: " + err.Error() | |
43 | + } | |
44 | + account.Uid = uid | |
41 | 45 | account.Password = common.Md5V(register.Password) |
42 | - if err := account.Create(); err != nil { | |
46 | + if err = account.Create(); err != nil { | |
43 | 47 | return 4, "account register err: " + err.Error() |
44 | 48 | } |
45 | 49 | account.Password = register.Password | ... | ... |
cmd/httpserver/http.go
... | ... | @@ -12,11 +12,13 @@ import ( |
12 | 12 | "pro2d/common/logger" |
13 | 13 | "pro2d/models" |
14 | 14 | "syscall" |
15 | + "time" | |
15 | 16 | ) |
16 | 17 | |
17 | 18 | type AccountServer struct { |
18 | 19 | components.IHttp |
19 | 20 | EtcdClient *etcd.EtcdClient |
21 | + Sconf *common.SConf | |
20 | 22 | } |
21 | 23 | |
22 | 24 | func NewAccountServer(version string, port ...string) *AccountServer { |
... | ... | @@ -24,6 +26,8 @@ func NewAccountServer(version string, port ...string) *AccountServer { |
24 | 26 | } |
25 | 27 | |
26 | 28 | func (s *AccountServer) Init(sconf *common.SConf) error { |
29 | + s.Sconf = sconf | |
30 | + | |
27 | 31 | //mgo init |
28 | 32 | err := mongoproxy.ConnectMongo(sconf.MongoConf) |
29 | 33 | |
... | ... | @@ -37,17 +41,27 @@ func (s *AccountServer) Init(sconf *common.SConf) error { |
37 | 41 | if err != nil { |
38 | 42 | return err |
39 | 43 | } |
40 | - models.InitAccountModels() | |
44 | + models.NewDBSeed(sconf.ID).InitServerDatabase(models.AccountModels()) | |
45 | + models.DBSeedS().InitAutoIncreUidTable(models.AccountModels()) | |
41 | 46 | |
42 | - s.EtcdClient.PutWithLeasePrefix(sconf.Name, sconf.ID, fmt.Sprintf("%s:%d", sconf.IP, sconf.Port), 5) | |
47 | + s.EtcdClient.PutWithLeasePrefix(sconf.Name, fmt.Sprintf("%d", sconf.ID), fmt.Sprintf("%s:%d", sconf.IP, sconf.Port), 5) | |
43 | 48 | return nil |
44 | 49 | } |
45 | 50 | |
51 | +func (s *AccountServer) TimeOut() { | |
52 | + models.DBSeedS().SaveAutoincrementTimer(models.AccountModels()) | |
53 | + | |
54 | + components.TimeOut(1*time.Second, s.TimeOut) | |
55 | +} | |
56 | + | |
46 | 57 | func (s *AccountServer) Start() error { |
47 | 58 | if err := s.Init(common.GlobalConf.AccountConf); err != nil { |
48 | 59 | return err |
49 | 60 | } |
50 | 61 | |
62 | + //开始定时器 | |
63 | + s.TimeOut() | |
64 | + | |
51 | 65 | return s.IHttp.Start() |
52 | 66 | } |
53 | 67 | ... | ... |
... | ... | @@ -0,0 +1,41 @@ |
1 | +package common | |
2 | + | |
3 | +import ( | |
4 | + "fmt" | |
5 | + "github.com/garyburd/redigo/redis" | |
6 | + "pro2d/common/db/redisproxy" | |
7 | +) | |
8 | + | |
9 | +func GetNextRoleId() (string, error) { | |
10 | + relay, err := redisproxy.HGET(AutoIncrement, "role") | |
11 | + if err != nil { | |
12 | + return "", err | |
13 | + } | |
14 | + | |
15 | + relay, err = redisproxy.HINCRBY(AutoIncrement, "role", 1) | |
16 | + ID, err := redis.Int64(relay, err) | |
17 | + if err != nil { | |
18 | + return "", err | |
19 | + } | |
20 | + return fmt.Sprintf("%d", ID), nil | |
21 | +} | |
22 | + | |
23 | +func GetNextUId() (string, error) { | |
24 | + relay, err := redisproxy.HGET(AutoIncrement, "uid") | |
25 | + if err != nil { | |
26 | + return "", err | |
27 | + } | |
28 | + | |
29 | + var ID int64 = 0 | |
30 | + if relay == nil { | |
31 | + ID = 90000 | |
32 | + redisproxy.HSET(AutoIncrement, "uid", ID) | |
33 | + } else { | |
34 | + relay, err = redisproxy.HINCRBY(AutoIncrement, "uid", 1) | |
35 | + ID, err = redis.Int64(relay, err) | |
36 | + if err != nil { | |
37 | + return "", err | |
38 | + } | |
39 | + } | |
40 | + return fmt.Sprintf("%d", ID), nil | |
41 | +} | ... | ... |
... | ... | @@ -0,0 +1,18 @@ |
1 | +package common | |
2 | + | |
3 | +import ( | |
4 | + "fmt" | |
5 | + "pro2d/common/db/redisproxy" | |
6 | + "pro2d/common/logger" | |
7 | + "testing" | |
8 | +) | |
9 | + | |
10 | +func TestGetNextRoleId(t *testing.T) { | |
11 | + if err := redisproxy.ConnectRedis(GlobalConf.GameConf.RedisConf.DB, GlobalConf.GameConf.RedisConf.Auth, GlobalConf.GameConf.RedisConf.Address); err != nil { | |
12 | + logger.Error(err) | |
13 | + return | |
14 | + } | |
15 | + | |
16 | + fmt.Println(GetNextRoleId()) | |
17 | + fmt.Println(GetNextUId()) | |
18 | +} | ... | ... |
common/conf.go
common/const.go
... | ... | @@ -12,11 +12,12 @@ const ( |
12 | 12 | //保存数据时间 |
13 | 13 | SaveDataInterval = 5 //s |
14 | 14 | |
15 | - //id相关 | |
16 | - MaxRoleNum = 1000000 | |
17 | - MaxUidNum = 1000000 | |
18 | - MaxHeroNum = 1000000 | |
19 | - MaxTeamNum = 1000000 | |
15 | + //自增id相关 | |
16 | + MaxCommNum = 1000000 | |
17 | + MaxUidNum = 90000 | |
18 | + | |
19 | + AutoIncrement = "pro2d_autoincrement_set" | |
20 | + AutoIncrementHero = "pro2d_autoincrement:hero" | |
20 | 21 | |
21 | 22 | //gm参数属性 |
22 | 23 | Role_ = "_role" | ... | ... |
common/db/mongoproxy/mongoplugin.go
... | ... | @@ -22,15 +22,15 @@ func DB() *mongo.Database { |
22 | 22 | |
23 | 23 | func ConnectMongo(conf *common.MongoConf) error { |
24 | 24 | var uri string |
25 | - if conf.User!= "" { | |
25 | + if conf.User != "" { | |
26 | 26 | //uri = fmt.Sprintf("mongodb://%s:%s@%s:%d/%s?w=majority", conf.User, conf.Password, conf.Host, conf.Port, conf.DBName) |
27 | 27 | uri = fmt.Sprintf("mongodb://%s:%s@%s:%d/?w=majority", conf.User, conf.Password, conf.Host, conf.Port) |
28 | - }else { | |
28 | + } else { | |
29 | 29 | //uri = fmt.Sprintf("mongodb://%s:%d/%s?w=majority", conf.Host, conf.Port, conf.DBName) |
30 | 30 | uri = fmt.Sprintf("mongodb://%s:%d/?w=majority", conf.Host, conf.Port) |
31 | 31 | } |
32 | 32 | // 设置连接超时时间 |
33 | - ctx, cancel := context.WithTimeout(context.Background(), time.Duration(conf.TimeOut) * time.Second) | |
33 | + ctx, cancel := context.WithTimeout(context.Background(), time.Duration(conf.TimeOut)*time.Second) | |
34 | 34 | defer cancel() |
35 | 35 | // 通过传进来的uri连接相关的配置 |
36 | 36 | o := options.Client().ApplyURI(uri) |
... | ... | @@ -51,7 +51,7 @@ func ConnectMongo(conf *common.MongoConf) error { |
51 | 51 | return nil |
52 | 52 | } |
53 | 53 | |
54 | -func CloseMongo(){ | |
54 | +func CloseMongo() { | |
55 | 55 | mongoClient.Disconnect(context.TODO()) |
56 | 56 | } |
57 | 57 | |
... | ... | @@ -66,13 +66,13 @@ func CreateTable(tb string) error { |
66 | 66 | return DB().CreateCollection(context.TODO(), tb) |
67 | 67 | } |
68 | 68 | |
69 | -func FindOne(pri interface{}, schema interface{}) error { | |
70 | - r := mongoDatabase.Collection(GetCollName(schema)).FindOne(context.TODO(), pri) | |
69 | +func FindOne(coll string, pri interface{}, schema interface{}) error { | |
70 | + r := mongoDatabase.Collection(coll).FindOne(context.TODO(), pri) | |
71 | 71 | return r.Decode(schema) |
72 | 72 | } |
73 | 73 | |
74 | 74 | func FindMany(coll string, key string, val interface{}, schema interface{}) error { |
75 | - r, err := mongoDatabase.Collection(coll).Find(context.TODO(), bson.M{key:val}) | |
75 | + r, err := mongoDatabase.Collection(coll).Find(context.TODO(), bson.M{key: val}) | |
76 | 76 | if err != nil { |
77 | 77 | return err |
78 | 78 | } |
... | ... | @@ -80,14 +80,14 @@ func FindMany(coll string, key string, val interface{}, schema interface{}) erro |
80 | 80 | } |
81 | 81 | |
82 | 82 | func GetBsonD(key string, value interface{}) interface{} { |
83 | - return bson.D{ {key, value}} | |
83 | + return bson.D{{key, value}} | |
84 | 84 | } |
85 | 85 | |
86 | -func GetBsonM(key string, value interface{}) interface{} { | |
86 | +func GetBsonM(key string, value interface{}) interface{} { | |
87 | 87 | return bson.M{key: value} |
88 | 88 | } |
89 | 89 | |
90 | -func GetSchemaType(schema interface{}) reflect.Type { | |
90 | +func GetSchemaType(schema interface{}) reflect.Type { | |
91 | 91 | s := reflect.TypeOf(schema) |
92 | 92 | if s.Kind() == reflect.Ptr { |
93 | 93 | s = reflect.TypeOf(schema).Elem() |
... | ... | @@ -112,7 +112,7 @@ func GetPriKey(schema interface{}) string { |
112 | 112 | return pri |
113 | 113 | } |
114 | 114 | |
115 | -func FindIndex(schema interface{}) (string, []string){ | |
115 | +func FindIndex(schema interface{}) (string, []string) { | |
116 | 116 | s := GetSchemaType(schema) |
117 | 117 | |
118 | 118 | var index []string |
... | ... | @@ -128,21 +128,21 @@ func FindIndex(schema interface{}) (string, []string){ |
128 | 128 | return strings.ToLower(s.Name()), index |
129 | 129 | } |
130 | 130 | |
131 | -func SetUnique(coll, key string) (string, error){ | |
131 | +func SetUnique(coll, key string) (string, error) { | |
132 | 132 | return DB().Collection(coll).Indexes().CreateOne( |
133 | 133 | context.TODO(), |
134 | 134 | mongo.IndexModel{ |
135 | - Keys : bsonx.Doc{{key, bsonx.Int32(1)}}, | |
135 | + Keys: bsonx.Doc{{key, bsonx.Int32(1)}}, | |
136 | 136 | Options: options.Index().SetUnique(true), |
137 | 137 | }, |
138 | 138 | ) |
139 | 139 | } |
140 | 140 | |
141 | -func InitDoc(schema ...interface{}) { | |
141 | +func InitDoc(schema ...interface{}) { | |
142 | 142 | for _, s := range schema { |
143 | 143 | coll, keys := FindIndex(s) |
144 | 144 | CreateTable(coll) |
145 | - for _, index := range keys { | |
145 | + for _, index := range keys { | |
146 | 146 | |
147 | 147 | logger.Debug("InitDoc collect: %v, createIndex: %s", coll, index) |
148 | 148 | res, err := SetUnique(coll, index) |
... | ... | @@ -153,4 +153,4 @@ func InitDoc(schema ...interface{}) { |
153 | 153 | } |
154 | 154 | } |
155 | 155 | |
156 | -} | |
157 | 156 | \ No newline at end of file |
157 | +} | ... | ... |
common/db/redisproxy/redis.go
... | ... | @@ -4,6 +4,7 @@ import ( |
4 | 4 | "github.com/garyburd/redigo/redis" |
5 | 5 | "time" |
6 | 6 | ) |
7 | + | |
7 | 8 | var RedisPool *redis.Pool |
8 | 9 | |
9 | 10 | //conf *conf.ServerConf |
... | ... | @@ -11,7 +12,7 @@ func ConnectRedis(db int, auth, address string) error { |
11 | 12 | RedisPool = &redis.Pool{ |
12 | 13 | //最大活跃连接数,0代表无限 |
13 | 14 | MaxActive: 888, |
14 | - MaxIdle: 20, | |
15 | + MaxIdle: 20, | |
15 | 16 | //闲置连接的超时时间 |
16 | 17 | IdleTimeout: time.Second * 100, |
17 | 18 | //定义拨号获得连接的函数 |
... | ... | @@ -20,35 +21,34 @@ func ConnectRedis(db int, auth, address string) error { |
20 | 21 | if auth != "" { |
21 | 22 | option = append(option, redis.DialPassword(auth)) |
22 | 23 | } |
23 | - return redis.Dial("tcp",address, option...) | |
24 | + return redis.Dial("tcp", address, option...) | |
24 | 25 | }, |
25 | 26 | } |
26 | 27 | return nil |
27 | 28 | } |
28 | 29 | |
29 | -func CloseRedis() { | |
30 | +func CloseRedis() { | |
30 | 31 | RedisPool.Close() |
31 | 32 | } |
32 | 33 | |
33 | 34 | func redisCommand(command string, args ...interface{}) (reply interface{}, err error) { |
34 | 35 | conn := RedisPool.Get() |
35 | 36 | defer conn.Close() |
36 | - return conn.Do(command , args...) | |
37 | + return conn.Do(command, args...) | |
37 | 38 | } |
38 | 39 | |
39 | - | |
40 | 40 | func ExpireKey(key interface{}, ttl interface{}) (reply interface{}, err error) { |
41 | 41 | return redisCommand("expire", key, ttl) |
42 | 42 | } |
43 | 43 | |
44 | 44 | //redis 管道操作 |
45 | -func PipLine(f func(conn redis.Conn)) { | |
45 | +func PipLine(f func(conn redis.Conn)) { | |
46 | 46 | conn := RedisPool.Get() |
47 | 47 | defer conn.Close() |
48 | 48 | f(conn) |
49 | 49 | } |
50 | 50 | |
51 | -func PipLineTest() { | |
51 | +func PipLineTest() { | |
52 | 52 | PipLine(func(c redis.Conn) { |
53 | 53 | c.Send("SET", "foo", "bar") |
54 | 54 | c.Send("GET", "foo") |
... | ... | @@ -79,6 +79,22 @@ func HKEYS(args ...interface{}) (reply interface{}, err error) { |
79 | 79 | return redisCommand("HKEYS", args...) |
80 | 80 | } |
81 | 81 | |
82 | -func HMSET(args ...interface{}) (reply interface{}, err error) { | |
82 | +func HMSET(args ...interface{}) (reply interface{}, err error) { | |
83 | 83 | return redisCommand("HMSET", args...) |
84 | -} | |
85 | 84 | \ No newline at end of file |
85 | +} | |
86 | + | |
87 | +func HMGET(args ...interface{}) (reply interface{}, err error) { | |
88 | + return redisCommand("HMGET", args...) | |
89 | +} | |
90 | + | |
91 | +func HSET(args ...interface{}) (reply interface{}, err error) { | |
92 | + return redisCommand("HSET", args...) | |
93 | +} | |
94 | + | |
95 | +func HGET(args ...interface{}) (reply interface{}, err error) { | |
96 | + return redisCommand("HGET", args...) | |
97 | +} | |
98 | + | |
99 | +func HINCRBY(args ...interface{}) (reply interface{}, err error) { | |
100 | + return redisCommand("HINCRBY", args...) | |
101 | +} | ... | ... |
conf/conf.yaml
... | ... | @@ -21,7 +21,7 @@ etcd: |
21 | 21 | - "192.168.0.206:2379" |
22 | 22 | |
23 | 23 | server_account: |
24 | - id: "1" | |
24 | + id: 1 | |
25 | 25 | name: "account" |
26 | 26 | ip: "192.168.0.206" |
27 | 27 | port: 8080 |
... | ... | @@ -35,7 +35,24 @@ server_account: |
35 | 35 | db: 0 |
36 | 36 | |
37 | 37 | server_game: |
38 | - id: "2" | |
38 | + id: 1 | |
39 | + name: "game" | |
40 | + ip: "192.168.0.206" | |
41 | + encipher: false | |
42 | + port: 8849 | |
43 | + debugport: 6060 | |
44 | + gm: 8880 | |
45 | + pool_size: 1 | |
46 | + plugin_path: "./bin/plugin.so" | |
47 | + mongo: | |
48 | + <<: *default-mongo | |
49 | + dbname: "game" | |
50 | + redis: | |
51 | + <<: *default-redis | |
52 | + db: 0 | |
53 | + | |
54 | +server_game1: | |
55 | + id: 2 | |
39 | 56 | name: "game" |
40 | 57 | ip: "192.168.0.206" |
41 | 58 | encipher: false |
... | ... | @@ -50,7 +67,6 @@ server_game: |
50 | 67 | redis: |
51 | 68 | <<: *default-redis |
52 | 69 | db: 0 |
53 | - | |
54 | 70 | test_client: |
55 | 71 | ip: "127.0.0.1" |
56 | 72 | port: 8850 | ... | ... |
... | ... | @@ -0,0 +1,153 @@ |
1 | +package models | |
2 | + | |
3 | +import ( | |
4 | + "github.com/garyburd/redigo/redis" | |
5 | + "pro2d/common" | |
6 | + "pro2d/common/db/mongoproxy" | |
7 | + "pro2d/common/db/redisproxy" | |
8 | + "pro2d/common/logger" | |
9 | + "pro2d/pb" | |
10 | + "reflect" | |
11 | +) | |
12 | + | |
13 | +type STOIncrement map[interface{}]int64 | |
14 | + | |
15 | +var dbSeedSingleton *DBSeed | |
16 | + | |
17 | +type DBSeed struct { | |
18 | + serverID int64 | |
19 | +} | |
20 | + | |
21 | +func NewDBSeed(serverID int64) *DBSeed { | |
22 | + if dbSeedSingleton == nil { | |
23 | + dbSeedSingleton = &DBSeed{ | |
24 | + serverID: serverID, | |
25 | + } | |
26 | + } | |
27 | + return dbSeedSingleton | |
28 | +} | |
29 | + | |
30 | +func DBSeedS() *DBSeed { | |
31 | + return dbSeedSingleton | |
32 | +} | |
33 | + | |
34 | +func AccountModels() STOIncrement { | |
35 | + return STOIncrement{ | |
36 | + &pb.Account{}: 0, | |
37 | + "uid": common.MaxUidNum, | |
38 | + } | |
39 | +} | |
40 | + | |
41 | +func GameModels() STOIncrement { | |
42 | + return STOIncrement{ | |
43 | + &pb.Increment{}: 0, | |
44 | + &pb.Role{}: common.MaxCommNum, | |
45 | + &pb.Equipment{}: 0, | |
46 | + &pb.Hero{}: 0, | |
47 | + &pb.Prop{}: 0, | |
48 | + &pb.Team{}: 0, | |
49 | + } | |
50 | +} | |
51 | + | |
52 | +//初始化表自增id | |
53 | +func (d *DBSeed) InitAutoIncreUidTable(schema STOIncrement) { | |
54 | + for s, b := range schema { | |
55 | + if b <= 0 { | |
56 | + continue | |
57 | + } | |
58 | + var name string | |
59 | + if reflect.TypeOf(s).Kind() == reflect.String { | |
60 | + name = s.(string) | |
61 | + } else { | |
62 | + name = mongoproxy.GetCollName(s) | |
63 | + } | |
64 | + | |
65 | + autoIncrement := NewIncrement(name) | |
66 | + var increId int64 = 0 | |
67 | + if err := autoIncrement.Load(); err != nil { | |
68 | + //字段不存在 初始化 id | |
69 | + increId = d.serverID * b | |
70 | + autoIncrement.Incre.Key = name | |
71 | + autoIncrement.Incre.Val = increId | |
72 | + autoIncrement.Create() | |
73 | + | |
74 | + } else { | |
75 | + increId = autoIncrement.Incre.Val | |
76 | + } | |
77 | + | |
78 | + //设置到redis中,提供初始自增id | |
79 | + relay, err := redisproxy.HGET(common.AutoIncrement, name) | |
80 | + if err != nil { | |
81 | + logger.Error(err.Error()) | |
82 | + continue | |
83 | + } | |
84 | + | |
85 | + var relayID int64 = 0 | |
86 | + if relay != nil { | |
87 | + relayID, err = redis.Int64(relay, err) | |
88 | + if err != nil { | |
89 | + logger.Error(err.Error()) | |
90 | + continue | |
91 | + } | |
92 | + } | |
93 | + | |
94 | + logger.Debug(relayID, common.AutoIncrement, name) | |
95 | + if relayID == 0 || increId > relayID { | |
96 | + redisproxy.HSET(common.AutoIncrement, name, increId) | |
97 | + } | |
98 | + } | |
99 | +} | |
100 | + | |
101 | +func (d *DBSeed) SaveAutoincrementTimer(schema STOIncrement) { | |
102 | + for s, b := range schema { | |
103 | + if b <= 0 { | |
104 | + continue | |
105 | + } | |
106 | + var name string | |
107 | + if reflect.TypeOf(s).Kind() == reflect.String { | |
108 | + name = s.(string) | |
109 | + } else { | |
110 | + name = mongoproxy.GetCollName(s) | |
111 | + } | |
112 | + | |
113 | + //获取数据库中的id 持久化数据 | |
114 | + autoIncrement := NewIncrement(name) | |
115 | + var dbID int64 = 0 | |
116 | + if err := autoIncrement.Load(); err != nil { | |
117 | + continue | |
118 | + | |
119 | + } else { | |
120 | + dbID = autoIncrement.Incre.Val | |
121 | + } | |
122 | + //获取redis中的id 内存中的数据。获取自增id | |
123 | + relayID, err := redis.Int64(redisproxy.HGET(common.AutoIncrement, name)) | |
124 | + if err != nil { | |
125 | + logger.Error(err.Error()) | |
126 | + continue | |
127 | + } | |
128 | + if relayID > dbID { | |
129 | + //持久化数据 | |
130 | + autoIncrement.SetProperty("val", relayID) | |
131 | + autoIncrement.Update() | |
132 | + } | |
133 | + } | |
134 | +} | |
135 | + | |
136 | +//初始化服务器数据库以及服务器信息表 | |
137 | +func (d *DBSeed) InitServerDatabase(schema STOIncrement) { | |
138 | + for s, _ := range schema { | |
139 | + if reflect.TypeOf(s).Kind() == reflect.String { | |
140 | + continue | |
141 | + } | |
142 | + | |
143 | + coll, keys := mongoproxy.FindIndex(s) | |
144 | + mongoproxy.CreateTable(coll) | |
145 | + for _, index := range keys { | |
146 | + res, err := mongoproxy.SetUnique(coll, index) | |
147 | + if err != nil { | |
148 | + logger.Error("InitDoc unique: %s, err: %v", res, err) | |
149 | + continue | |
150 | + } | |
151 | + } | |
152 | + } | |
153 | +} | ... | ... |
... | ... | @@ -0,0 +1,23 @@ |
1 | +package models | |
2 | + | |
3 | +import ( | |
4 | + "pro2d/common/components" | |
5 | + "pro2d/pb" | |
6 | +) | |
7 | + | |
8 | +type IncrementModels struct { | |
9 | + components.ISchema | |
10 | + Incre *pb.Increment | |
11 | +} | |
12 | + | |
13 | +func NewIncrement(key string) *IncrementModels { | |
14 | + data := &pb.Increment{ | |
15 | + Key: key, | |
16 | + } | |
17 | + | |
18 | + r := &IncrementModels{ | |
19 | + ISchema: NewSchema(data.Key, data), | |
20 | + Incre: data, | |
21 | + } | |
22 | + return r | |
23 | +} | ... | ... |
models/role.go
1 | 1 | package models |
2 | 2 | |
3 | 3 | import ( |
4 | + "fmt" | |
4 | 5 | "github.com/golang/protobuf/proto" |
5 | 6 | "pro2d/common" |
6 | 7 | "pro2d/common/components" |
... | ... | @@ -51,10 +52,22 @@ func NewRole(id string) *RoleModel { |
51 | 52 | return m |
52 | 53 | } |
53 | 54 | |
55 | +func (m *RoleModel) IncreByKey(key string, detal int64) int64 { | |
56 | + v, ok := m.Role.Incres[key] | |
57 | + if !ok { | |
58 | + v = detal | |
59 | + } else { | |
60 | + v += detal | |
61 | + } | |
62 | + m.Role.Incres[key] = v | |
63 | + m.SetProperty("incres", m.Role.Incres) | |
64 | + return v + common.MaxCommNum | |
65 | +} | |
66 | + | |
54 | 67 | func (m *RoleModel) InitRole() { |
55 | 68 | //init hero |
56 | 69 | h1 := pb.Hero{ |
57 | - Id: common.SnowFlack.NextValStr(), | |
70 | + Id: fmt.Sprintf("%s%d", m.Role.Id, m.IncreByKey("hero", 1)), | |
58 | 71 | RoleId: m.Role.Id, |
59 | 72 | Type: 1, |
60 | 73 | Level: 1, |
... | ... | @@ -65,23 +78,23 @@ func (m *RoleModel) InitRole() { |
65 | 78 | m.AddHero(&h1) |
66 | 79 | |
67 | 80 | h2 := h1 |
68 | - h2.Id = common.SnowFlack.NextValStr() | |
81 | + h2.Id = fmt.Sprintf("%s%d", m.Role.Id, m.IncreByKey("hero", 1)) | |
69 | 82 | h2.Type = 2 |
70 | 83 | m.AddHero(&h2) |
71 | 84 | |
72 | 85 | h3 := h1 |
73 | - h3.Id = common.SnowFlack.NextValStr() | |
86 | + h3.Id = fmt.Sprintf("%s%d", m.Role.Id, m.IncreByKey("hero", 1)) | |
74 | 87 | h3.Type = 3 |
75 | 88 | m.AddHero(&h3) |
76 | 89 | |
77 | 90 | h4 := h1 |
78 | - h4.Id = common.SnowFlack.NextValStr() | |
91 | + h4.Id = fmt.Sprintf("%s%d", m.Role.Id, m.IncreByKey("hero", 1)) | |
79 | 92 | h4.Type = 4 |
80 | 93 | m.AddHero(&h4) |
81 | 94 | |
82 | 95 | //init team |
83 | 96 | t1 := pb.Team{ |
84 | - Id: common.SnowFlack.NextValStr(), | |
97 | + Id: fmt.Sprintf("%s%d", m.Role.Id, m.IncreByKey("team", 1)), | |
85 | 98 | RoleId: m.Role.Id, |
86 | 99 | HeroId1: h1.Id, |
87 | 100 | HeroId2: h2.Id, |
... | ... | @@ -90,15 +103,15 @@ func (m *RoleModel) InitRole() { |
90 | 103 | m.AddTeam(&t1) |
91 | 104 | |
92 | 105 | t2 := t1 |
93 | - t2.Id = common.SnowFlack.NextValStr() | |
106 | + t2.Id = fmt.Sprintf("%s%d", m.Role.Id, m.IncreByKey("team", 1)) | |
94 | 107 | m.AddTeam(&t2) |
95 | 108 | |
96 | 109 | t3 := t1 |
97 | - t3.Id = common.SnowFlack.NextValStr() | |
110 | + t3.Id = fmt.Sprintf("%s%d", m.Role.Id, m.IncreByKey("team", 1)) | |
98 | 111 | m.AddTeam(&t3) |
99 | 112 | |
100 | 113 | t4 := t1 |
101 | - t4.Id = common.SnowFlack.NextValStr() | |
114 | + t4.Id = fmt.Sprintf("%s%d", m.Role.Id, m.IncreByKey("team", 1)) | |
102 | 115 | m.AddTeam(&t4) |
103 | 116 | } |
104 | 117 | ... | ... |
models/schema.go
... | ... | @@ -55,6 +55,17 @@ func NewSchema(key string, schema interface{}) *Schema { |
55 | 55 | return sch |
56 | 56 | } |
57 | 57 | |
58 | +func (s *Schema) getPriTag() string { | |
59 | + var pri string | |
60 | + for i := 0; i < s.reflectValue.Type().NumField(); i++ { | |
61 | + if s.reflectValue.Type().Field(i).Tag.Get("pri") == "1" { | |
62 | + pri = strings.ToLower(s.reflectValue.Type().Field(i).Name) | |
63 | + break | |
64 | + } | |
65 | + } | |
66 | + return pri | |
67 | +} | |
68 | + | |
58 | 69 | func (s *Schema) FindIndex() (string, []string) { |
59 | 70 | var index []string |
60 | 71 | for i := 0; i < s.reflectValue.Type().NumField(); i++ { |
... | ... | @@ -186,13 +197,12 @@ func (s *Schema) ParseFields(message protoreflect.Message, properties map[string |
186 | 197 | return ids |
187 | 198 | } |
188 | 199 | |
189 | -func (s *Schema) getPriTag() string { | |
190 | - var pri string | |
191 | - for i := 0; i < s.reflectValue.Type().NumField(); i++ { | |
192 | - if s.reflectValue.Type().Field(i).Tag.Get("pri") == "1" { | |
193 | - pri = strings.ToLower(s.reflectValue.Type().Field(i).Name) | |
194 | - break | |
200 | +func (s *Schema) IncrPropertyChan(conn components.IConnection, key string, val int64) { | |
201 | + if conn != nil { | |
202 | + conn.CustomChan() <- func() { | |
203 | + s.IncrProperty(key, val) | |
195 | 204 | } |
205 | + } else { | |
206 | + s.IncrProperty(key, val) | |
196 | 207 | } |
197 | - return pri | |
198 | 208 | } | ... | ... |
pb/models.pb.go
... | ... | @@ -391,28 +391,84 @@ func (x *Team) GetHeroId3() string { |
391 | 391 | return "" |
392 | 392 | } |
393 | 393 | |
394 | +type Increment struct { | |
395 | + state protoimpl.MessageState | |
396 | + sizeCache protoimpl.SizeCache | |
397 | + unknownFields protoimpl.UnknownFields | |
398 | + | |
399 | + Key string `protobuf:"bytes,1,opt,name=key,proto3" json:"key,omitempty" index:"unique" pri:"1"` //@inject_tag: index:"unique" pri:"1" | |
400 | + Val int64 `protobuf:"varint,2,opt,name=val,proto3" json:"val,omitempty"` | |
401 | +} | |
402 | + | |
403 | +func (x *Increment) Reset() { | |
404 | + *x = Increment{} | |
405 | + if protoimpl.UnsafeEnabled { | |
406 | + mi := &file_models_proto_msgTypes[5] | |
407 | + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) | |
408 | + ms.StoreMessageInfo(mi) | |
409 | + } | |
410 | +} | |
411 | + | |
412 | +func (x *Increment) String() string { | |
413 | + return protoimpl.X.MessageStringOf(x) | |
414 | +} | |
415 | + | |
416 | +func (*Increment) ProtoMessage() {} | |
417 | + | |
418 | +func (x *Increment) ProtoReflect() protoreflect.Message { | |
419 | + mi := &file_models_proto_msgTypes[5] | |
420 | + if protoimpl.UnsafeEnabled && x != nil { | |
421 | + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) | |
422 | + if ms.LoadMessageInfo() == nil { | |
423 | + ms.StoreMessageInfo(mi) | |
424 | + } | |
425 | + return ms | |
426 | + } | |
427 | + return mi.MessageOf(x) | |
428 | +} | |
429 | + | |
430 | +// Deprecated: Use Increment.ProtoReflect.Descriptor instead. | |
431 | +func (*Increment) Descriptor() ([]byte, []int) { | |
432 | + return file_models_proto_rawDescGZIP(), []int{5} | |
433 | +} | |
434 | + | |
435 | +func (x *Increment) GetKey() string { | |
436 | + if x != nil { | |
437 | + return x.Key | |
438 | + } | |
439 | + return "" | |
440 | +} | |
441 | + | |
442 | +func (x *Increment) GetVal() int64 { | |
443 | + if x != nil { | |
444 | + return x.Val | |
445 | + } | |
446 | + return 0 | |
447 | +} | |
448 | + | |
394 | 449 | type Role struct { |
395 | 450 | state protoimpl.MessageState |
396 | 451 | sizeCache protoimpl.SizeCache |
397 | 452 | unknownFields protoimpl.UnknownFields |
398 | 453 | |
399 | - Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty" index:"unique" pri:"1"` // @inject_tag: index:"unique" pri:"1" | |
400 | - Uid string `protobuf:"bytes,2,opt,name=uid,proto3" json:"uid,omitempty" index:"unique"` // @inject_tag: index:"unique" | |
401 | - Device string `protobuf:"bytes,3,opt,name=device,proto3" json:"device,omitempty"` | |
402 | - Nick string `protobuf:"bytes,4,opt,name=nick,proto3" json:"nick,omitempty"` | |
403 | - Level int32 `protobuf:"varint,5,opt,name=level,proto3" json:"level,omitempty"` | |
404 | - Exp int64 `protobuf:"varint,6,opt,name=exp,proto3" json:"exp,omitempty"` | |
405 | - Hp int64 `protobuf:"varint,7,opt,name=hp,proto3" json:"hp,omitempty"` | |
406 | - HpMax int64 `protobuf:"varint,8,opt,name=hp_max,json=hpMax,proto3" json:"hp_max,omitempty"` | |
407 | - BuyR string `protobuf:"bytes,11,opt,name=buy_r,json=buyR,proto3" json:"buy_r,omitempty"` | |
408 | - PayR string `protobuf:"bytes,12,opt,name=pay_r,json=payR,proto3" json:"pay_r,omitempty"` | |
409 | - Del bool `protobuf:"varint,13,opt,name=del,proto3" json:"del,omitempty"` | |
454 | + Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty" index:"unique" pri:"1"` // @inject_tag: index:"unique" pri:"1" | |
455 | + Uid string `protobuf:"bytes,2,opt,name=uid,proto3" json:"uid,omitempty" index:"unique"` // @inject_tag: index:"unique" | |
456 | + Device string `protobuf:"bytes,3,opt,name=device,proto3" json:"device,omitempty"` | |
457 | + Nick string `protobuf:"bytes,4,opt,name=nick,proto3" json:"nick,omitempty"` | |
458 | + Level int32 `protobuf:"varint,5,opt,name=level,proto3" json:"level,omitempty"` | |
459 | + Exp int64 `protobuf:"varint,6,opt,name=exp,proto3" json:"exp,omitempty"` | |
460 | + Hp int64 `protobuf:"varint,7,opt,name=hp,proto3" json:"hp,omitempty"` | |
461 | + HpMax int64 `protobuf:"varint,8,opt,name=hp_max,json=hpMax,proto3" json:"hp_max,omitempty"` | |
462 | + BuyR string `protobuf:"bytes,11,opt,name=buy_r,json=buyR,proto3" json:"buy_r,omitempty"` | |
463 | + PayR string `protobuf:"bytes,12,opt,name=pay_r,json=payR,proto3" json:"pay_r,omitempty"` | |
464 | + Del bool `protobuf:"varint,13,opt,name=del,proto3" json:"del,omitempty"` | |
465 | + Incres map[string]int64 `protobuf:"bytes,14,rep,name=incres,proto3" json:"incres,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"varint,2,opt,name=value,proto3"` | |
410 | 466 | } |
411 | 467 | |
412 | 468 | func (x *Role) Reset() { |
413 | 469 | *x = Role{} |
414 | 470 | if protoimpl.UnsafeEnabled { |
415 | - mi := &file_models_proto_msgTypes[5] | |
471 | + mi := &file_models_proto_msgTypes[6] | |
416 | 472 | ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) |
417 | 473 | ms.StoreMessageInfo(mi) |
418 | 474 | } |
... | ... | @@ -425,7 +481,7 @@ func (x *Role) String() string { |
425 | 481 | func (*Role) ProtoMessage() {} |
426 | 482 | |
427 | 483 | func (x *Role) ProtoReflect() protoreflect.Message { |
428 | - mi := &file_models_proto_msgTypes[5] | |
484 | + mi := &file_models_proto_msgTypes[6] | |
429 | 485 | if protoimpl.UnsafeEnabled && x != nil { |
430 | 486 | ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) |
431 | 487 | if ms.LoadMessageInfo() == nil { |
... | ... | @@ -438,7 +494,7 @@ func (x *Role) ProtoReflect() protoreflect.Message { |
438 | 494 | |
439 | 495 | // Deprecated: Use Role.ProtoReflect.Descriptor instead. |
440 | 496 | func (*Role) Descriptor() ([]byte, []int) { |
441 | - return file_models_proto_rawDescGZIP(), []int{5} | |
497 | + return file_models_proto_rawDescGZIP(), []int{6} | |
442 | 498 | } |
443 | 499 | |
444 | 500 | func (x *Role) GetId() string { |
... | ... | @@ -518,6 +574,13 @@ func (x *Role) GetDel() bool { |
518 | 574 | return false |
519 | 575 | } |
520 | 576 | |
577 | +func (x *Role) GetIncres() map[string]int64 { | |
578 | + if x != nil { | |
579 | + return x.Incres | |
580 | + } | |
581 | + return nil | |
582 | +} | |
583 | + | |
521 | 584 | var File_models_proto protoreflect.FileDescriptor |
522 | 585 | |
523 | 586 | var file_models_proto_rawDesc = []byte{ |
... | ... | @@ -558,22 +621,32 @@ var file_models_proto_rawDesc = []byte{ |
558 | 621 | 0x12, 0x19, 0x0a, 0x08, 0x68, 0x65, 0x72, 0x6f, 0x5f, 0x69, 0x64, 0x32, 0x18, 0x04, 0x20, 0x01, |
559 | 622 | 0x28, 0x09, 0x52, 0x07, 0x68, 0x65, 0x72, 0x6f, 0x49, 0x64, 0x32, 0x12, 0x19, 0x0a, 0x08, 0x68, |
560 | 623 | 0x65, 0x72, 0x6f, 0x5f, 0x69, 0x64, 0x33, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x68, |
561 | - 0x65, 0x72, 0x6f, 0x49, 0x64, 0x33, 0x22, 0xdf, 0x01, 0x0a, 0x04, 0x52, 0x6f, 0x6c, 0x65, 0x12, | |
562 | - 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, | |
563 | - 0x10, 0x0a, 0x03, 0x75, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x75, 0x69, | |
564 | - 0x64, 0x12, 0x16, 0x0a, 0x06, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, | |
565 | - 0x09, 0x52, 0x06, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x69, 0x63, | |
566 | - 0x6b, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x69, 0x63, 0x6b, 0x12, 0x14, 0x0a, | |
567 | - 0x05, 0x6c, 0x65, 0x76, 0x65, 0x6c, 0x18, 0x05, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x6c, 0x65, | |
568 | - 0x76, 0x65, 0x6c, 0x12, 0x10, 0x0a, 0x03, 0x65, 0x78, 0x70, 0x18, 0x06, 0x20, 0x01, 0x28, 0x03, | |
569 | - 0x52, 0x03, 0x65, 0x78, 0x70, 0x12, 0x0e, 0x0a, 0x02, 0x68, 0x70, 0x18, 0x07, 0x20, 0x01, 0x28, | |
570 | - 0x03, 0x52, 0x02, 0x68, 0x70, 0x12, 0x15, 0x0a, 0x06, 0x68, 0x70, 0x5f, 0x6d, 0x61, 0x78, 0x18, | |
571 | - 0x08, 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x68, 0x70, 0x4d, 0x61, 0x78, 0x12, 0x13, 0x0a, 0x05, | |
572 | - 0x62, 0x75, 0x79, 0x5f, 0x72, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x62, 0x75, 0x79, | |
573 | - 0x52, 0x12, 0x13, 0x0a, 0x05, 0x70, 0x61, 0x79, 0x5f, 0x72, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x09, | |
574 | - 0x52, 0x04, 0x70, 0x61, 0x79, 0x52, 0x12, 0x10, 0x0a, 0x03, 0x64, 0x65, 0x6c, 0x18, 0x0d, 0x20, | |
575 | - 0x01, 0x28, 0x08, 0x52, 0x03, 0x64, 0x65, 0x6c, 0x42, 0x0a, 0x5a, 0x08, 0x2e, 0x2e, 0x2f, 0x70, | |
576 | - 0x62, 0x3b, 0x70, 0x62, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, | |
624 | + 0x65, 0x72, 0x6f, 0x49, 0x64, 0x33, 0x22, 0x2f, 0x0a, 0x09, 0x49, 0x6e, 0x63, 0x72, 0x65, 0x6d, | |
625 | + 0x65, 0x6e, 0x74, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, | |
626 | + 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x76, 0x61, 0x6c, 0x18, 0x02, 0x20, 0x01, | |
627 | + 0x28, 0x03, 0x52, 0x03, 0x76, 0x61, 0x6c, 0x22, 0xcc, 0x02, 0x0a, 0x04, 0x52, 0x6f, 0x6c, 0x65, | |
628 | + 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, | |
629 | + 0x12, 0x10, 0x0a, 0x03, 0x75, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x75, | |
630 | + 0x69, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x18, 0x03, 0x20, 0x01, | |
631 | + 0x28, 0x09, 0x52, 0x06, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x69, | |
632 | + 0x63, 0x6b, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x69, 0x63, 0x6b, 0x12, 0x14, | |
633 | + 0x0a, 0x05, 0x6c, 0x65, 0x76, 0x65, 0x6c, 0x18, 0x05, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x6c, | |
634 | + 0x65, 0x76, 0x65, 0x6c, 0x12, 0x10, 0x0a, 0x03, 0x65, 0x78, 0x70, 0x18, 0x06, 0x20, 0x01, 0x28, | |
635 | + 0x03, 0x52, 0x03, 0x65, 0x78, 0x70, 0x12, 0x0e, 0x0a, 0x02, 0x68, 0x70, 0x18, 0x07, 0x20, 0x01, | |
636 | + 0x28, 0x03, 0x52, 0x02, 0x68, 0x70, 0x12, 0x15, 0x0a, 0x06, 0x68, 0x70, 0x5f, 0x6d, 0x61, 0x78, | |
637 | + 0x18, 0x08, 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x68, 0x70, 0x4d, 0x61, 0x78, 0x12, 0x13, 0x0a, | |
638 | + 0x05, 0x62, 0x75, 0x79, 0x5f, 0x72, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x62, 0x75, | |
639 | + 0x79, 0x52, 0x12, 0x13, 0x0a, 0x05, 0x70, 0x61, 0x79, 0x5f, 0x72, 0x18, 0x0c, 0x20, 0x01, 0x28, | |
640 | + 0x09, 0x52, 0x04, 0x70, 0x61, 0x79, 0x52, 0x12, 0x10, 0x0a, 0x03, 0x64, 0x65, 0x6c, 0x18, 0x0d, | |
641 | + 0x20, 0x01, 0x28, 0x08, 0x52, 0x03, 0x64, 0x65, 0x6c, 0x12, 0x30, 0x0a, 0x06, 0x69, 0x6e, 0x63, | |
642 | + 0x72, 0x65, 0x73, 0x18, 0x0e, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x6d, 0x6f, 0x64, 0x65, | |
643 | + 0x6c, 0x73, 0x2e, 0x52, 0x6f, 0x6c, 0x65, 0x2e, 0x49, 0x6e, 0x63, 0x72, 0x65, 0x73, 0x45, 0x6e, | |
644 | + 0x74, 0x72, 0x79, 0x52, 0x06, 0x69, 0x6e, 0x63, 0x72, 0x65, 0x73, 0x1a, 0x39, 0x0a, 0x0b, 0x49, | |
645 | + 0x6e, 0x63, 0x72, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, | |
646 | + 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, | |
647 | + 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x76, 0x61, 0x6c, | |
648 | + 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x42, 0x0a, 0x5a, 0x08, 0x2e, 0x2e, 0x2f, 0x70, 0x62, 0x3b, | |
649 | + 0x70, 0x62, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, | |
577 | 650 | } |
578 | 651 | |
579 | 652 | var ( |
... | ... | @@ -588,21 +661,24 @@ func file_models_proto_rawDescGZIP() []byte { |
588 | 661 | return file_models_proto_rawDescData |
589 | 662 | } |
590 | 663 | |
591 | -var file_models_proto_msgTypes = make([]protoimpl.MessageInfo, 6) | |
664 | +var file_models_proto_msgTypes = make([]protoimpl.MessageInfo, 8) | |
592 | 665 | var file_models_proto_goTypes = []interface{}{ |
593 | 666 | (*Account)(nil), // 0: models.Account |
594 | 667 | (*Hero)(nil), // 1: models.Hero |
595 | 668 | (*Equipment)(nil), // 2: models.Equipment |
596 | 669 | (*Prop)(nil), // 3: models.Prop |
597 | 670 | (*Team)(nil), // 4: models.Team |
598 | - (*Role)(nil), // 5: models.Role | |
671 | + (*Increment)(nil), // 5: models.Increment | |
672 | + (*Role)(nil), // 6: models.Role | |
673 | + nil, // 7: models.Role.IncresEntry | |
599 | 674 | } |
600 | 675 | var file_models_proto_depIdxs = []int32{ |
601 | - 0, // [0:0] is the sub-list for method output_type | |
602 | - 0, // [0:0] is the sub-list for method input_type | |
603 | - 0, // [0:0] is the sub-list for extension type_name | |
604 | - 0, // [0:0] is the sub-list for extension extendee | |
605 | - 0, // [0:0] is the sub-list for field type_name | |
676 | + 7, // 0: models.Role.incres:type_name -> models.Role.IncresEntry | |
677 | + 1, // [1:1] is the sub-list for method output_type | |
678 | + 1, // [1:1] is the sub-list for method input_type | |
679 | + 1, // [1:1] is the sub-list for extension type_name | |
680 | + 1, // [1:1] is the sub-list for extension extendee | |
681 | + 0, // [0:1] is the sub-list for field type_name | |
606 | 682 | } |
607 | 683 | |
608 | 684 | func init() { file_models_proto_init() } |
... | ... | @@ -672,6 +748,18 @@ func file_models_proto_init() { |
672 | 748 | } |
673 | 749 | } |
674 | 750 | file_models_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} { |
751 | + switch v := v.(*Increment); i { | |
752 | + case 0: | |
753 | + return &v.state | |
754 | + case 1: | |
755 | + return &v.sizeCache | |
756 | + case 2: | |
757 | + return &v.unknownFields | |
758 | + default: | |
759 | + return nil | |
760 | + } | |
761 | + } | |
762 | + file_models_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} { | |
675 | 763 | switch v := v.(*Role); i { |
676 | 764 | case 0: |
677 | 765 | return &v.state |
... | ... | @@ -690,7 +778,7 @@ func file_models_proto_init() { |
690 | 778 | GoPackagePath: reflect.TypeOf(x{}).PkgPath(), |
691 | 779 | RawDescriptor: file_models_proto_rawDesc, |
692 | 780 | NumEnums: 0, |
693 | - NumMessages: 6, | |
781 | + NumMessages: 8, | |
694 | 782 | NumExtensions: 0, |
695 | 783 | NumServices: 0, |
696 | 784 | }, | ... | ... |