refactor(info): 删除多余的信息结构体文件

- 移除了多个未使用的 Java 和 Go 信息结构体文件
- 优化了项目结构,减少了冗余代码
- 这些文件可能是早期开发阶段的遗留代码,现在已不再需要
This commit is contained in:
2025-06-23 10:15:22 +08:00
parent f081150178
commit cc9f1fb45a
167 changed files with 3732 additions and 3270 deletions

1
common/socket/Server.go Normal file
View File

@@ -0,0 +1 @@
package socket

View File

@@ -1,83 +1,84 @@
package socket
import (
"context"
"github.com/panjf2000/gnet/v2"
"github.com/panjf2000/gnet/v2/pkg/logging"
"blazing/common/data/entity"
)
func (s *Server) Boot() error {
err := gnet.Run(s, s.addr,
gnet.WithMulticore(true),
gnet.WithSocketRecvBuffer(s.bufferSize))
if err != nil {
return err
}
return nil
}
func (s *Server) Stop() error {
_ = s.eng.Stop(context.Background())
s.workerPool.Release()
return nil
}
func (s *Server) OnBoot(eng gnet.Engine) gnet.Action {
s.eng = eng
logging.Infof("syslog server is listening on %s\n", s.addr)
return gnet.None
}
func (s *Server) OnTraffic(conn gnet.Conn) (action gnet.Action) {
conn.SetContext(entity.NewClientData())//注入data
if s.network == "tcp" {
return s.handleTcp(conn)
}
return gnet.None
}
func (s *Server) handleTcp(conn gnet.Conn) (action gnet.Action) {
for {
data, err := s.codec.Decode(conn)
if err != nil {
break
}
//client := conn.RemoteAddr().String()
_ = s.workerPool.Submit(func() {
s.parser(conn, data)
})
return gnet.None
}
if conn.InboundBuffered() > 0 {
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
}
}
return gnet.None
}
func (s *Server) parser(c gnet.Conn, line []byte) {
//todo 这里待实现注入player实体
s.handler.Handle(line)
}
func (s *Server) Start() {
err := gnet.Run(s, s.network+"://"+s.addr, gnet.WithMulticore(s.multicore))
logging.Infof("server exits with error: %v", err)
}
package socket
import (
"context"
"blazing/common/data/entity"
"github.com/panjf2000/gnet/v2"
"github.com/panjf2000/gnet/v2/pkg/logging"
)
func (s *Server) Boot() error {
err := gnet.Run(s, s.addr,
gnet.WithMulticore(true),
gnet.WithSocketRecvBuffer(s.bufferSize))
if err != nil {
return err
}
return nil
}
func (s *Server) Stop() error {
_ = s.eng.Stop(context.Background())
s.workerPool.Release()
return nil
}
func (s *Server) OnBoot(eng gnet.Engine) gnet.Action {
s.eng = eng
logging.Infof("syslog server is listening on %s\n", s.addr)
return gnet.None
}
func (s *Server) OnTraffic(conn gnet.Conn) (action gnet.Action) {
conn.SetContext(entity.NewClientData()) //注入data
if s.network == "tcp" {
return s.handleTcp(conn)
}
return gnet.None
}
func (s *Server) handleTcp(conn gnet.Conn) (action gnet.Action) {
for {
data, err := s.codec.Decode(conn)
if err != nil {
break
}
//client := conn.RemoteAddr().String()
_ = s.workerPool.Submit(func() {
s.parser(data)
})
return gnet.None
}
if conn.InboundBuffered() > 0 {
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
}
}
return gnet.None
}
func (s *Server) parser(line []byte) {
//todo 这里待实现注入player实体
s.handler.Handle(line)
}
func (s *Server) Start() {
err := gnet.Run(s, s.network+"://"+s.addr, gnet.WithMulticore(s.multicore))
logging.Infof("server exits with error: %v", err)
}

View File

