Files

62 lines
1.6 KiB
Go

package ws_gateway
import (
"fmt"
"git.hlsq.asia/mmorpg/service-common/log"
"git.hlsq.asia/mmorpg/service-common/net/socket"
"git.hlsq.asia/mmorpg/service-gateway/internal/handler/ws_handler/client"
"git.hlsq.asia/mmorpg/service-gateway/internal/handler/ws_handler/login"
"go.uber.org/zap"
"time"
)
type GatewayWsServer struct {
logger *zap.SugaredLogger
}
func (g *GatewayWsServer) OnOpen(conn socket.ISocketConn) ([]byte, socket.Action) {
g.logger = log.GetLogger().Named(fmt.Sprintf("addr:%v", conn.RemoteAddr()))
return nil, socket.None
}
func (g *GatewayWsServer) OnHandShake(conn socket.ISocketConn) socket.Action {
token, ok := conn.GetParam("token").(string)
if !ok {
g.logger.Warnf("token is invalid")
return socket.Close
}
cli := client.NewClient(conn)
conn.SetParam("client", cli)
if !login.GetLoginQueue().AddToLoginQueue(&login.User{Cli: cli, Token: token}) {
g.logger.Warnf("AddToLoginQueue err, login queue full")
return socket.Close
}
return socket.None
}
func (g *GatewayWsServer) OnMessage(conn socket.ISocketConn, bytes []byte) socket.Action {
cli, ok := conn.GetParam("client").(*client.Client)
if !ok || cli.USN == 0 || cli.Status != 1 {
return socket.Close
}
cli.OnEvent(&client.ClientEvent{Msg: bytes})
return socket.None
}
func (g *GatewayWsServer) OnPong(conn socket.ISocketConn) {
cli, ok := conn.GetParam("client").(*client.Client)
if !ok || cli.USN == 0 {
return
}
cli.OnEvent(&client.PongEvent{})
}
func (g *GatewayWsServer) OnClose(_ socket.ISocketConn, _ error) socket.Action {
return socket.Close
}
func (g *GatewayWsServer) OnTick() (time.Duration, socket.Action) {
return 5 * time.Second, socket.None
}