feat 排队
This commit is contained in:
@@ -5,9 +5,10 @@ import (
|
||||
"common/net/socket"
|
||||
"common/utils"
|
||||
"fmt"
|
||||
"gateway/internal/handler/ws_handler"
|
||||
"gateway/config"
|
||||
"gateway/internal/handler/ws_handler/client"
|
||||
"gateway/internal/handler/ws_handler/login"
|
||||
"go.uber.org/zap"
|
||||
"strconv"
|
||||
"time"
|
||||
)
|
||||
|
||||
@@ -20,49 +21,42 @@ func (g *GatewayWsServer) OnOpen(conn socket.ISocketConn) ([]byte, socket.Action
|
||||
return nil, socket.None
|
||||
}
|
||||
|
||||
func (g *GatewayWsServer) OnHandShake(conn socket.ISocketConn, bytes []byte, callback func(conn socket.ISocketConn, bytes []byte)) socket.Action {
|
||||
func (g *GatewayWsServer) OnHandShake(conn socket.ISocketConn) socket.Action {
|
||||
token, ok := conn.GetParam("token").(string)
|
||||
if !ok {
|
||||
g.logger.Warnf("token is not string")
|
||||
g.logger.Warnf("token is invalid")
|
||||
return socket.Close
|
||||
}
|
||||
//claims, err := utils.ParseToken(token, config.Get().Auth.Secret)
|
||||
//if err != nil {
|
||||
// g.logger.Warnf("token is invalid")
|
||||
// return socket.Close
|
||||
//}
|
||||
|
||||
t, _ := strconv.Atoi(token)
|
||||
claims := utils.Claims{
|
||||
USN: int64(t),
|
||||
claims, err := utils.ParseToken(token, config.Get().Auth.Secret)
|
||||
if err != nil {
|
||||
g.logger.Warnf("token is invalid")
|
||||
return socket.Close
|
||||
}
|
||||
|
||||
cli := client.NewClient(claims.USN, conn)
|
||||
conn.SetParam("client", cli)
|
||||
if !login.GetLoginQueue().AddToLoginQueue(&login.User{Cli: cli, Token: token}) {
|
||||
g.logger.Warnf("AddToLoginQueue err, login queue full, usn: %v", claims.USN)
|
||||
return socket.Close
|
||||
}
|
||||
go func(shResp []byte) {
|
||||
if oldClient := ws_handler.UserMgr.GetByUSN(claims.USN); oldClient != nil {
|
||||
oldClient.CloseClient()
|
||||
}
|
||||
client := ws_handler.NewClient(claims.USN, conn)
|
||||
ws_handler.UserMgr.Add(claims.USN, client)
|
||||
conn.SetParam("client", client)
|
||||
callback(conn, shResp)
|
||||
}(bytes)
|
||||
return socket.None
|
||||
}
|
||||
|
||||
func (g *GatewayWsServer) OnMessage(conn socket.ISocketConn, bytes []byte) socket.Action {
|
||||
client, ok := conn.GetParam("client").(*ws_handler.Client)
|
||||
if !ok || client.USN == 0 {
|
||||
cli, ok := conn.GetParam("client").(*client.Client)
|
||||
if !ok || cli.USN == 0 || cli.Status != 1 {
|
||||
return socket.Close
|
||||
}
|
||||
client.OnEvent(&ws_handler.ClientEvent{Msg: bytes})
|
||||
cli.OnEvent(&client.ClientEvent{Msg: bytes})
|
||||
return socket.None
|
||||
}
|
||||
|
||||
func (g *GatewayWsServer) OnPong(conn socket.ISocketConn) {
|
||||
client, ok := conn.GetParam("client").(*ws_handler.Client)
|
||||
if !ok || client.USN == 0 {
|
||||
cli, ok := conn.GetParam("client").(*client.Client)
|
||||
if !ok || cli.USN == 0 {
|
||||
return
|
||||
}
|
||||
client.OnEvent(&ws_handler.PongEvent{})
|
||||
cli.OnEvent(&client.PongEvent{})
|
||||
}
|
||||
|
||||
func (g *GatewayWsServer) OnClose(_ socket.ISocketConn, _ error) socket.Action {
|
||||
|
||||
Reference in New Issue
Block a user