| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768 |
- package logic
- import (
- "context"
- "encoding/json"
- "fmt"
- "slowwildws/internal/server"
- "slowwildws/internal/svc"
- "slowwildws/internal/types"
- "github.com/zeromicro/go-zero/core/logx"
- )
- type ConnectionLogic struct {
- logx.Logger
- ctx context.Context
- svcCtx *svc.ServiceContext
- }
- func NewConnectionLogic(ctx context.Context, svcCtx *svc.ServiceContext) *ConnectionLogic {
- return &ConnectionLogic{
- Logger: logx.WithContext(ctx),
- ctx: ctx,
- svcCtx: svcCtx,
- }
- }
- // 处理连接信息
- func (c *ConnectionLogic) HandlerConn(conn *server.ConnectionServer) {
- uid := c.svcCtx.WsServer.GetUserId(conn)
- if uid == 0 {
- // 如果用户id不存在,直接关闭连接
- c.svcCtx.WsServer.Close(conn)
- return
- }
- conn.Uid = uid
- // 处理任务
- go c.svcCtx.WsServer.HandleWrite(conn)
- if c.svcCtx.WsServer.IsAck(nil) {
- fmt.Println("read ack")
- go c.svcCtx.WsServer.ReadAck(conn)
- }
- for {
- // 获取消息
- _, msg, err := conn.ReadMessage()
- fmt.Println("read message")
- if err != nil {
- c.Logger.Errorf("websocket conn read message error %v", err)
- c.svcCtx.WsServer.Close(conn)
- return
- }
- // 解析消息
- var message types.Message
- if err = json.Unmarshal(msg, &message); err != nil {
- c.Logger.Errorf("json unmarshal err %v, msg %v", err, string(msg))
- c.svcCtx.WsServer.Close(conn)
- return
- }
- if c.svcCtx.WsServer.IsAck(&message) {
- c.svcCtx.WsServer.Logger.Infof("conn message read ack msg %v", message)
- conn.AppendMsgMq(&message)
- } else {
- fmt.Println("write message")
- conn.WriteMessageToChan(&message)
- }
- }
- }
|