Commit d35f4f817840a3b22981b969d144d9c146ea7a45

Authored by zhangqijia
1 parent 97bec184

fix: 优化proto to index,fix updatepacklimit

cmd/gameserver/gmaction/GmAction.go
... ... @@ -59,15 +59,18 @@ func (gm *GmAction) UpdatePackLimit(role *models.RoleModel, params GMParams) {
59 59 update := make(map[string]interface{}, 3)
60 60 c, ok := params["clotheslimit"]
61 61 if ok {
62   - update["clotheslimit"], _ = strconv.Atoi(c)
  62 + l, _ := strconv.Atoi(c)
  63 + update["clotheslimit"] = uint32(l)
63 64 }
64 65 w := params["weaponslimit"]
65 66 if ok {
66   - update["weaponslimit"], _ = strconv.Atoi(w)
  67 + l, _ := strconv.Atoi(w)
  68 + update["weaponslimit"] = uint32(l)
67 69 }
68 70 o := params["otherlimit"]
69 71 if ok {
70   - update["otherlimit"], _ = strconv.Atoi(o)
  72 + l, _ := strconv.Atoi(o)
  73 + update["otherlimit"] = uint32(l)
71 74 }
72 75 role.UpdateProperties(update, true)
73 76 }
... ...
cmd/gameserver/service/gm.go
... ... @@ -3,7 +3,7 @@ package service
3 3 import (
4 4 "github.com/gin-gonic/gin"
5 5 "net/http"
6   - "pro2d/cmd/gameserver/action"
  6 + "pro2d/cmd/gameserver/gmaction"
7 7 "pro2d/common/components"
8 8 "pro2d/common/logger"
9 9 "pro2d/models"
... ... @@ -79,7 +79,7 @@ func (s *GmServer) HandlerFuncObj(tvl, obj reflect.Value) gin.HandlerFunc {
79 79  
80 80 func (s *GmServer) Start() error {
81 81 s.SetHandlerFuncCallback(s.HandlerFuncObj)
82   - s.BindHandler(&action.GmAction{})
  82 + s.BindHandler(&gmaction.GmAction{})
83 83 //gin.SetMode(gin.ReleaseMode)
84 84 return s.IHttp.Start()
85 85 }
... ...
models/role.go
... ... @@ -196,6 +196,7 @@ func (m *RoleModel) UpdateProperties(property map[string]interface{}, notify boo
196 196 }
197 197  
198 198 role := &pb.Role{}
  199 +
199 200 ids := m.ParseFields(role.ProtoReflect(), property)
200 201 if len(ids) == 0 {
201 202 logger.Error("ParseFields err, len is 0")
... ...
models/schema.go
1 1 package models
2 2  
3 3 import (
  4 + "github.com/golang/protobuf/proto"
4 5 "google.golang.org/protobuf/reflect/protoreflect"
5 6 "pro2d/common/components"
6 7 "pro2d/common/db/mongoproxy"
... ... @@ -24,6 +25,7 @@ type Schema struct {
24 25 db components.IDB
25 26 reflectValue *reflect.Value
26 27 reflectIndex map[string]int
  28 + protoIndex map[string]int
27 29  
28 30 cacheFields map[string]interface{}
29 31  
... ... @@ -41,14 +43,20 @@ func NewSchema(key string, schema interface{}) *Schema {
41 43 cacheFields: make(map[string]interface{}),
42 44 schema: schema,
43 45 reflectIndex: make(map[string]int),
  46 + protoIndex: make(map[string]int),
44 47 }
45 48  
  49 + proto.MessageReflect(schema.(proto.Message)).Range(func(des protoreflect.FieldDescriptor, value protoreflect.Value) bool {
  50 + sch.protoIndex[strings.ToLower(des.JSONName())] = des.Index()
  51 + return true
  52 + })
  53 +
46 54 for i := 0; i < s.Type().NumField(); i++ {
47 55 name := s.Type().Field(i).Name
48 56 if strings.Compare(name[0:1], strings.ToLower(name[0:1])) == 0 {
49 57 continue
50 58 }
51   - sch.reflectIndex[strings.ToLower(strings.ToLower(name))] = i
  59 + sch.reflectIndex[strings.ToLower(name)] = i
52 60 }
53 61  
54 62 sch.db = mongoproxy.NewMongoColl(sch.GetSchemaName(), sch)
... ... @@ -195,13 +203,21 @@ func (s *Schema) IncrProperty(key string, val int64) int64 {
195 203  
196 204 func (s *Schema) ParseFields(message protoreflect.Message, properties map[string]interface{}) []int32 {
197 205 ids := make([]int32, 0, len(properties))
  206 +
198 207 for k, v := range properties {
199   - field := message.Descriptor().Fields().ByName(protoreflect.Name(strings.ToLower(k)))
  208 + idx, ok := s.protoIndex[strings.ToLower(k)]
  209 + if !ok {
  210 + continue
  211 + }
  212 + field := message.Descriptor().Fields().Get(idx)
200 213 if field == nil {
201 214 continue
202 215 }
203 216  
204 217 ids = append(ids, int32(field.Index()))
  218 +
  219 + field.Kind()
  220 +
205 221 message.Set(field, protoreflect.ValueOf(v))
206 222  
207 223 s.SetProperty(k, v)
... ...