From fc3e08ac28731c8dc48afec82bb4653e38d856e3 Mon Sep 17 00:00:00 2001 From: zqj <582132116@qq.com> Date: Tue, 14 Jun 2022 10:11:03 +0800 Subject: [PATCH] feat: add log component --- cmd/gameserver/service/agent.go | 7 ++++++- common/components/icompontents.go | 1 + docker/restart.sh | 2 ++ models/RoleLog.go | 71 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ models/role.go | 3 +++ models/schema.go | 8 ++++++++ 6 files changed, 91 insertions(+), 1 deletion(-) diff --git a/cmd/gameserver/service/agent.go b/cmd/gameserver/service/agent.go index cf4046e..f2144b6 100644 --- a/cmd/gameserver/service/agent.go +++ b/cmd/gameserver/service/agent.go @@ -131,11 +131,16 @@ func (c *Agent) OnMessage(msg components.IMessage) error { return c.Send(-101, msg.GetHeader().GetMsgID(), nil, msg.GetHeader().GetPreserve()) } + c.Role.StartActionUnicode() + // 调用协议号对应的逻辑函数 f := method.(func(role *models.RoleModel, msg components.IMessage) (int32, interface{})) errCode, protoMsg := f(c.Role, msg) logger.Debug("rsp errcode: %d, protocode: %d", errCode, msg.GetHeader().GetMsgID()) - return c.SendMsg(errCode, msg.GetHeader().GetMsgID(), protoMsg, msg.GetHeader().GetPreserve()) + err := c.SendMsg(errCode, msg.GetHeader().GetMsgID(), protoMsg, msg.GetHeader().GetPreserve()) + + c.Role.EndActionUnicode() + return err } func (c *Agent) OnTimer() { diff --git a/common/components/icompontents.go b/common/components/icompontents.go index beb1936..5cc6aa9 100644 --- a/common/components/icompontents.go +++ b/common/components/icompontents.go @@ -161,6 +161,7 @@ type ( Update() SetProperty(key string, val interface{}) + GetProperty(key string) interface{} SetProperties(properties map[string]interface{}) IncrProperty(key string, val int64) int64 ParseFields(message protoreflect.Message, properties map[string]interface{}) []int32 diff --git a/docker/restart.sh b/docker/restart.sh index b239599..79b8917 100644 --- a/docker/restart.sh +++ b/docker/restart.sh @@ -5,3 +5,5 @@ /usr/local/bin/docker-compose -f /Users/zhaolu/Documents/pro2d/docker-compose-service.yml up -d /usr/local/bin/docker ps -a /usr/local/bin/docker rmi $(/usr/local/bin/docker images -f "dangling=true" -q) + +docker rmi $(docker images -f "dangling=true" -q) \ No newline at end of file diff --git a/models/RoleLog.go b/models/RoleLog.go index 2640e7f..dcbf2e5 100644 --- a/models/RoleLog.go +++ b/models/RoleLog.go @@ -1 +1,72 @@ package models + +import ( + "encoding/json" + "fmt" + "pro2d/common" + "pro2d/common/logger" + "sync/atomic" +) + +var LogType = map[string]string{ + "in_item": "common", + "out_item": "common", + "in_hero": "common", + "out_hero": "common", + "in_equip": "common", + "out_equip": "common", + + "role_action": "common", +} + +var commonRoleField = []string{ + "id", + "uid", + "name", + "device", + "level", +} + +func (m *RoleModel) MyLog(logType string, content map[string]interface{}) { + _, ok := LogType[logType] + if !ok { + logger.Error("LOG ERROR: new logType [%s] need Add Maping.", logType) + return + } + + doc := make(map[string]interface{}) + for _, field := range commonRoleField { + if content[field] != nil { + logger.Error("LOG ERROR: logType [%s] had field [%s] overwrite default.", logType, field) + } + + v := m.GetProperty(field) + if v != nil { + doc[field] = v + } + } + content["ucode"] = m.GetActionUnicode() + for field, value := range content { + doc[field] = value + } + doc["@type"] = logType + j, err := json.Marshal(doc) + if err != nil { + logger.Error("LOG ERROR: logType [%s] json.Marshal", logType) + return + } + logger.Debug(j) +} + +func (m *RoleModel) StartActionUnicode() { + uniqueCount := atomic.AddInt64(&m.uniqueCount, 1) + m.actionUcode = fmt.Sprintf("%s-%d-%d", m.Data.Id, common.Timex(), uniqueCount) +} + +func (m *RoleModel) EndActionUnicode() { + m.actionUcode = "" +} + +func (m *RoleModel) GetActionUnicode() string { + return m.actionUcode +} diff --git a/models/role.go b/models/role.go index 2adcefc..0535b8a 100644 --- a/models/role.go +++ b/models/role.go @@ -21,6 +21,9 @@ type RoleModel struct { Items common.IMapStringNum //背包 lastSaveTs int64 + + uniqueCount int64 + actionUcode string } func RoleExistByUid(uid string) *RoleModel { diff --git a/models/schema.go b/models/schema.go index ff2f9d2..db1d8d3 100644 --- a/models/schema.go +++ b/models/schema.go @@ -171,6 +171,14 @@ func (s *Schema) SetProperty(key string, val interface{}) { s.cacheFields[strings.ToLower(key)] = val } +func (s *Schema) GetProperty(key string) interface{} { + idx, ok := s.reflectIndex[strings.ToLower(key)] + if !ok { + return nil + } + return s.reflectValue.Field(idx).Interface() +} + //更新内存,并把字段缓存 func (s *Schema) SetProperties(properties map[string]interface{}) { for key, val := range properties { -- libgit2 0.21.2