refactor(socket): 优化TCP数据包处理逻辑并增加调试日志

- 修复 handleTcp 中条件判断的空格格式问题
- 在解码失败时增加详细 Debug 日志输出
- 完善不完整数据包时手动唤醒连接的处理流程

refactor(pet): 重构宠物经验系统与升级逻辑

- 将经验计算函数移至 model 层统一管理
- 优化 AddPetExp 方法逻辑,避免直接修改原字段
- 升级过程中正确扣减经验池并防止溢出
- 抽离 Update 方法用于处理宠物进化和经验更新

refactor(model): 调整 PlayerInfo 结构体引用方式及相关初始化逻辑

- 修改 PlayerEX 中 Data 字段为值类型而非指针
- 更新 NewPlayerInfo 返回值为值类型
- 修正 defaults.Set 调用传参以适配结构体值类型

refactor(service): 统一 UserService 数据传递方式

- 修复 Person 方法返回值为指针类型
- 修复 Save 方法中赋值操作使用解引用方式
```
This commit is contained in:
2025-10-19 01:43:40 +08:00
parent 2ca0898b15
commit 7de149d946
2 changed files with 8 additions and 12 deletions

View File

@@ -2,6 +2,7 @@ package socket
import (
"context"
"encoding/hex"
"fmt"
"log"
"os"
@@ -140,7 +141,7 @@ func (s *Server) OnTraffic(c gnet.Conn) (action gnet.Action) {
for _, msg := range messages {
//client := conn.RemoteAddr().String()
_ = s.workerPool.Submit(func() {
s.parser(c, msg.Payload)
s.handler.Handle(c, msg.Payload)
})
}
@@ -158,13 +159,14 @@ func (s *Server) handleTcp(conn gnet.Conn) (action gnet.Action) {
if err == codec.ErrIncompletePacket && conn.InboundBuffered() > 0 {
t, _ := conn.Peek(conn.InboundBuffered())
cool.Loger.Debug(context.Background(), "断包", err.Error(), conn.InboundBuffered(), t)
cool.Loger.Debug(context.Background(), "断包", err.Error(), conn.InboundBuffered(), hex.EncodeToString(t))
if err := conn.Wake(nil); err != nil { // wake up the connection manually to avoid missing the leftover data
logging.Errorf("failed to wake up the connection, %v", err)
return gnet.Close
}
} else {
cool.Loger.Debug(context.Background(), "数据错误", err.Error(), conn.InboundBuffered())
t, _ := conn.Peek(conn.InboundBuffered())
cool.Loger.Debug(context.Background(), "数据错误", err.Error(), conn.InboundBuffered(), hex.EncodeToString(t))
action = gnet.Close
return
}
@@ -174,7 +176,8 @@ func (s *Server) handleTcp(conn gnet.Conn) (action gnet.Action) {
if data != nil {
//client := conn.RemoteAddr().String()
_ = s.workerPool.Submit(func() { //TODO 这里可能存在顺序执行问题,待修复
s.parser(conn, data)
//todo 这里待实现注入player实体
s.handler.Handle(conn, data)
})
}
@@ -182,12 +185,6 @@ func (s *Server) handleTcp(conn gnet.Conn) (action gnet.Action) {
}
func (s *Server) parser(c gnet.Conn, line []byte) {
//todo 这里待实现注入player实体
s.handler.Handle(c, line)
}
// CROSS_DOMAIN 定义跨域策略文件内容
const CROSS_DOMAIN = "<?xml version=\"1.0\"?><!DOCTYPE cross-domain-policy><cross-domain-policy><allow-access-from domain=\"*\" to-ports=\"*\" /></cross-domain-policy>\x00"

View File

@@ -60,7 +60,6 @@ func (codec TomeeSocketCodec) Decode(c gnet.Conn) ([]byte, error) {
if bodyLen > maxBodyLen {
return nil, errors.New("packet body exceeds max length")
}
totalLen := 4 + int(bodyLen)
// 检查整个包是否完整
buf, err := c.Peek(int(bodyLen))
@@ -76,7 +75,7 @@ func (codec TomeeSocketCodec) Decode(c gnet.Conn) ([]byte, error) {
copy(body, buf)
// 从缓冲区中丢弃已读取的数据
_, _ = c.Discard(totalLen)
_, _ = c.Discard(4 + int(bodyLen))
return body, nil
}