| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566 |
- 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
- }
- fmt.Println(fmt.Sprintf("用户id:%d", uid))
- conn.Uid = uid
- // 处理任务
- go c.svcCtx.WsServer.HandleWrite(conn)
- if c.svcCtx.WsServer.IsAck(nil) {
- go c.svcCtx.WsServer.ReadAck(conn)
- }
- for {
- // 获取消息
- _, msg, err := conn.ReadMessage()
- 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 {
- conn.WriteMessageToChan(&message)
- }
- }
- }
|