feat(handler): 添加设备WebSocket连接处理功能
All checks were successful
Build docker and publish / build (20.15.1) (push) Successful in 7m50s
All checks were successful
Build docker and publish / build (20.15.1) (push) Successful in 7m50s
新增app模块用于处理设备WebSocket连接,包括用户ID和设备号验证
This commit is contained in:
parent
3bbd687231
commit
b0cf0c4e3c
46
internal/handler/app/deviceWebSocketHandler.go
Normal file
46
internal/handler/app/deviceWebSocketHandler.go
Normal 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)
|
||||
}
|
||||
}
|
||||
@ -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.
Loading…
x
Reference in New Issue
Block a user