@@ -26,7 +26,7 @@ type Option func(*Server)
func NewServer(options ...Option) *Server {
server := &Server{
handler: handler.NewTomeeHandler(), //请求返回
// handler: handler.NewTomeeHandler(), //请求返回
codec: codec.NewTomeeSocketCodec(), //默认解码器 len+pack
workerPool: goroutine.Default(),
bufferSize: 4096, //默认缓冲区大小

View File

@@ -1,98 +1,102 @@
package cmd
import (
"github.com/tnnmigga/enum"
)
// Enum 辅助类型定义
type EnumValue struct {
Value int
Name string
}
// MessageCommandIDRegistry 消息命令ID注册表
var MessageCommandIDRegistry = enum.New[struct {
// 在线相关命令
Commend_OnLine int `enum:"105"` // 在线命令
Login_In int `enum:"1001"` // 玩家登录
System_Time int `enum:"1002"` // 返回当前时间戳
Map_Hot int `enum:"1004"` // 显示地图热度(此地图内玩家数量)
Gold_Online_Check_Remain int `enum:"1106"` // 返回玩家金豆数量
// 地图相关命令
Enter_Map int `enum:"2001"` // 告知后端玩家进入新地图
Leave_Map int `enum:"2002"` // 玩家离开地图
List_Map_Player int `enum:"2003"` // 返回当前地图玩家列表
Map_Ogre_List int `enum:"2004"` // 精灵刷新
// 用户信息相关命令
Get_Sim_UserInfo int `enum:"2051"` // 返回邮人物简单信息
Get_More_UserInfo int `enum:"2052"` // 返回人物详细信息
Change_Nick_Name int `enum:"2061"` // 修改玩家名字
// 动作相关命令
People_Walk int `enum:"2101"` // 玩家走路包
Chat int `enum:"2102"` // 公屏聊天
Aimat int `enum:"2104"` // 射击
// 精灵相关命令
Get_Pet_Info int `enum:"2301"` // 获取精灵详细信息
Get_Pet_List int `enum:"2303"` // 获取所有的精灵列表
Pet_Release int `enum:"2304"` // 精灵加入背包或放回仓库
Pet_Show int `enum:"2305"` // 展示精灵
Pet_Cure int `enum:"2306"` // 恢复精灵状态,NONO恢复所有精灵
Pet_Study_Skill int `enum:"2307"` // 升级学习替换技能
Pet_Default int `enum:"2308"` // 设置精灵首发
Pet_One_Cure int `enum:"2310"` // 恢复精灵状态,精灵恢复单只精灵
Pet_Skill_Switch int `enum:"2312"` // 切换精灵技能
Pet_Set_Exp int `enum:"2318"` // 分配精灵经验
Pet_Get_Exp int `enum:"2319"` // 获取积累经验
Pet_Room int `enum:"2325"` // 跟随精灵获取信息
Get_Soul_Bead_List int `enum:"2354"` // 返回元神珠信息
// 战斗相关命令
Ready_To_Fight int `enum:"2404"` // 客户端通知服务端可以开始战斗, 此包表示客户端可以开始战斗, 无需服务端回复此包内容
Use_Skill int `enum:"2405"` // 使用技能
Change_Pet int `enum:"2407"` // 切换精灵
Fight_NPC_Monster int `enum:"2408"` // 与野怪对战的申请进入战斗
Catch_Monster int `enum:"2409"` // 捕捉精灵
Challenge_Boss int `enum:"2411"` // 与当前地图的Boss类型野怪进入战斗
Note_ReadyTo_Fight int `enum:"2503"` // 通知客户端已经可以开始战斗
Note_Start_Fight int `enum:"2504"` // 在客户端告知服务端可以开始战斗后, 服务端回给客户端战斗开始
Note_Use_Skill int `enum:"2505"` // 通知使用技能
Fight_Over int `enum:"2506"` // 战斗结束
Note_Update_Skill int `enum:"2507"` // 升级获得学习技能
Note_Update_Prop int `enum:"2508"` // 返回升级后的信息
// 装备物品相关命令
Change_Cloth int `enum:"2604"` // 修改玩家装备
Item_List int `enum:"2605"` // 返回玩家物品列表
// 奖励相关命令
Talk_Count int `enum:"2701"` // 玩家领取奖励的次数(挖矿,礼包等)
Talk_Cate int `enum:"2702"` // 领取奖品的内容
Mail_Get_Unread int `enum:"2757"` // 返回邮件数量
// 系统相关命令
System_Message int `enum:"8002"` // 后端主动发送面板消息
Get_Boss_Monster int `enum:"8004"` // 返回战斗结束后的奖励包或主动发放奖励
// NONO相关命令
Nono_Info int `enum:"9003"` // 通过米米号获取nono信息
Nono_Follow_Or_Home int `enum:"9019"` // nono跟随或回家
// 特殊命令
Get_Quadruple_Exe_Time int `enum:"50007"` // 返回已使用四倍剩余时间
// 暂未处理的包
Item_Buy int `enum:"2601"` // 物品购买
Item_Sale int `enum:"2602"` // 物品出售
Friend_Add int `enum:"2151"` // 添加好友
Friend_Remove int `enum:"2153"` // 移除好友
Invite_To_Fight int `enum:"2401"` // 邀请战斗
Escape_Fight int `enum:"2410"` // 逃离战斗
Join_Game int `enum:"5001"` // 加入游戏
Game_Over int `enum:"5002"` // 游戏结束
Leave_Game int `enum:"5003"` // 离开游戏
}]()
package cmd
import (
"github.com/tnnmigga/enum"
)
// Enum 辅助类型定义
type EnumValue struct {
Value EnumCommandID
Name string
}
type EnumCommandID int
func Isexist(t any, value EnumCommandID) bool {
return enum.Contains(CommandID, value)
}
// CommandID 消息命令ID注册表
var CommandID = enum.New[struct {
// 在线相关命令
Commend_OnLine EnumCommandID `enum:"105"` // 在线命令
Login_In EnumCommandID `enum:"1001"` // 玩家登录
System_Time EnumCommandID `enum:"1002"` // 返回当前时间戳
Map_Hot EnumCommandID `enum:"1004"` // 显示地图热度(此地图内玩家数量)
Gold_Online_Check_Remain EnumCommandID `enum:"1106"` // 返回玩家金豆数量
// 地图相关命令
Enter_Map EnumCommandID `enum:"2001"` // 告知后端玩家进入新地图
Leave_Map EnumCommandID `enum:"2002"` // 玩家离开地图
List_Map_Player EnumCommandID `enum:"2003"` // 返回当前地图玩家列表
Map_Ogre_List EnumCommandID `enum:"2004"` // 精灵刷新
// 用户信息相关命令
Get_Sim_UserInfo EnumCommandID `enum:"2051"` // 返回邮人物简单信息
Get_More_UserInfo EnumCommandID `enum:"2052"` // 返回人物详细信息
Change_Nick_Name EnumCommandID `enum:"2061"` // 修改玩家名字
// 动作相关命令
People_Walk EnumCommandID `enum:"2101"` // 玩家走路包
Chat EnumCommandID `enum:"2102"` // 公屏聊天
Aimat EnumCommandID `enum:"2104"` // 射击
// 精灵相关命令
Get_Pet_Info EnumCommandID `enum:"2301"` // 获取精灵详细信息
Get_Pet_List EnumCommandID `enum:"2303"` // 获取所有的精灵列表
Pet_Release EnumCommandID `enum:"2304"` // 精灵加入背包或放回仓库
Pet_Show EnumCommandID `enum:"2305"` // 展示精灵
Pet_Cure EnumCommandID `enum:"2306"` // 恢复精灵状态,NONO恢复所有精灵
Pet_Study_Skill EnumCommandID `enum:"2307"` // 升级学习替换技能
Pet_Default EnumCommandID `enum:"2308"` // 设置精灵首发
Pet_One_Cure EnumCommandID `enum:"2310"` // 恢复精灵状态,精灵恢复单只精灵
Pet_Skill_Switch EnumCommandID `enum:"2312"` // 切换精灵技能
Pet_Set_Exp EnumCommandID `enum:"2318"` // 分配精灵经验
Pet_Get_Exp EnumCommandID `enum:"2319"` // 获取积累经验
Pet_Room EnumCommandID `enum:"2325"` // 跟随精灵获取信息
Get_Soul_Bead_List EnumCommandID `enum:"2354"` // 返回元神珠信息
// 战斗相关命令
Ready_To_Fight EnumCommandID `enum:"2404"` // 客户端通知服务端可以开始战斗, 此包表示客户端可以开始战斗, 无需服务端回复此包内容
Use_Skill EnumCommandID `enum:"2405"` // 使用技能
Change_Pet EnumCommandID `enum:"2407"` // 切换精灵
Fight_NPC_Monster EnumCommandID `enum:"2408"` // 与野怪对战的申请进入战斗
Catch_Monster EnumCommandID `enum:"2409"` // 捕捉精灵
Challenge_Boss EnumCommandID `enum:"2411"` // 与当前地图的Boss类型野怪进入战斗
Note_ReadyTo_Fight EnumCommandID `enum:"2503"` // 通知客户端已经可以开始战斗
Note_Start_Fight EnumCommandID `enum:"2504"` // 在客户端告知服务端可以开始战斗后, 服务端回给客户端战斗开始
Note_Use_Skill EnumCommandID `enum:"2505"` // 通知使用技能
Fight_Over EnumCommandID `enum:"2506"` // 战斗结束
Note_Update_Skill EnumCommandID `enum:"2507"` // 升级获得学习技能
Note_Update_Prop EnumCommandID `enum:"2508"` // 返回升级后的信息
// 装备物品相关命令
Change_Cloth EnumCommandID `enum:"2604"` // 修改玩家装备
Item_List EnumCommandID `enum:"2605"` // 返回玩家物品列表
// 奖励相关命令
Talk_Count EnumCommandID `enum:"2701"` // 玩家领取奖励的次数(挖矿,礼包等)
Talk_Cate EnumCommandID `enum:"2702"` // 领取奖品的内容
Mail_Get_Unread EnumCommandID `enum:"2757"` // 返回邮件数量
// 系统相关命令
System_Message EnumCommandID `enum:"8002"` // 后端主动发送面板消息
Get_Boss_Monster EnumCommandID `enum:"8004"` // 返回战斗结束后的奖励包或主动发放奖励
// NONO相关命令
Nono_Info EnumCommandID `enum:"9003"` // 通过米米号获取nono信息
Nono_Follow_Or_Home EnumCommandID `enum:"9019"` // nono跟随或回家
// 特殊命令
Get_Quadruple_Exe_Time EnumCommandID `enum:"50007"` // 返回已使用四倍剩余时间
// 暂未处理的包
Item_Buy EnumCommandID `enum:"2601"` // 物品购买
Item_Sale EnumCommandID `enum:"2602"` // 物品出售
Friend_Add EnumCommandID `enum:"2151"` // 添加好友
Friend_Remove EnumCommandID `enum:"2153"` // 移除好友
Invite_To_Fight EnumCommandID `enum:"2401"` // 邀请战斗
Escape_Fight EnumCommandID `enum:"2410"` // 逃离战斗
Join_Game EnumCommandID `enum:"5001"` // 加入游戏
Game_Over EnumCommandID `enum:"5002"` // 游戏结束
Leave_Game EnumCommandID `enum:"5003"` // 离开游戏
}]()

View File

@@ -1,14 +1,14 @@
package cmd
import (
"testing"
)
func BenchmarkCmd(b *testing.B) {
b.ReportAllocs()
//写入
for i := 0; i < b.N; i++ {
b.Log(MessageCommandIDRegistry.Change_Cloth)
}
}
package cmd
import (
"testing"
)
func BenchmarkCmd(b *testing.B) {
b.ReportAllocs()
//写入
for i := 0; i < b.N; i++ {
b.Log(CommandID.Change_Cloth)
}
}

View File

@@ -1,111 +1,111 @@
package codec
import (
"blazing/common/data/entity"
"encoding/binary"
"errors"
"io"
"log"
"github.com/panjf2000/gnet/v2"
)
// 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"
// TEXT 定义跨域请求的文本格式
const TEXT = "<policy-file-request/>\x00"
var ErrIncompletePacket = errors.New("incomplete packet")
// TomeeSocketCodec 协议格式:
//
// * 0 4
// * +-----------+
// * | body len |
// * +-----------+
// * | |
// * + +
// * | body bytes|
// * + +
// * | ... ... |
// * +-----------+
type TomeeSocketCodec struct{}
var _ SocketCodec = (*TomeeSocketCodec)(nil)
func NewTomeeSocketCodec() *TomeeSocketCodec {
return &TomeeSocketCodec{}
}
func handle(c gnet.Conn) {
clientdata:=c.Context().(*entity.ClientData)
if(clientdata.IsCrossDomain){
return
}
// 读取数据并检查是否为跨域请求
data, err := c.Peek(len(TEXT))
if err != nil {
log.Printf("Error reading cross-domain request: %v", err)
return
}
if string(data) == TEXT { //判断是否是跨域请求
log.Printf("Received cross-domain request from %s", c.RemoteAddr())
// 处理跨域请求
c.Write([]byte(CROSS_DOMAIN))
c.Discard(len(TEXT))
clientdata.IsCrossDomain=true
return
}
return
}
func (codec TomeeSocketCodec) Encode(buf []byte) ([]byte, error) {
bodyLen := len(buf)
data := make([]byte, 4+bodyLen)
// 写入4字节的包长度
binary.BigEndian.PutUint32(data[:4], uint32(bodyLen))
// 写入包体
copy(data[4:], buf)
return data, nil
}
func (codec TomeeSocketCodec) Decode(c gnet.Conn) ([]byte, error) {
handle(c)
// 先读取4字节的包长度
lenBuf, err := c.Peek(4)
if err != nil {
if errors.Is(err, io.ErrShortBuffer) {
return nil, ErrIncompletePacket
}
return nil, err
}
bodyLen := binary.BigEndian.Uint32(lenBuf)
totalLen := 4 + int(bodyLen)
// 检查整个包是否完整
buf, err := c.Peek(totalLen)
if err != nil {
if errors.Is(err, io.ErrShortBuffer) {
return nil, ErrIncompletePacket
}
return nil, err
}
// 提取包体
body := make([]byte, bodyLen)
copy(body, buf[4:totalLen])
// 从缓冲区中丢弃已读取的数据
_, _ = c.Discard(totalLen)
return body, nil
}
package codec
import (
"blazing/common/data/entity"
"encoding/binary"
"errors"
"io"
"log"
"github.com/panjf2000/gnet/v2"
)
// 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"
// TEXT 定义跨域请求的文本格式
const TEXT = "<policy-file-request/>\x00"
var ErrIncompletePacket = errors.New("incomplete packet")
// TomeeSocketCodec 协议格式:
//
// * 0 4
// * +-----------+
// * | body len |
// * +-----------+
// * | |
// * + +
// * | body bytes|
// * + +
// * | ... ... |
// * +-----------+
type TomeeSocketCodec struct{}
var _ SocketCodec = (*TomeeSocketCodec)(nil)
func NewTomeeSocketCodec() *TomeeSocketCodec {
return &TomeeSocketCodec{}
}
func handle(c gnet.Conn) {
clientdata := c.Context().(*entity.ClientData)
if clientdata.IsCrossDomain {
return
}
// 读取数据并检查是否为跨域请求
data, err := c.Peek(len(TEXT))
if err != nil {
log.Printf("Error reading cross-domain request: %v", err)
return
}
if string(data) == TEXT { //判断是否是跨域请求
log.Printf("Received cross-domain request from %s", c.RemoteAddr())
// 处理跨域请求
c.Write([]byte(CROSS_DOMAIN))
c.Discard(len(TEXT))
clientdata.IsCrossDomain = true
return
}
//return
}
func (codec TomeeSocketCodec) Encode(buf []byte) ([]byte, error) {
bodyLen := len(buf)
data := make([]byte, 4+bodyLen)
// 写入4字节的包长度
binary.BigEndian.PutUint32(data[:4], uint32(bodyLen))
// 写入包体
copy(data[4:], buf)
return data, nil
}
func (codec TomeeSocketCodec) Decode(c gnet.Conn) ([]byte, error) {
handle(c)
// 先读取4字节的包长度
lenBuf, err := c.Peek(4)
if err != nil {
if errors.Is(err, io.ErrShortBuffer) {
return nil, ErrIncompletePacket
}
return nil, err
}
bodyLen := binary.BigEndian.Uint32(lenBuf)
totalLen := 4 + int(bodyLen)
// 检查整个包是否完整
buf, err := c.Peek(int(bodyLen))
if err != nil {
if errors.Is(err, io.ErrShortBuffer) {
return nil, ErrIncompletePacket
}
return nil, err
}
// 提取包体
body := make([]byte, bodyLen)
copy(body, buf)
// 从缓冲区中丢弃已读取的数据
_, _ = c.Discard(totalLen)
return body, nil
}

View File

@@ -1,24 +1,42 @@
package handler
import (
"blazing/common/serialize/bytearray"
)
// TomeeHeader 结构体字段定义
type TomeeHeader struct {
Version string `json:"version"`
UserID int `json:"userId"`
Error int `json:"error"`
CMDID int `json:"cmdId"`
Result int `json:"result"`
Len uint32 `json:"len"`
Version string `json:"version"`
UserID uint32 `json:"userId"`
Error uint32 `json:"error"`
CMDID uint32 `json:"cmdId"`
Result uint32 `json:"result"`
Data []byte `json:"data"`
}
type TomeeHandler struct {
Callback func(data TomeeHeader)
}
func NewTomeeHandler() *TomeeHandler {
return &TomeeHandler{
}
return &TomeeHandler{}
}
// Handle entry receiver
func (h *TomeeHandler) Handle(data []byte ) {
func (h *TomeeHandler) Handle(data []byte) { //处理接收到的数据 ,
//fmt.Println("接收数据", data)
}
header := TomeeHeader{}
tempdata := bytearray.CreateByteArray(data)
header.Len, _ = tempdata.ReadUInt32()
header.Version, _ = tempdata.ReadString(1)
header.CMDID, _ = tempdata.ReadUInt32()
header.UserID, _ = tempdata.ReadUInt32()
header.Result, _ = tempdata.ReadUInt32()
header.Data = tempdata.BytesAvailable()
//fmt.Println("接收封包", header)
h.Callback(header)
//return header
}