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"
|
adminTicket "github.com/perfect-panel/server/internal/handler/admin/ticket"
|
||||||
adminTool "github.com/perfect-panel/server/internal/handler/admin/tool"
|
adminTool "github.com/perfect-panel/server/internal/handler/admin/tool"
|
||||||
adminUser "github.com/perfect-panel/server/internal/handler/admin/user"
|
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"
|
auth "github.com/perfect-panel/server/internal/handler/auth"
|
||||||
authOauth "github.com/perfect-panel/server/internal/handler/auth/oauth"
|
authOauth "github.com/perfect-panel/server/internal/handler/auth/oauth"
|
||||||
common "github.com/perfect-panel/server/internal/handler/common"
|
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
|
// Get Server Protocol Config
|
||||||
serverGroupRouterV2.GET("/:server_id", server.QueryServerProtocolConfigHandler(serverCtx))
|
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