网络层

This commit is contained in:
2025-06-28 17:38:22 +08:00
parent 54dc7ba173
commit 605197345b
20 changed files with 482 additions and 376 deletions

View File

@@ -66,7 +66,8 @@ func (s *WSServer) OnOpen(c gnet.Conn) ([]byte, gnet.Action) {
curHeader: nil,
cachedBuf: bytes.Buffer{},
},
param: make(map[string]string),
param: make(map[string]interface{}),
remoteAddr: c.RemoteAddr().String(),
}
c.SetContext(ws)
s.unUpgradeConn.Store(c.RemoteAddr().String(), ws)
@@ -78,10 +79,10 @@ func (s *WSServer) OnOpen(c gnet.Conn) ([]byte, gnet.Action) {
// The parameter err is the last known connection error.
func (s *WSServer) OnClose(c gnet.Conn, err error) (action gnet.Action) {
s.unUpgradeConn.Delete(c.RemoteAddr().String())
tmp := c.Context()
ws, ok := tmp.(*WSConn)
ws, ok := c.Context().(*WSConn)
if ok {
s.logger.Warnf("connection close")
ws.isClose = true
ws.logger.Warnf("connection close: %v --------------------------------------------------", err)
return gnet.Action(s.i.OnClose(ws, err))
}
return
@@ -91,18 +92,14 @@ func (s *WSServer) OnClose(c gnet.Conn, err error) (action gnet.Action) {
func (s *WSServer) OnTraffic(c gnet.Conn) (action gnet.Action) {
tmp := c.Context()
if tmp == nil {
if s.logger != nil {
s.logger.Errorf("OnTraffic context nil: %v", c)
}
s.logger.Errorf("OnTraffic context nil: %v", c)
action = gnet.Close
return
}
ws, ok := tmp.(*WSConn)
if !ok {
if s.logger != nil {
s.logger.Errorf("OnTraffic convert ws error: %v", tmp)
}
ws.logger.Errorf("OnTraffic convert ws error: %v", tmp)
action = gnet.Close
return
}
@@ -121,9 +118,7 @@ func (s *WSServer) OnTraffic(c gnet.Conn) (action gnet.Action) {
if data != nil {
err := ws.Conn.AsyncWrite(data, nil)
if err != nil {
if ws.logger != nil {
ws.logger.Errorf("update ws write upgrade protocol error", err)
}
ws.logger.Errorf("update ws write upgrade protocol error", err)
action = gnet.Close
}
}
@@ -131,14 +126,22 @@ func (s *WSServer) OnTraffic(c gnet.Conn) (action gnet.Action) {
} else {
msg, err := ws.readWsMessages()
if err != nil {
if ws.logger != nil {
ws.logger.Errorf("read ws messages errors", err)
}
ws.logger.Errorf("read ws messages errors", err)
return gnet.Close
}
if msg != nil {
for _, m := range msg {
if socket.OpCode(m.OpCode) == socket.OpPong {
s.i.OnPong(ws)
continue
}
if socket.OpCode(m.OpCode) == socket.OpClose {
return gnet.Close
}
if socket.OpCode(m.OpCode) == socket.OpPing {
continue
}
a := s.i.OnMessage(ws, m.Payload)
if gnet.Action(a) != gnet.None {
action = gnet.Action(a)
@@ -182,10 +185,7 @@ func (s *WSServer) OnTick() (delay time.Duration, action gnet.Action) {
continue
}
if err := v.Close(); err != nil {
if s.logger != nil {
s.logger.Errorf("upgrade ws time out close socket error: %v", err)
continue
}
v.logger.Errorf("upgrade ws time out close socket error: %v", err)
}
}
d, a := s.i.OnTick()