All checks were successful
Build docker and publish / build (20.15.1) (push) Successful in 7m50s
新增app模块用于处理设备WebSocket连接,包括用户ID和设备号验证
47 lines
1.4 KiB
Go
47 lines
1.4 KiB
Go
package app
|
||
|
||
import (
|
||
"strconv"
|
||
|
||
"github.com/gin-gonic/gin"
|
||
"github.com/perfect-panel/server/internal/svc"
|
||
"github.com/perfect-panel/server/pkg/logger"
|
||
"github.com/perfect-panel/server/pkg/result"
|
||
)
|
||
|
||
// Device WebSocket Handler
|
||
func DeviceWebSocketHandler(svcCtx *svc.ServiceContext) func(c *gin.Context) {
|
||
return func(c *gin.Context) {
|
||
// 获取用户ID
|
||
userIDStr := c.Param("userid")
|
||
userID, err := strconv.ParseInt(userIDStr, 10, 64)
|
||
if err != nil {
|
||
logger.WithContext(c.Request.Context()).Error("[DeviceWebSocketHandler] Invalid user ID", logger.Field("userid", userIDStr), logger.Field("error", err.Error()))
|
||
result.ParamErrorResult(c, err)
|
||
return
|
||
}
|
||
|
||
// 获取设备号
|
||
deviceNumber := c.Param("device_number")
|
||
if deviceNumber == "" {
|
||
logger.WithContext(c.Request.Context()).Error("[DeviceWebSocketHandler] Device number is required")
|
||
result.ParamErrorResult(c, nil)
|
||
return
|
||
}
|
||
|
||
// 获取Authorization header作为session
|
||
authorization := c.GetHeader("Authorization")
|
||
if authorization == "" {
|
||
logger.WithContext(c.Request.Context()).Error("[DeviceWebSocketHandler] Authorization header is required")
|
||
result.ParamErrorResult(c, nil)
|
||
return
|
||
}
|
||
|
||
// 获取最大设备数量配置,默认为3
|
||
maxDevices := 3
|
||
|
||
// 使用设备管理器添加设备
|
||
svcCtx.DeviceManager.AddDevice(c.Writer, c.Request, authorization, userID, deviceNumber, maxDevices)
|
||
}
|
||
}
|