faet: 新增WS模块
This commit is contained in:
98
src/modules/ws/controller/ws.go
Normal file
98
src/modules/ws/controller/ws.go
Normal file
@@ -0,0 +1,98 @@
|
||||
package controller
|
||||
|
||||
import (
|
||||
"strings"
|
||||
|
||||
"ems.agt/src/framework/i18n"
|
||||
"ems.agt/src/framework/logger"
|
||||
"ems.agt/src/framework/utils/ctx"
|
||||
"ems.agt/src/framework/utils/parse"
|
||||
"ems.agt/src/framework/vo/result"
|
||||
"ems.agt/src/modules/ws/service"
|
||||
"github.com/gin-gonic/gin"
|
||||
)
|
||||
|
||||
// 实例化控制层 WSController 结构体
|
||||
var NewWSController = &WSController{
|
||||
wsService: service.NewWSImpl,
|
||||
wsSendService: service.NewWSSendImpl,
|
||||
}
|
||||
|
||||
// WebSocket通信
|
||||
//
|
||||
// PATH /ws
|
||||
type WSController struct {
|
||||
// WebSocket 服务
|
||||
wsService service.IWS
|
||||
// WebSocket消息发送 服务
|
||||
wsSendService service.IWSSend
|
||||
}
|
||||
|
||||
// 通用
|
||||
//
|
||||
// GET /?subGroupIDs=0
|
||||
func (s *WSController) WS(c *gin.Context) {
|
||||
language := ctx.AcceptLanguage(c)
|
||||
|
||||
// 登录用户信息
|
||||
loginUser, err := ctx.LoginUser(c)
|
||||
if err != nil {
|
||||
c.JSON(401, result.CodeMsg(401, i18n.TKey(language, err.Error())))
|
||||
return
|
||||
}
|
||||
|
||||
// 订阅消息组
|
||||
var subGroupIDs []string
|
||||
subGroupIDStr := c.Query("subGroupID")
|
||||
if subGroupIDStr != "" {
|
||||
// 处理字符转id数组后去重
|
||||
ids := strings.Split(subGroupIDStr, ",")
|
||||
uniqueIDs := parse.RemoveDuplicates(ids)
|
||||
if len(uniqueIDs) > 0 {
|
||||
subGroupIDs = uniqueIDs
|
||||
}
|
||||
}
|
||||
|
||||
// 将 HTTP 连接升级为 WebSocket 连接
|
||||
conn := s.wsService.UpgraderWs(c.Writer, c.Request)
|
||||
if conn == nil {
|
||||
return
|
||||
}
|
||||
defer conn.Close()
|
||||
|
||||
wsClient := s.wsService.NewClient(loginUser.UserID, subGroupIDs, conn)
|
||||
|
||||
// 等待停止信号
|
||||
for value := range wsClient.StopChan {
|
||||
logger.Infof("ws Stop Client UID %s %s", wsClient.BindUid, value)
|
||||
return
|
||||
}
|
||||
}
|
||||
|
||||
// 测试
|
||||
//
|
||||
// GET /test?clientId=&groupID=
|
||||
func (s *WSController) Test(c *gin.Context) {
|
||||
language := ctx.AcceptLanguage(c)
|
||||
|
||||
// 登录用户信息
|
||||
loginUser, err := ctx.LoginUser(c)
|
||||
if err != nil {
|
||||
c.JSON(401, result.CodeMsg(401, i18n.TKey(language, err.Error())))
|
||||
return
|
||||
}
|
||||
|
||||
// err = s.wsSendService.ByClientID(c.Query("clientId"), loginUser)
|
||||
// if err != nil {
|
||||
// c.JSON(200, result.ErrMsg(err.Error()))
|
||||
// return
|
||||
// }
|
||||
|
||||
err = s.wsSendService.ByGroupID(c.Query("groupID"), loginUser)
|
||||
if err != nil {
|
||||
c.JSON(200, result.ErrMsg(err.Error()))
|
||||
return
|
||||
}
|
||||
|
||||
c.JSON(200, result.Ok(nil))
|
||||
}
|
||||
Reference in New Issue
Block a user