fonchain-fiee/pkg/service/websocket/server/start.go

57 lines
1.3 KiB
Go
Raw Normal View History

2025-02-19 06:24:15 +00:00
package server
import (
"encoding/json"
"fmt"
"github.com/fonchain_enterprise/fonchain-main/pkg/cache"
"github.com/fonchain_enterprise/fonchain-main/pkg/model"
"github.com/gin-gonic/gin"
"github.com/gorilla/websocket"
"net/http"
"time"
)
var upgrader = websocket.Upgrader{
CheckOrigin: func(r *http.Request) bool {
return true
},
}
var GlobalClientManager = NewClientManager()
func StartChan() {
GlobalClientManager.Start()
}
func HandleWebSocket(ctx *gin.Context) {
var conn *websocket.Conn
var err error
conn, err = upgrader.Upgrade(ctx.Writer, ctx.Request, nil)
if err != nil {
ctx.JSON(http.StatusInternalServerError, gin.H{"error": err.Error()})
return
}
socketKey := ctx.Query("socketKey")
if socketKey == "" {
conn.Close()
return
}
userInfoVal := cache.RedisClient.Get(socketKey).Val()
if userInfoVal == "" {
conn.Close()
return
}
var userInfo model.LoginInfo
if err = json.Unmarshal([]byte(userInfoVal), &userInfo); err != nil {
conn.Close()
return
}
defer cache.RedisClient.Del(socketKey)
client := NewClient(conn.RemoteAddr().String(), conn, uint64(time.Now().Unix()))
client.UserID = fmt.Sprint(userInfo.ID)
go client.read()
go client.write()
GlobalClientManager.Register <- client
GlobalClientManager.Login <- &login{UserID: fmt.Sprint(userInfo.ID), Client: client}
}