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 | }, |