package user

import (
	"context"
	"github.com/gorilla/websocket"
	"microGame/app/usercenter/cmd/api/internal/game"
	"net/http"

	"github.com/zeromicro/go-zero/core/logx"
	"microGame/app/usercenter/cmd/api/internal/svc"
)

var upgrade = websocket.Upgrader{
	ReadBufferSize:  1024,
	WriteBufferSize: 1024,
	CheckOrigin: func(r *http.Request) bool {
		return true
	},
}

type WsLogic struct {
	logx.Logger
	ctx    context.Context
	svcCtx *svc.ServiceContext
}

// NewWsLogic ws
func NewWsLogic(ctx context.Context, svcCtx *svc.ServiceContext) *WsLogic {
	return &WsLogic{
		Logger: logx.WithContext(ctx),
		ctx:    ctx,
		svcCtx: svcCtx,
	}
}

// Ws 程序退出关闭所有长连接
func (l *WsLogic) Ws(w http.ResponseWriter, r *http.Request) {

	k := r.URL.Query().Get("k")
	if k == "" {
		return
	}

	conn, err := upgrade.Upgrade(w, r, nil)
	if err != nil {
		return
	}

	client := &game.Player{
		SvcCtx: l.svcCtx,
		Conn:   conn,
		Send:   make(chan []byte, game.BufSize),
		//Uid:    100,
	}
	client.SvcCtx.Hub.Register <- client

	go client.WritePump()
	go client.ReadPump()
}
