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