1
This commit is contained in:
@@ -2,6 +2,7 @@ package socket
|
||||
|
||||
import (
|
||||
"context"
|
||||
"log"
|
||||
|
||||
"blazing/common/data/entity"
|
||||
|
||||
@@ -48,7 +49,9 @@ func (s *Server) OnTraffic(conn gnet.Conn) (action gnet.Action) {
|
||||
func (s *Server) handleTcp(conn gnet.Conn) (action gnet.Action) {
|
||||
|
||||
for {
|
||||
|
||||
if !s.discorse {
|
||||
handle(conn)
|
||||
}
|
||||
data, err := s.codec.Decode(conn)
|
||||
if err != nil {
|
||||
break
|
||||
@@ -56,7 +59,7 @@ func (s *Server) handleTcp(conn gnet.Conn) (action gnet.Action) {
|
||||
|
||||
//client := conn.RemoteAddr().String()
|
||||
_ = s.workerPool.Submit(func() {
|
||||
s.parser(data)
|
||||
s.parser(conn, data)
|
||||
})
|
||||
|
||||
return gnet.None
|
||||
@@ -73,12 +76,44 @@ func (s *Server) handleTcp(conn gnet.Conn) (action gnet.Action) {
|
||||
|
||||
}
|
||||
|
||||
func (s *Server) parser(line []byte) {
|
||||
func (s *Server) parser(c gnet.Conn, line []byte) {
|
||||
//todo 这里待实现注入player实体
|
||||
s.handler.Handle(line)
|
||||
s.handler.Handle(c, 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)
|
||||
}
|
||||
|
||||
// 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"
|
||||
|
||||
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
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user