Commit 29a163bec708a503440123dd6cbdb0b580aed793
1 parent
0ce6c418
fix: CreateReq uid->token; random name
Showing
17 changed files
with
213 additions
and
50 deletions
Show diff stats
.gitignore
cmd/gameserver/action/RoleAction.go
| 1 | 1 | package action |
| 2 | 2 | |
| 3 | 3 | import ( |
| 4 | + "fmt" | |
| 4 | 5 | "github.com/golang/protobuf/proto" |
| 5 | 6 | "pro2d/common" |
| 6 | 7 | "pro2d/common/components" |
| 8 | + "pro2d/common/db/redisproxy" | |
| 7 | 9 | "pro2d/common/logger" |
| 8 | 10 | "pro2d/models" |
| 9 | 11 | "pro2d/pb" |
| ... | ... | @@ -14,19 +16,39 @@ func HeartRpc(msg components.IMessage) (int32, interface{}) { |
| 14 | 16 | return 0, nil |
| 15 | 17 | } |
| 16 | 18 | |
| 19 | +func getRandomName() string { | |
| 20 | + name := "" | |
| 21 | + for { | |
| 22 | + name = common.RandomName(common.DefaultName) | |
| 23 | + if name == "" { | |
| 24 | + continue | |
| 25 | + } | |
| 26 | + | |
| 27 | + relay, err := redisproxy.SETNX(fmt.Sprintf(common.NickNames, name), "1") | |
| 28 | + if err != nil { | |
| 29 | + continue | |
| 30 | + } | |
| 31 | + if relay.(int64) == 1 { | |
| 32 | + break | |
| 33 | + } | |
| 34 | + } | |
| 35 | + return name | |
| 36 | +} | |
| 37 | + | |
| 17 | 38 | func CreateRpc(msg components.IMessage) (int32, interface{}) { |
| 18 | 39 | req := pb.CreateReq{} |
| 19 | 40 | if err := proto.Unmarshal(msg.GetData(), &req); err != nil { |
| 20 | 41 | logger.Error("CreateRpc err: %v", err) |
| 21 | 42 | return 1, nil |
| 22 | 43 | } |
| 23 | - role := models.RoleExistByUid(req.Uid) | |
| 44 | + role := models.RoleExistByUid(req.Token) | |
| 24 | 45 | if role != nil { |
| 25 | 46 | return 2, nil |
| 26 | 47 | } |
| 27 | 48 | |
| 28 | 49 | roleId := common.SnowFlack.NextValStr() |
| 29 | 50 | role = models.NewRole(roleId) |
| 51 | + role.Role.Nick = getRandomName() | |
| 30 | 52 | if err := role.Create(); err != nil { |
| 31 | 53 | logger.Error("CreateRpc role create err: %v", err) |
| 32 | 54 | return 3, nil | ... | ... |
| ... | ... | @@ -0,0 +1,22 @@ |
| 1 | +package action | |
| 2 | + | |
| 3 | +import ( | |
| 4 | + "fmt" | |
| 5 | + "math/rand" | |
| 6 | + "pro2d/common" | |
| 7 | + "pro2d/common/db/redisproxy" | |
| 8 | + "pro2d/common/logger" | |
| 9 | + "testing" | |
| 10 | +) | |
| 11 | + | |
| 12 | +func TestGetActionMap(t *testing.T) { | |
| 13 | + rand.Seed(common.Timex()) | |
| 14 | + | |
| 15 | + var redisConf = common.GlobalConf.GameConf.RedisConf | |
| 16 | + if err := redisproxy.ConnectRedis(redisConf.DB, redisConf.Auth, redisConf.Address); err != nil { | |
| 17 | + logger.Error(err) | |
| 18 | + return | |
| 19 | + } | |
| 20 | + name := getRandomName() | |
| 21 | + fmt.Println(name) | |
| 22 | +} | ... | ... |
cmd/gameserver/agent.go
| ... | ... | @@ -9,7 +9,6 @@ import ( |
| 9 | 9 | "pro2d/common/logger" |
| 10 | 10 | "pro2d/models" |
| 11 | 11 | "pro2d/pb" |
| 12 | - "pro2d/utils" | |
| 13 | 12 | "sync" |
| 14 | 13 | "sync/atomic" |
| 15 | 14 | ) |
| ... | ... | @@ -31,7 +30,7 @@ func NewAgent(s components.IServer) *Agent { |
| 31 | 30 | a.Server = s |
| 32 | 31 | |
| 33 | 32 | a.nextCheckTime = 0 |
| 34 | - a.lastHeartCheckTime = utils.Timex() | |
| 33 | + a.lastHeartCheckTime = common.Timex() | |
| 35 | 34 | a.heartTimeoutCount= 0 |
| 36 | 35 | return a |
| 37 | 36 | } |
| ... | ... | @@ -65,7 +64,7 @@ func (c *Agent) OnLogin(msg components.IMessage) { |
| 65 | 64 | } |
| 66 | 65 | |
| 67 | 66 | func (c *Agent) OnMessage(msg components.IMessage) { |
| 68 | - atomic.StoreInt64(&c.lastHeartCheckTime, utils.Timex()) | |
| 67 | + atomic.StoreInt64(&c.lastHeartCheckTime, common.Timex()) | |
| 69 | 68 | |
| 70 | 69 | if msg.GetHeader().GetMsgID() == uint32(pb.ProtoCode_LoginReq) { |
| 71 | 70 | c.OnLogin(msg) |
| ... | ... | @@ -98,7 +97,7 @@ func (c *Agent) OnMessage(msg components.IMessage) { |
| 98 | 97 | |
| 99 | 98 | func (c *Agent) OnTimer() { |
| 100 | 99 | nextCheckTime := atomic.LoadInt64(&c.nextCheckTime) |
| 101 | - now := utils.Timex() | |
| 100 | + now := common.Timex() | |
| 102 | 101 | if now >= nextCheckTime { |
| 103 | 102 | //ๆฃๆฅๅฟ่ทณ |
| 104 | 103 | c.checkHeartBeat(now) | ... | ... |
cmd/gameserver/game.go
| ... | ... | @@ -2,12 +2,15 @@ package main |
| 2 | 2 | |
| 3 | 3 | import ( |
| 4 | 4 | "fmt" |
| 5 | + "math/rand" | |
| 5 | 6 | _ "net/http/pprof" |
| 6 | 7 | "pro2d/cmd/gameserver/action" |
| 7 | 8 | "pro2d/common" |
| 8 | 9 | "pro2d/common/components" |
| 9 | 10 | "pro2d/common/db/mongoproxy" |
| 11 | + "pro2d/common/db/redisproxy" | |
| 10 | 12 | "pro2d/models" |
| 13 | + "time" | |
| 11 | 14 | |
| 12 | 15 | "pro2d/common/etcd" |
| 13 | 16 | ) |
| ... | ... | @@ -40,6 +43,11 @@ func NewGameServer(sconf *common.SConf) (*GameServer, error) { |
| 40 | 43 | } |
| 41 | 44 | models.InitGameModels() |
| 42 | 45 | |
| 46 | + //redis init | |
| 47 | + if err = redisproxy.ConnectRedis(sconf.RedisConf.DB, sconf.RedisConf.Auth, sconf.RedisConf.Address); err != nil { | |
| 48 | + return nil, err | |
| 49 | + } | |
| 50 | + | |
| 43 | 51 | //Etcd ๅๅงๅ |
| 44 | 52 | s.EtcdClient, err = etcd.NewEtcdClient(common.GlobalConf.Etcd) |
| 45 | 53 | if err != nil { |
| ... | ... | @@ -51,6 +59,9 @@ func NewGameServer(sconf *common.SConf) (*GameServer, error) { |
| 51 | 59 | } |
| 52 | 60 | |
| 53 | 61 | func (s *GameServer) Start() error { |
| 62 | + //่ฎพ็ฝฎ้ๆบ็งๅญ | |
| 63 | + rand.Seed(time.Now().Unix()) | |
| 64 | + | |
| 54 | 65 | return s.IServer.Start() |
| 55 | 66 | } |
| 56 | 67 | |
| ... | ... | @@ -58,6 +69,7 @@ func (s *GameServer) Stop() { |
| 58 | 69 | s.IServer.Stop() |
| 59 | 70 | |
| 60 | 71 | mongoproxy.CloseMongo() |
| 72 | + redisproxy.CloseRedis() | |
| 61 | 73 | s.EtcdClient.Close() |
| 62 | 74 | } |
| 63 | 75 | ... | ... |
cmd/httpserver/AccountAction.go
| ... | ... | @@ -5,7 +5,6 @@ import ( |
| 5 | 5 | "pro2d/common" |
| 6 | 6 | "pro2d/models" |
| 7 | 7 | "pro2d/pb" |
| 8 | - "pro2d/utils" | |
| 9 | 8 | ) |
| 10 | 9 | |
| 11 | 10 | type AccountAction struct { |
| ... | ... | @@ -28,7 +27,7 @@ func (h *AccountAction) Register(c *gin.Context) (int, interface{}){ |
| 28 | 27 | } |
| 29 | 28 | |
| 30 | 29 | account.Uid = common.SnowFlack.NextValStr() |
| 31 | - account.Password = utils.Md5V(register.Password) | |
| 30 | + account.Password = common.Md5V(register.Password) | |
| 32 | 31 | if err := account.Create(); err != nil{ |
| 33 | 32 | return 4, "account register err: " + err.Error() |
| 34 | 33 | } |
| ... | ... | @@ -46,7 +45,7 @@ func (h *AccountAction) Login(c *gin.Context) (int,interface{}) { |
| 46 | 45 | return 2, err.Error() |
| 47 | 46 | } |
| 48 | 47 | |
| 49 | - if utils.Md5V(login.Password) != account.Password { | |
| 48 | + if common.Md5V(login.Password) != account.Password { | |
| 50 | 49 | return 3, "password error" |
| 51 | 50 | } |
| 52 | 51 | ... | ... |
common/conf.go
| ... | ... | @@ -38,6 +38,7 @@ type SConf struct { |
| 38 | 38 | Port int `yaml:"port"` |
| 39 | 39 | DebugPort int `yaml:"debugport"` |
| 40 | 40 | MongoConf *MongoConf `yaml:"mongo"` |
| 41 | + RedisConf *RedisConf `yaml:"redis"` | |
| 41 | 42 | WorkerPoolSize int `yaml:"pool_size"` |
| 42 | 43 | PluginPath string `yaml:"plugin_path"` |
| 43 | 44 | } |
| ... | ... | @@ -85,7 +86,6 @@ type ServerConf struct { |
| 85 | 86 | DatacenterID int64 `yaml:"datacenterid"` |
| 86 | 87 | AccountConf *SConf `yaml:"server_account"` |
| 87 | 88 | GameConf *SConf `yaml:"server_game"` |
| 88 | - RedisConf *RedisConf `yaml:"redis"` | |
| 89 | 89 | LogConf *LogConf `yaml:"logconf" json:"logconf"` |
| 90 | 90 | TestClient *TestClient `yaml:"test_client"` |
| 91 | 91 | Etcd *Etcd `yaml:"etcd"` | ... | ... |
common/const.go
common/db/redisproxy/redis.go
| ... | ... | @@ -30,14 +30,28 @@ func CloseRedis() { |
| 30 | 30 | RedisPool.Close() |
| 31 | 31 | } |
| 32 | 32 | |
| 33 | -func HKEYS(args ...interface{}) (reply interface{}, err error) { | |
| 33 | +func redisCommand(command string, args ...interface{}) (reply interface{}, err error) { | |
| 34 | 34 | conn := RedisPool.Get() |
| 35 | 35 | defer conn.Close() |
| 36 | - return conn.Do("HKEYS", args) | |
| 36 | + return conn.Do(command , args...) | |
| 37 | +} | |
| 38 | + | |
| 39 | +func SETNX(args ...interface{}) (reply interface{}, err error) { | |
| 40 | + return redisCommand("SETNX", args...) | |
| 41 | +} | |
| 42 | + | |
| 43 | +func SET(args ...interface{}) (reply interface{}, err error) { | |
| 44 | + return redisCommand("SET", args...) | |
| 45 | +} | |
| 46 | + | |
| 47 | +func GET(args ...interface{}) (reply interface{}, err error) { | |
| 48 | + return redisCommand("GET", args...) | |
| 49 | +} | |
| 50 | + | |
| 51 | +func HKEYS(args ...interface{}) (reply interface{}, err error) { | |
| 52 | + return redisCommand("HKEYS", args...) | |
| 37 | 53 | } |
| 38 | 54 | |
| 39 | 55 | func HMSET(args ...interface{}) (reply interface{}, err error) { |
| 40 | - conn := RedisPool.Get() | |
| 41 | - defer conn.Close() | |
| 42 | - return conn.Do("HMSET", args) | |
| 56 | + return redisCommand("HMSET", args...) | |
| 43 | 57 | } |
| 44 | 58 | \ No newline at end of file | ... | ... |
| ... | ... | @@ -0,0 +1,30 @@ |
| 1 | +package common | |
| 2 | + | |
| 3 | +var DefaultName [][]string = [][]string { | |
| 4 | +[]string{ | |
| 5 | + "ไผ็ๅฐผไบ", | |
| 6 | + "็ปๆถ่ๆผ ", | |
| 7 | + "ๅทจ็ฎ", | |
| 8 | + "ๅฐผๅธๅฐ", | |
| 9 | + "่นๅ ๅฑฑ่", | |
| 10 | + "ไธ้จๆนฟๅฐ", | |
| 11 | + "ๆไน็ปฟๆดฒ", | |
| 12 | + "็ฅๅฃไนๆณ", | |
| 13 | + "ๅบๅผๅๆธฏ", | |
| 14 | +}, | |
| 15 | + | |
| 16 | +[]string{ | |
| 17 | + "ๅนปๅฝฑ", | |
| 18 | + "ๆ่พฐ", | |
| 19 | + "้ๅฃ", | |
| 20 | + "ๅ ๆ", | |
| 21 | + "ๆ ๅธธ", | |
| 22 | + "็ตๆจ", | |
| 23 | + "่ๆตท", | |
| 24 | + "้ป้", | |
| 25 | + "็็", | |
| 26 | + "็ๆฝฎ", | |
| 27 | + | |
| 28 | +}, | |
| 29 | +} | |
| 30 | + | ... | ... |
| ... | ... | @@ -0,0 +1,49 @@ |
| 1 | +package common | |
| 2 | + | |
| 3 | +import ( | |
| 4 | + "crypto/md5" | |
| 5 | + "encoding/hex" | |
| 6 | + "math/rand" | |
| 7 | + "strings" | |
| 8 | + "time" | |
| 9 | +) | |
| 10 | + | |
| 11 | +func Md5V(str string) string { | |
| 12 | + h := md5.New() | |
| 13 | + h.Write([]byte(str)) | |
| 14 | + return hex.EncodeToString(h.Sum(nil)) | |
| 15 | +} | |
| 16 | + | |
| 17 | +func Timex() int64 { | |
| 18 | + return time.Now().Unix() | |
| 19 | +} | |
| 20 | + | |
| 21 | +var defaultLetters = []rune("abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789") | |
| 22 | +func RandomString(n int, allowedChars ...[]rune) string { | |
| 23 | + var letters []rune | |
| 24 | + | |
| 25 | + if len(allowedChars) == 0 { | |
| 26 | + letters = defaultLetters | |
| 27 | + } else { | |
| 28 | + letters = allowedChars[0] | |
| 29 | + } | |
| 30 | + | |
| 31 | + b := make([]rune, n) | |
| 32 | + for i := range b { | |
| 33 | + b[i] = letters[rand.Intn(len(letters))] | |
| 34 | + } | |
| 35 | + | |
| 36 | + return string(b) | |
| 37 | +} | |
| 38 | + | |
| 39 | + | |
| 40 | +func RandomName(name [][]string) string { | |
| 41 | + idx1 := rand.Intn(len(name[0])) | |
| 42 | + idx2 := rand.Intn(len(name[1])) | |
| 43 | + | |
| 44 | + var builder strings.Builder | |
| 45 | + builder.WriteString(name[0][idx1]) | |
| 46 | + builder.WriteString(name[1][idx2]) | |
| 47 | + return builder.String() | |
| 48 | +} | |
| 49 | + | ... | ... |
| ... | ... | @@ -0,0 +1,21 @@ |
| 1 | +package common | |
| 2 | + | |
| 3 | +import ( | |
| 4 | + "fmt" | |
| 5 | + "math/rand" | |
| 6 | + "pro2d/common/db/redisproxy" | |
| 7 | + "pro2d/common/logger" | |
| 8 | + "testing" | |
| 9 | +) | |
| 10 | + | |
| 11 | +func TestRandomString(t *testing.T) { | |
| 12 | + rand.Seed(Timex()) | |
| 13 | + fmt.Println(RandomName(DefaultName)) | |
| 14 | +} | |
| 15 | + | |
| 16 | +func TestRandomName(t *testing.T) { | |
| 17 | + if err := redisproxy.ConnectRedis(GlobalConf.GameConf.RedisConf.DB, GlobalConf.GameConf.RedisConf.Auth, GlobalConf.GameConf.RedisConf.Address); err != nil { | |
| 18 | + logger.Error(err) | |
| 19 | + return | |
| 20 | + } | |
| 21 | +} | ... | ... |
conf/conf.yaml
| ... | ... | @@ -11,6 +11,10 @@ mongo: &default-mongo |
| 11 | 11 | timeout: 2 |
| 12 | 12 | maxnum: 50 |
| 13 | 13 | |
| 14 | +redis: &default-redis | |
| 15 | + address: "127.0.0.1:6100" | |
| 16 | + auth: "" | |
| 17 | + | |
| 14 | 18 | etcd: |
| 15 | 19 | dialtimeout: 5 |
| 16 | 20 | endpoints: |
| ... | ... | @@ -38,6 +42,9 @@ server_game: |
| 38 | 42 | mongo: |
| 39 | 43 | <<: *default-mongo |
| 40 | 44 | dbname: "game" |
| 45 | + redis: | |
| 46 | + <<: *default-redis | |
| 47 | + db: 0 | |
| 41 | 48 | |
| 42 | 49 | test_client: |
| 43 | 50 | ip: "127.0.0.1" | ... | ... |
models/role.go
| ... | ... | @@ -6,7 +6,6 @@ import ( |
| 6 | 6 | "pro2d/common/db/mongoproxy" |
| 7 | 7 | "pro2d/common/logger" |
| 8 | 8 | "pro2d/pb" |
| 9 | - "pro2d/utils" | |
| 10 | 9 | "sync/atomic" |
| 11 | 10 | ) |
| 12 | 11 | |
| ... | ... | @@ -167,7 +166,7 @@ func (m *RoleModel) OnRecoverTimer(now int64) { |
| 167 | 166 | |
| 168 | 167 | func (m *RoleModel) OnOfflineEvent() { |
| 169 | 168 | // ่ฎพ็ฝฎๆๆฐ็็ปๅฝๆถ้ด |
| 170 | - m.saveRoleData(utils.Timex()) | |
| 169 | + m.saveRoleData(common.Timex()) | |
| 171 | 170 | } |
| 172 | 171 | |
| 173 | 172 | func (m *RoleModel) saveRoleData(now int64) { | ... | ... |
pb/game.pb.go
| ... | ... | @@ -175,7 +175,7 @@ type CreateReq struct { |
| 175 | 175 | sizeCache protoimpl.SizeCache |
| 176 | 176 | unknownFields protoimpl.UnknownFields |
| 177 | 177 | |
| 178 | - Uid string `protobuf:"bytes,1,opt,name=uid,proto3" json:"uid,omitempty"` | |
| 178 | + Token string `protobuf:"bytes,1,opt,name=token,proto3" json:"token,omitempty"` | |
| 179 | 179 | Device string `protobuf:"bytes,2,opt,name=device,proto3" json:"device,omitempty"` |
| 180 | 180 | } |
| 181 | 181 | |
| ... | ... | @@ -211,9 +211,9 @@ func (*CreateReq) Descriptor() ([]byte, []int) { |
| 211 | 211 | return file_game_proto_rawDescGZIP(), []int{3} |
| 212 | 212 | } |
| 213 | 213 | |
| 214 | -func (x *CreateReq) GetUid() string { | |
| 214 | +func (x *CreateReq) GetToken() string { | |
| 215 | 215 | if x != nil { |
| 216 | - return x.Uid | |
| 216 | + return x.Token | |
| 217 | 217 | } |
| 218 | 218 | return "" |
| 219 | 219 | } |
| ... | ... | @@ -300,19 +300,19 @@ var file_game_proto_rawDesc = []byte{ |
| 300 | 300 | 0x22, 0x38, 0x0a, 0x08, 0x4c, 0x6f, 0x67, 0x69, 0x6e, 0x52, 0x65, 0x71, 0x12, 0x14, 0x0a, 0x05, |
| 301 | 301 | 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x74, 0x6f, 0x6b, |
| 302 | 302 | 0x65, 0x6e, 0x12, 0x16, 0x0a, 0x06, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x18, 0x02, 0x20, 0x01, |
| 303 | - 0x28, 0x09, 0x52, 0x06, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x22, 0x35, 0x0a, 0x09, 0x43, 0x72, | |
| 304 | - 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x12, 0x10, 0x0a, 0x03, 0x75, 0x69, 0x64, 0x18, 0x01, | |
| 305 | - 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x75, 0x69, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x64, 0x65, 0x76, | |
| 306 | - 0x69, 0x63, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x64, 0x65, 0x76, 0x69, 0x63, | |
| 307 | - 0x65, 0x22, 0x6f, 0x0a, 0x07, 0x52, 0x6f, 0x6c, 0x65, 0x52, 0x73, 0x70, 0x12, 0x20, 0x0a, 0x04, | |
| 308 | - 0x72, 0x6f, 0x6c, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0c, 0x2e, 0x6d, 0x6f, 0x64, | |
| 309 | - 0x65, 0x6c, 0x73, 0x2e, 0x52, 0x6f, 0x6c, 0x65, 0x52, 0x04, 0x72, 0x6f, 0x6c, 0x65, 0x12, 0x20, | |
| 310 | - 0x0a, 0x04, 0x68, 0x65, 0x72, 0x6f, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0c, 0x2e, 0x6d, | |
| 311 | - 0x6f, 0x64, 0x65, 0x6c, 0x73, 0x2e, 0x48, 0x65, 0x72, 0x6f, 0x52, 0x04, 0x68, 0x65, 0x72, 0x6f, | |
| 312 | - 0x12, 0x20, 0x0a, 0x04, 0x74, 0x65, 0x61, 0x6d, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0c, | |
| 313 | - 0x2e, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x73, 0x2e, 0x54, 0x65, 0x61, 0x6d, 0x52, 0x04, 0x74, 0x65, | |
| 314 | - 0x61, 0x6d, 0x42, 0x0a, 0x5a, 0x08, 0x2e, 0x2e, 0x2f, 0x70, 0x62, 0x3b, 0x70, 0x62, 0x62, 0x06, | |
| 315 | - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, | |
| 303 | + 0x28, 0x09, 0x52, 0x06, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x22, 0x39, 0x0a, 0x09, 0x43, 0x72, | |
| 304 | + 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, | |
| 305 | + 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x16, 0x0a, | |
| 306 | + 0x06, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x64, | |
| 307 | + 0x65, 0x76, 0x69, 0x63, 0x65, 0x22, 0x6f, 0x0a, 0x07, 0x52, 0x6f, 0x6c, 0x65, 0x52, 0x73, 0x70, | |
| 308 | + 0x12, 0x20, 0x0a, 0x04, 0x72, 0x6f, 0x6c, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0c, | |
| 309 | + 0x2e, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x73, 0x2e, 0x52, 0x6f, 0x6c, 0x65, 0x52, 0x04, 0x72, 0x6f, | |
| 310 | + 0x6c, 0x65, 0x12, 0x20, 0x0a, 0x04, 0x68, 0x65, 0x72, 0x6f, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, | |
| 311 | + 0x32, 0x0c, 0x2e, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x73, 0x2e, 0x48, 0x65, 0x72, 0x6f, 0x52, 0x04, | |
| 312 | + 0x68, 0x65, 0x72, 0x6f, 0x12, 0x20, 0x0a, 0x04, 0x74, 0x65, 0x61, 0x6d, 0x18, 0x04, 0x20, 0x03, | |
| 313 | + 0x28, 0x0b, 0x32, 0x0c, 0x2e, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x73, 0x2e, 0x54, 0x65, 0x61, 0x6d, | |
| 314 | + 0x52, 0x04, 0x74, 0x65, 0x61, 0x6d, 0x42, 0x0a, 0x5a, 0x08, 0x2e, 0x2e, 0x2f, 0x70, 0x62, 0x3b, | |
| 315 | + 0x70, 0x62, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, | |
| 316 | 316 | } |
| 317 | 317 | |
| 318 | 318 | var ( | ... | ... |
utils/utils.go deleted
| ... | ... | @@ -1,17 +0,0 @@ |
| 1 | -package utils | |
| 2 | - | |
| 3 | -import ( | |
| 4 | - "crypto/md5" | |
| 5 | - "encoding/hex" | |
| 6 | - "time" | |
| 7 | -) | |
| 8 | - | |
| 9 | -func Md5V(str string) string { | |
| 10 | - h := md5.New() | |
| 11 | - h.Write([]byte(str)) | |
| 12 | - return hex.EncodeToString(h.Sum(nil)) | |
| 13 | -} | |
| 14 | - | |
| 15 | -func Timex() int64 { | |
| 16 | - return time.Now().Unix() | |
| 17 | -} | |
| 18 | 0 | \ No newline at end of file |