refactor(entity): 重构 ClientData 结构体并添加同步锁
- 在 ClientData 中添加 sync.Mutex 以确保并发安全 - 实现 SetPlayer 和 GetPlayer 等方法来封装 player 字段的操作 - 更新相关代码以使用新的 ClientData 结构和方法
This commit is contained in:
@@ -2,10 +2,12 @@ package socket
|
||||
|
||||
import (
|
||||
"context"
|
||||
"fmt"
|
||||
"log"
|
||||
|
||||
"blazing/common/data/entity"
|
||||
|
||||
"github.com/gogf/gf/v2/os/glog"
|
||||
"github.com/panjf2000/gnet/v2"
|
||||
"github.com/panjf2000/gnet/v2/pkg/logging"
|
||||
)
|
||||
@@ -30,7 +32,17 @@ func (s *Server) Stop() error {
|
||||
|
||||
func (s *Server) OnClose(c gnet.Conn, _ error) (action gnet.Action) {
|
||||
//fmt.Println(glog.GetStack(), c.Context().(*entity.ClientData).Player.UserID, "断开连接")
|
||||
//fmt.Println("远程地址", c.RemoteAddr(), c)
|
||||
fmt.Printf("关闭函数地址: %p\n", c.Context()) // 输出类似: 0x1040a1390
|
||||
//if c.Context() != nil {
|
||||
v := c.Context().(*entity.ClientData)
|
||||
t := v.GetPlayer()
|
||||
if t != nil {
|
||||
glog.Debug(context.Background(), t.UserID, "断开连接")
|
||||
|
||||
}
|
||||
|
||||
//}
|
||||
//关闭连接
|
||||
return
|
||||
}
|
||||
@@ -43,8 +55,10 @@ func (s *Server) OnBoot(eng gnet.Engine) gnet.Action {
|
||||
}
|
||||
|
||||
func (s *Server) OnTraffic(conn gnet.Conn) (action gnet.Action) {
|
||||
if conn.Context() == nil {
|
||||
conn.SetContext(entity.NewClientData()) //注入data
|
||||
}
|
||||
|
||||
conn.SetContext(entity.NewClientData()) //注入data
|
||||
if s.network == "tcp" {
|
||||
return s.handleTcp(conn)
|
||||
}
|
||||
@@ -100,7 +114,7 @@ const TEXT = "<policy-file-request/>\x00"
|
||||
|
||||
func handle(c gnet.Conn) {
|
||||
clientdata := c.Context().(*entity.ClientData)
|
||||
if clientdata.IsCrossDomain {
|
||||
if clientdata.GetIsCrossDomain() {
|
||||
return
|
||||
|
||||
}
|
||||
@@ -117,7 +131,7 @@ func handle(c gnet.Conn) {
|
||||
c.Write([]byte(CROSS_DOMAIN))
|
||||
c.Discard(len(TEXT))
|
||||
|
||||
clientdata.IsCrossDomain = true //TODO 待修复未成功切换bug
|
||||
clientdata.SetCrossDomain(true) //= true //TODO 待修复未成功切换bug
|
||||
return
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user