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,14 +39,18 @@ func CreateRpc(agent components.IAgent, msg components.IMessage) (int32, interfa | ||
39 | req := pb.CreateReq{} | 39 | req := pb.CreateReq{} |
40 | if err := proto.Unmarshal(msg.GetData(), &req); err != nil { | 40 | if err := proto.Unmarshal(msg.GetData(), &req); err != nil { |
41 | logger.Error("CreateRpc err: %v", err) | 41 | logger.Error("CreateRpc err: %v", err) |
42 | - return 1, nil | 42 | + return 1, err |
43 | } | 43 | } |
44 | role := models.RoleExistByUid(req.Token) | 44 | role := models.RoleExistByUid(req.Token) |
45 | if role != nil { | 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 | role = models.NewRole(roleId) | 54 | role = models.NewRole(roleId) |
51 | role.Role.Uid = req.Token | 55 | role.Role.Uid = req.Token |
52 | role.Role.Nick = getRandomName() | 56 | role.Role.Nick = getRandomName() |
cmd/gameserver/service/game.go
@@ -49,7 +49,6 @@ func NewGameServer(sconf *common.SConf) (*GameServer, error) { | @@ -49,7 +49,6 @@ func NewGameServer(sconf *common.SConf) (*GameServer, error) { | ||
49 | if err != nil { | 49 | if err != nil { |
50 | return nil, err | 50 | return nil, err |
51 | } | 51 | } |
52 | - models.InitGameModels() | ||
53 | 52 | ||
54 | //redis init | 53 | //redis init |
55 | if err = redisproxy.ConnectRedis(sconf.RedisConf.DB, sconf.RedisConf.Auth, sconf.RedisConf.Address); err != nil { | 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,15 +60,29 @@ func NewGameServer(sconf *common.SConf) (*GameServer, error) { | ||
61 | if err != nil { | 60 | if err != nil { |
62 | return nil, err | 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 | return s, nil | 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 | func (s *GameServer) Start() error { | 79 | func (s *GameServer) Start() error { |
70 | //设置随机种子 | 80 | //设置随机种子 |
71 | rand.Seed(time.Now().Unix()) | 81 | rand.Seed(time.Now().Unix()) |
72 | 82 | ||
83 | + //启动定时器 | ||
84 | + s.Timeout() | ||
85 | + | ||
73 | return s.IServer.Start() | 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,9 +37,13 @@ func (h *AccountAction) Register(c *gin.Context) (int, interface{}) { | ||
37 | return 3, "account exists: " + register.Phone | 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 | account.Password = common.Md5V(register.Password) | 45 | account.Password = common.Md5V(register.Password) |
42 | - if err := account.Create(); err != nil { | 46 | + if err = account.Create(); err != nil { |
43 | return 4, "account register err: " + err.Error() | 47 | return 4, "account register err: " + err.Error() |
44 | } | 48 | } |
45 | account.Password = register.Password | 49 | account.Password = register.Password |
cmd/httpserver/http.go
@@ -12,11 +12,13 @@ import ( | @@ -12,11 +12,13 @@ import ( | ||
12 | "pro2d/common/logger" | 12 | "pro2d/common/logger" |
13 | "pro2d/models" | 13 | "pro2d/models" |
14 | "syscall" | 14 | "syscall" |
15 | + "time" | ||
15 | ) | 16 | ) |
16 | 17 | ||
17 | type AccountServer struct { | 18 | type AccountServer struct { |
18 | components.IHttp | 19 | components.IHttp |
19 | EtcdClient *etcd.EtcdClient | 20 | EtcdClient *etcd.EtcdClient |
21 | + Sconf *common.SConf | ||
20 | } | 22 | } |
21 | 23 | ||
22 | func NewAccountServer(version string, port ...string) *AccountServer { | 24 | func NewAccountServer(version string, port ...string) *AccountServer { |
@@ -24,6 +26,8 @@ func NewAccountServer(version string, port ...string) *AccountServer { | @@ -24,6 +26,8 @@ func NewAccountServer(version string, port ...string) *AccountServer { | ||
24 | } | 26 | } |
25 | 27 | ||
26 | func (s *AccountServer) Init(sconf *common.SConf) error { | 28 | func (s *AccountServer) Init(sconf *common.SConf) error { |
29 | + s.Sconf = sconf | ||
30 | + | ||
27 | //mgo init | 31 | //mgo init |
28 | err := mongoproxy.ConnectMongo(sconf.MongoConf) | 32 | err := mongoproxy.ConnectMongo(sconf.MongoConf) |
29 | 33 | ||
@@ -37,17 +41,27 @@ func (s *AccountServer) Init(sconf *common.SConf) error { | @@ -37,17 +41,27 @@ func (s *AccountServer) Init(sconf *common.SConf) error { | ||
37 | if err != nil { | 41 | if err != nil { |
38 | return err | 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 | return nil | 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 | func (s *AccountServer) Start() error { | 57 | func (s *AccountServer) Start() error { |
47 | if err := s.Init(common.GlobalConf.AccountConf); err != nil { | 58 | if err := s.Init(common.GlobalConf.AccountConf); err != nil { |
48 | return err | 59 | return err |
49 | } | 60 | } |
50 | 61 | ||
62 | + //开始定时器 | ||
63 | + s.TimeOut() | ||
64 | + | ||
51 | return s.IHttp.Start() | 65 | return s.IHttp.Start() |
52 | } | 66 | } |
53 | 67 |
@@ -0,0 +1,41 @@ | @@ -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 @@ | @@ -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
@@ -32,7 +32,7 @@ type MongoConf struct { | @@ -32,7 +32,7 @@ type MongoConf struct { | ||
32 | } | 32 | } |
33 | 33 | ||
34 | type SConf struct { | 34 | type SConf struct { |
35 | - ID string `yaml:"id"` | 35 | + ID int64 `yaml:"id"` |
36 | Name string `yaml:"name"` | 36 | Name string `yaml:"name"` |
37 | IP string `yaml:"ip"` | 37 | IP string `yaml:"ip"` |
38 | Port int `yaml:"port"` | 38 | Port int `yaml:"port"` |
common/const.go
@@ -12,11 +12,12 @@ const ( | @@ -12,11 +12,12 @@ const ( | ||
12 | //保存数据时间 | 12 | //保存数据时间 |
13 | SaveDataInterval = 5 //s | 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 | //gm参数属性 | 22 | //gm参数属性 |
22 | Role_ = "_role" | 23 | Role_ = "_role" |
common/db/mongoproxy/mongoplugin.go
@@ -22,15 +22,15 @@ func DB() *mongo.Database { | @@ -22,15 +22,15 @@ func DB() *mongo.Database { | ||
22 | 22 | ||
23 | func ConnectMongo(conf *common.MongoConf) error { | 23 | func ConnectMongo(conf *common.MongoConf) error { |
24 | var uri string | 24 | var uri string |
25 | - if conf.User!= "" { | 25 | + if conf.User != "" { |
26 | //uri = fmt.Sprintf("mongodb://%s:%s@%s:%d/%s?w=majority", conf.User, conf.Password, conf.Host, conf.Port, conf.DBName) | 26 | //uri = fmt.Sprintf("mongodb://%s:%s@%s:%d/%s?w=majority", conf.User, conf.Password, conf.Host, conf.Port, conf.DBName) |
27 | uri = fmt.Sprintf("mongodb://%s:%s@%s:%d/?w=majority", conf.User, conf.Password, conf.Host, conf.Port) | 27 | uri = fmt.Sprintf("mongodb://%s:%s@%s:%d/?w=majority", conf.User, conf.Password, conf.Host, conf.Port) |
28 | - }else { | 28 | + } else { |
29 | //uri = fmt.Sprintf("mongodb://%s:%d/%s?w=majority", conf.Host, conf.Port, conf.DBName) | 29 | //uri = fmt.Sprintf("mongodb://%s:%d/%s?w=majority", conf.Host, conf.Port, conf.DBName) |
30 | uri = fmt.Sprintf("mongodb://%s:%d/?w=majority", conf.Host, conf.Port) | 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 | defer cancel() | 34 | defer cancel() |
35 | // 通过传进来的uri连接相关的配置 | 35 | // 通过传进来的uri连接相关的配置 |
36 | o := options.Client().ApplyURI(uri) | 36 | o := options.Client().ApplyURI(uri) |
@@ -51,7 +51,7 @@ func ConnectMongo(conf *common.MongoConf) error { | @@ -51,7 +51,7 @@ func ConnectMongo(conf *common.MongoConf) error { | ||
51 | return nil | 51 | return nil |
52 | } | 52 | } |
53 | 53 | ||
54 | -func CloseMongo(){ | 54 | +func CloseMongo() { |
55 | mongoClient.Disconnect(context.TODO()) | 55 | mongoClient.Disconnect(context.TODO()) |
56 | } | 56 | } |
57 | 57 | ||
@@ -66,13 +66,13 @@ func CreateTable(tb string) error { | @@ -66,13 +66,13 @@ func CreateTable(tb string) error { | ||
66 | return DB().CreateCollection(context.TODO(), tb) | 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 | return r.Decode(schema) | 71 | return r.Decode(schema) |
72 | } | 72 | } |
73 | 73 | ||
74 | func FindMany(coll string, key string, val interface{}, schema interface{}) error { | 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 | if err != nil { | 76 | if err != nil { |
77 | return err | 77 | return err |
78 | } | 78 | } |
@@ -80,14 +80,14 @@ func FindMany(coll string, key string, val interface{}, schema interface{}) erro | @@ -80,14 +80,14 @@ func FindMany(coll string, key string, val interface{}, schema interface{}) erro | ||
80 | } | 80 | } |
81 | 81 | ||
82 | func GetBsonD(key string, value interface{}) interface{} { | 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 | return bson.M{key: value} | 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 | s := reflect.TypeOf(schema) | 91 | s := reflect.TypeOf(schema) |
92 | if s.Kind() == reflect.Ptr { | 92 | if s.Kind() == reflect.Ptr { |
93 | s = reflect.TypeOf(schema).Elem() | 93 | s = reflect.TypeOf(schema).Elem() |
@@ -112,7 +112,7 @@ func GetPriKey(schema interface{}) string { | @@ -112,7 +112,7 @@ func GetPriKey(schema interface{}) string { | ||
112 | return pri | 112 | return pri |
113 | } | 113 | } |
114 | 114 | ||
115 | -func FindIndex(schema interface{}) (string, []string){ | 115 | +func FindIndex(schema interface{}) (string, []string) { |
116 | s := GetSchemaType(schema) | 116 | s := GetSchemaType(schema) |
117 | 117 | ||
118 | var index []string | 118 | var index []string |
@@ -128,21 +128,21 @@ func FindIndex(schema interface{}) (string, []string){ | @@ -128,21 +128,21 @@ func FindIndex(schema interface{}) (string, []string){ | ||
128 | return strings.ToLower(s.Name()), index | 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 | return DB().Collection(coll).Indexes().CreateOne( | 132 | return DB().Collection(coll).Indexes().CreateOne( |
133 | context.TODO(), | 133 | context.TODO(), |
134 | mongo.IndexModel{ | 134 | mongo.IndexModel{ |
135 | - Keys : bsonx.Doc{{key, bsonx.Int32(1)}}, | 135 | + Keys: bsonx.Doc{{key, bsonx.Int32(1)}}, |
136 | Options: options.Index().SetUnique(true), | 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 | for _, s := range schema { | 142 | for _, s := range schema { |
143 | coll, keys := FindIndex(s) | 143 | coll, keys := FindIndex(s) |
144 | CreateTable(coll) | 144 | CreateTable(coll) |
145 | - for _, index := range keys { | 145 | + for _, index := range keys { |
146 | 146 | ||
147 | logger.Debug("InitDoc collect: %v, createIndex: %s", coll, index) | 147 | logger.Debug("InitDoc collect: %v, createIndex: %s", coll, index) |
148 | res, err := SetUnique(coll, index) | 148 | res, err := SetUnique(coll, index) |
@@ -153,4 +153,4 @@ func InitDoc(schema ...interface{}) { | @@ -153,4 +153,4 @@ func InitDoc(schema ...interface{}) { | ||
153 | } | 153 | } |
154 | } | 154 | } |
155 | 155 | ||
156 | -} | ||
157 | \ No newline at end of file | 156 | \ No newline at end of file |
157 | +} |
common/db/redisproxy/redis.go
@@ -4,6 +4,7 @@ import ( | @@ -4,6 +4,7 @@ import ( | ||
4 | "github.com/garyburd/redigo/redis" | 4 | "github.com/garyburd/redigo/redis" |
5 | "time" | 5 | "time" |
6 | ) | 6 | ) |
7 | + | ||
7 | var RedisPool *redis.Pool | 8 | var RedisPool *redis.Pool |
8 | 9 | ||
9 | //conf *conf.ServerConf | 10 | //conf *conf.ServerConf |
@@ -11,7 +12,7 @@ func ConnectRedis(db int, auth, address string) error { | @@ -11,7 +12,7 @@ func ConnectRedis(db int, auth, address string) error { | ||
11 | RedisPool = &redis.Pool{ | 12 | RedisPool = &redis.Pool{ |
12 | //最大活跃连接数,0代表无限 | 13 | //最大活跃连接数,0代表无限 |
13 | MaxActive: 888, | 14 | MaxActive: 888, |
14 | - MaxIdle: 20, | 15 | + MaxIdle: 20, |
15 | //闲置连接的超时时间 | 16 | //闲置连接的超时时间 |
16 | IdleTimeout: time.Second * 100, | 17 | IdleTimeout: time.Second * 100, |
17 | //定义拨号获得连接的函数 | 18 | //定义拨号获得连接的函数 |
@@ -20,35 +21,34 @@ func ConnectRedis(db int, auth, address string) error { | @@ -20,35 +21,34 @@ func ConnectRedis(db int, auth, address string) error { | ||
20 | if auth != "" { | 21 | if auth != "" { |
21 | option = append(option, redis.DialPassword(auth)) | 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 | return nil | 27 | return nil |
27 | } | 28 | } |
28 | 29 | ||
29 | -func CloseRedis() { | 30 | +func CloseRedis() { |
30 | RedisPool.Close() | 31 | RedisPool.Close() |
31 | } | 32 | } |
32 | 33 | ||
33 | func redisCommand(command string, args ...interface{}) (reply interface{}, err error) { | 34 | func redisCommand(command string, args ...interface{}) (reply interface{}, err error) { |
34 | conn := RedisPool.Get() | 35 | conn := RedisPool.Get() |
35 | defer conn.Close() | 36 | defer conn.Close() |
36 | - return conn.Do(command , args...) | 37 | + return conn.Do(command, args...) |
37 | } | 38 | } |
38 | 39 | ||
39 | - | ||
40 | func ExpireKey(key interface{}, ttl interface{}) (reply interface{}, err error) { | 40 | func ExpireKey(key interface{}, ttl interface{}) (reply interface{}, err error) { |
41 | return redisCommand("expire", key, ttl) | 41 | return redisCommand("expire", key, ttl) |
42 | } | 42 | } |
43 | 43 | ||
44 | //redis 管道操作 | 44 | //redis 管道操作 |
45 | -func PipLine(f func(conn redis.Conn)) { | 45 | +func PipLine(f func(conn redis.Conn)) { |
46 | conn := RedisPool.Get() | 46 | conn := RedisPool.Get() |
47 | defer conn.Close() | 47 | defer conn.Close() |
48 | f(conn) | 48 | f(conn) |
49 | } | 49 | } |
50 | 50 | ||
51 | -func PipLineTest() { | 51 | +func PipLineTest() { |
52 | PipLine(func(c redis.Conn) { | 52 | PipLine(func(c redis.Conn) { |
53 | c.Send("SET", "foo", "bar") | 53 | c.Send("SET", "foo", "bar") |
54 | c.Send("GET", "foo") | 54 | c.Send("GET", "foo") |
@@ -79,6 +79,22 @@ func HKEYS(args ...interface{}) (reply interface{}, err error) { | @@ -79,6 +79,22 @@ func HKEYS(args ...interface{}) (reply interface{}, err error) { | ||
79 | return redisCommand("HKEYS", args...) | 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 | return redisCommand("HMSET", args...) | 83 | return redisCommand("HMSET", args...) |
84 | -} | ||
85 | \ No newline at end of file | 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,7 +21,7 @@ etcd: | ||
21 | - "192.168.0.206:2379" | 21 | - "192.168.0.206:2379" |
22 | 22 | ||
23 | server_account: | 23 | server_account: |
24 | - id: "1" | 24 | + id: 1 |
25 | name: "account" | 25 | name: "account" |
26 | ip: "192.168.0.206" | 26 | ip: "192.168.0.206" |
27 | port: 8080 | 27 | port: 8080 |
@@ -35,7 +35,24 @@ server_account: | @@ -35,7 +35,24 @@ server_account: | ||
35 | db: 0 | 35 | db: 0 |
36 | 36 | ||
37 | server_game: | 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 | name: "game" | 56 | name: "game" |
40 | ip: "192.168.0.206" | 57 | ip: "192.168.0.206" |
41 | encipher: false | 58 | encipher: false |
@@ -50,7 +67,6 @@ server_game: | @@ -50,7 +67,6 @@ server_game: | ||
50 | redis: | 67 | redis: |
51 | <<: *default-redis | 68 | <<: *default-redis |
52 | db: 0 | 69 | db: 0 |
53 | - | ||
54 | test_client: | 70 | test_client: |
55 | ip: "127.0.0.1" | 71 | ip: "127.0.0.1" |
56 | port: 8850 | 72 | port: 8850 |
@@ -0,0 +1,153 @@ | @@ -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 @@ | @@ -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 | package models | 1 | package models |
2 | 2 | ||
3 | import ( | 3 | import ( |
4 | + "fmt" | ||
4 | "github.com/golang/protobuf/proto" | 5 | "github.com/golang/protobuf/proto" |
5 | "pro2d/common" | 6 | "pro2d/common" |
6 | "pro2d/common/components" | 7 | "pro2d/common/components" |
@@ -51,10 +52,22 @@ func NewRole(id string) *RoleModel { | @@ -51,10 +52,22 @@ func NewRole(id string) *RoleModel { | ||
51 | return m | 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 | func (m *RoleModel) InitRole() { | 67 | func (m *RoleModel) InitRole() { |
55 | //init hero | 68 | //init hero |
56 | h1 := pb.Hero{ | 69 | h1 := pb.Hero{ |
57 | - Id: common.SnowFlack.NextValStr(), | 70 | + Id: fmt.Sprintf("%s%d", m.Role.Id, m.IncreByKey("hero", 1)), |
58 | RoleId: m.Role.Id, | 71 | RoleId: m.Role.Id, |
59 | Type: 1, | 72 | Type: 1, |
60 | Level: 1, | 73 | Level: 1, |
@@ -65,23 +78,23 @@ func (m *RoleModel) InitRole() { | @@ -65,23 +78,23 @@ func (m *RoleModel) InitRole() { | ||
65 | m.AddHero(&h1) | 78 | m.AddHero(&h1) |
66 | 79 | ||
67 | h2 := h1 | 80 | h2 := h1 |
68 | - h2.Id = common.SnowFlack.NextValStr() | 81 | + h2.Id = fmt.Sprintf("%s%d", m.Role.Id, m.IncreByKey("hero", 1)) |
69 | h2.Type = 2 | 82 | h2.Type = 2 |
70 | m.AddHero(&h2) | 83 | m.AddHero(&h2) |
71 | 84 | ||
72 | h3 := h1 | 85 | h3 := h1 |
73 | - h3.Id = common.SnowFlack.NextValStr() | 86 | + h3.Id = fmt.Sprintf("%s%d", m.Role.Id, m.IncreByKey("hero", 1)) |
74 | h3.Type = 3 | 87 | h3.Type = 3 |
75 | m.AddHero(&h3) | 88 | m.AddHero(&h3) |
76 | 89 | ||
77 | h4 := h1 | 90 | h4 := h1 |
78 | - h4.Id = common.SnowFlack.NextValStr() | 91 | + h4.Id = fmt.Sprintf("%s%d", m.Role.Id, m.IncreByKey("hero", 1)) |
79 | h4.Type = 4 | 92 | h4.Type = 4 |
80 | m.AddHero(&h4) | 93 | m.AddHero(&h4) |
81 | 94 | ||
82 | //init team | 95 | //init team |
83 | t1 := pb.Team{ | 96 | t1 := pb.Team{ |
84 | - Id: common.SnowFlack.NextValStr(), | 97 | + Id: fmt.Sprintf("%s%d", m.Role.Id, m.IncreByKey("team", 1)), |
85 | RoleId: m.Role.Id, | 98 | RoleId: m.Role.Id, |
86 | HeroId1: h1.Id, | 99 | HeroId1: h1.Id, |
87 | HeroId2: h2.Id, | 100 | HeroId2: h2.Id, |
@@ -90,15 +103,15 @@ func (m *RoleModel) InitRole() { | @@ -90,15 +103,15 @@ func (m *RoleModel) InitRole() { | ||
90 | m.AddTeam(&t1) | 103 | m.AddTeam(&t1) |
91 | 104 | ||
92 | t2 := t1 | 105 | t2 := t1 |
93 | - t2.Id = common.SnowFlack.NextValStr() | 106 | + t2.Id = fmt.Sprintf("%s%d", m.Role.Id, m.IncreByKey("team", 1)) |
94 | m.AddTeam(&t2) | 107 | m.AddTeam(&t2) |
95 | 108 | ||
96 | t3 := t1 | 109 | t3 := t1 |
97 | - t3.Id = common.SnowFlack.NextValStr() | 110 | + t3.Id = fmt.Sprintf("%s%d", m.Role.Id, m.IncreByKey("team", 1)) |
98 | m.AddTeam(&t3) | 111 | m.AddTeam(&t3) |
99 | 112 | ||
100 | t4 := t1 | 113 | t4 := t1 |
101 | - t4.Id = common.SnowFlack.NextValStr() | 114 | + t4.Id = fmt.Sprintf("%s%d", m.Role.Id, m.IncreByKey("team", 1)) |
102 | m.AddTeam(&t4) | 115 | m.AddTeam(&t4) |
103 | } | 116 | } |
104 | 117 |
models/schema.go
@@ -55,6 +55,17 @@ func NewSchema(key string, schema interface{}) *Schema { | @@ -55,6 +55,17 @@ func NewSchema(key string, schema interface{}) *Schema { | ||
55 | return sch | 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 | func (s *Schema) FindIndex() (string, []string) { | 69 | func (s *Schema) FindIndex() (string, []string) { |
59 | var index []string | 70 | var index []string |
60 | for i := 0; i < s.reflectValue.Type().NumField(); i++ { | 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,13 +197,12 @@ func (s *Schema) ParseFields(message protoreflect.Message, properties map[string | ||
186 | return ids | 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,28 +391,84 @@ func (x *Team) GetHeroId3() string { | ||
391 | return "" | 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 | type Role struct { | 449 | type Role struct { |
395 | state protoimpl.MessageState | 450 | state protoimpl.MessageState |
396 | sizeCache protoimpl.SizeCache | 451 | sizeCache protoimpl.SizeCache |
397 | unknownFields protoimpl.UnknownFields | 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 | func (x *Role) Reset() { | 468 | func (x *Role) Reset() { |
413 | *x = Role{} | 469 | *x = Role{} |
414 | if protoimpl.UnsafeEnabled { | 470 | if protoimpl.UnsafeEnabled { |
415 | - mi := &file_models_proto_msgTypes[5] | 471 | + mi := &file_models_proto_msgTypes[6] |
416 | ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) | 472 | ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) |
417 | ms.StoreMessageInfo(mi) | 473 | ms.StoreMessageInfo(mi) |
418 | } | 474 | } |
@@ -425,7 +481,7 @@ func (x *Role) String() string { | @@ -425,7 +481,7 @@ func (x *Role) String() string { | ||
425 | func (*Role) ProtoMessage() {} | 481 | func (*Role) ProtoMessage() {} |
426 | 482 | ||
427 | func (x *Role) ProtoReflect() protoreflect.Message { | 483 | func (x *Role) ProtoReflect() protoreflect.Message { |
428 | - mi := &file_models_proto_msgTypes[5] | 484 | + mi := &file_models_proto_msgTypes[6] |
429 | if protoimpl.UnsafeEnabled && x != nil { | 485 | if protoimpl.UnsafeEnabled && x != nil { |
430 | ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) | 486 | ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) |
431 | if ms.LoadMessageInfo() == nil { | 487 | if ms.LoadMessageInfo() == nil { |
@@ -438,7 +494,7 @@ func (x *Role) ProtoReflect() protoreflect.Message { | @@ -438,7 +494,7 @@ func (x *Role) ProtoReflect() protoreflect.Message { | ||
438 | 494 | ||
439 | // Deprecated: Use Role.ProtoReflect.Descriptor instead. | 495 | // Deprecated: Use Role.ProtoReflect.Descriptor instead. |
440 | func (*Role) Descriptor() ([]byte, []int) { | 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 | func (x *Role) GetId() string { | 500 | func (x *Role) GetId() string { |
@@ -518,6 +574,13 @@ func (x *Role) GetDel() bool { | @@ -518,6 +574,13 @@ func (x *Role) GetDel() bool { | ||
518 | return false | 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 | var File_models_proto protoreflect.FileDescriptor | 584 | var File_models_proto protoreflect.FileDescriptor |
522 | 585 | ||
523 | var file_models_proto_rawDesc = []byte{ | 586 | var file_models_proto_rawDesc = []byte{ |
@@ -558,22 +621,32 @@ var file_models_proto_rawDesc = []byte{ | @@ -558,22 +621,32 @@ var file_models_proto_rawDesc = []byte{ | ||
558 | 0x12, 0x19, 0x0a, 0x08, 0x68, 0x65, 0x72, 0x6f, 0x5f, 0x69, 0x64, 0x32, 0x18, 0x04, 0x20, 0x01, | 621 | 0x12, 0x19, 0x0a, 0x08, 0x68, 0x65, 0x72, 0x6f, 0x5f, 0x69, 0x64, 0x32, 0x18, 0x04, 0x20, 0x01, |
559 | 0x28, 0x09, 0x52, 0x07, 0x68, 0x65, 0x72, 0x6f, 0x49, 0x64, 0x32, 0x12, 0x19, 0x0a, 0x08, 0x68, | 622 | 0x28, 0x09, 0x52, 0x07, 0x68, 0x65, 0x72, 0x6f, 0x49, 0x64, 0x32, 0x12, 0x19, 0x0a, 0x08, 0x68, |
560 | 0x65, 0x72, 0x6f, 0x5f, 0x69, 0x64, 0x33, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x68, | 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 | var ( | 652 | var ( |
@@ -588,21 +661,24 @@ func file_models_proto_rawDescGZIP() []byte { | @@ -588,21 +661,24 @@ func file_models_proto_rawDescGZIP() []byte { | ||
588 | return file_models_proto_rawDescData | 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 | var file_models_proto_goTypes = []interface{}{ | 665 | var file_models_proto_goTypes = []interface{}{ |
593 | (*Account)(nil), // 0: models.Account | 666 | (*Account)(nil), // 0: models.Account |
594 | (*Hero)(nil), // 1: models.Hero | 667 | (*Hero)(nil), // 1: models.Hero |
595 | (*Equipment)(nil), // 2: models.Equipment | 668 | (*Equipment)(nil), // 2: models.Equipment |
596 | (*Prop)(nil), // 3: models.Prop | 669 | (*Prop)(nil), // 3: models.Prop |
597 | (*Team)(nil), // 4: models.Team | 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 | var file_models_proto_depIdxs = []int32{ | 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 | func init() { file_models_proto_init() } | 684 | func init() { file_models_proto_init() } |
@@ -672,6 +748,18 @@ func file_models_proto_init() { | @@ -672,6 +748,18 @@ func file_models_proto_init() { | ||
672 | } | 748 | } |
673 | } | 749 | } |
674 | file_models_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} { | 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 | switch v := v.(*Role); i { | 763 | switch v := v.(*Role); i { |
676 | case 0: | 764 | case 0: |
677 | return &v.state | 765 | return &v.state |
@@ -690,7 +778,7 @@ func file_models_proto_init() { | @@ -690,7 +778,7 @@ func file_models_proto_init() { | ||
690 | GoPackagePath: reflect.TypeOf(x{}).PkgPath(), | 778 | GoPackagePath: reflect.TypeOf(x{}).PkgPath(), |
691 | RawDescriptor: file_models_proto_rawDesc, | 779 | RawDescriptor: file_models_proto_rawDesc, |
692 | NumEnums: 0, | 780 | NumEnums: 0, |
693 | - NumMessages: 6, | 781 | + NumMessages: 8, |
694 | NumExtensions: 0, | 782 | NumExtensions: 0, |
695 | NumServices: 0, | 783 | NumServices: 0, |
696 | }, | 784 | }, |