diff --git a/internal/handler/app/deviceWebSocketHandler.go b/internal/handler/app/deviceWebSocketHandler.go new file mode 100644 index 0000000..7a09e39 --- /dev/null +++ b/internal/handler/app/deviceWebSocketHandler.go @@ -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) + } +} diff --git a/internal/handler/routes.go b/internal/handler/routes.go index 817cf2a..272ac29 100644 --- a/internal/handler/routes.go +++ b/internal/handler/routes.go @@ -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)) + } } diff --git a/server b/ppanel-server similarity index 86% rename from server rename to ppanel-server index 6bb6b28..bc4e193 100755 Binary files a/server and b/ppanel-server differ