feat(handler): 添加设备WebSocket连接处理功能
All checks were successful
Build docker and publish / build (20.15.1) (push) Successful in 7m50s

新增app模块用于处理设备WebSocket连接,包括用户ID和设备号验证
This commit is contained in:
shanshanzhong 2025-10-21 23:26:18 -07:00
parent 3bbd687231
commit b0cf0c4e3c
3 changed files with 54 additions and 0 deletions

View File

@ -0,0 +1,46 @@
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)
}
}

View File

@ -22,6 +22,7 @@ import (
adminTicket "github.com/perfect-panel/server/internal/handler/admin/ticket"
adminTool "github.com/perfect-panel/server/internal/handler/admin/tool"
adminUser "github.com/perfect-panel/server/internal/handler/admin/user"
app "github.com/perfect-panel/server/internal/handler/app"
auth "github.com/perfect-panel/server/internal/handler/auth"
authOauth "github.com/perfect-panel/server/internal/handler/auth/oauth"
common "github.com/perfect-panel/server/internal/handler/common"
@ -867,4 +868,11 @@ func RegisterHandlers(router *gin.Engine, serverCtx *svc.ServiceContext) {
// Get Server Protocol Config
serverGroupRouterV2.GET("/:server_id", server.QueryServerProtocolConfigHandler(serverCtx))
}
// App WebSocket routes
appGroupRouter := router.Group("/v1/app")
{
// Device WebSocket connection
appGroupRouter.GET("/ws/:userid/:device_number", app.DeviceWebSocketHandler(serverCtx))
}
}

Binary file not shown.