增加websocket支持
This commit is contained in:
@@ -1,16 +1,94 @@
|
||||
// Package remote 提供远程管理功能
|
||||
// 实现手机端和Web端的远程监控和控制能力
|
||||
// 通过API接口层提供远程访问能力
|
||||
// Package remote 提供远程设备控制相关功能的控制器
|
||||
// 实现平台向中继设备发送指令等操作
|
||||
package remote
|
||||
|
||||
// RemoteController 远程控制器
|
||||
// 管理远程访问和控制的逻辑
|
||||
type RemoteController struct {
|
||||
// TODO: 定义远程控制器结构
|
||||
import (
|
||||
"git.huangwc.com/pig/pig-farm-controller/internal/controller"
|
||||
"git.huangwc.com/pig/pig-farm-controller/internal/logs"
|
||||
"git.huangwc.com/pig/pig-farm-controller/internal/service"
|
||||
"github.com/gin-gonic/gin"
|
||||
)
|
||||
|
||||
// Controller 远程控制控制器
|
||||
type Controller struct {
|
||||
websocketService *service.WebSocketService
|
||||
logger *logs.Logger
|
||||
}
|
||||
|
||||
// NewRemoteController 创建并返回一个新的远程控制器实例
|
||||
func NewRemoteController() *RemoteController {
|
||||
// TODO: 实现远程控制器初始化
|
||||
return nil
|
||||
// NewController 创建远程控制控制器实例
|
||||
func NewController(websocketService *service.WebSocketService) *Controller {
|
||||
return &Controller{
|
||||
websocketService: websocketService,
|
||||
logger: logs.NewLogger(),
|
||||
}
|
||||
}
|
||||
|
||||
// SendCommandRequest 发送指令请求结构体
|
||||
type SendCommandRequest struct {
|
||||
DeviceID string `json:"device_id" binding:"required"`
|
||||
Command string `json:"command" binding:"required"`
|
||||
Data interface{} `json:"data,omitempty"`
|
||||
}
|
||||
|
||||
// SendCommandResponseData 发送指令响应数据结构体
|
||||
type SendCommandResponseData struct {
|
||||
DeviceID string `json:"device_id"`
|
||||
Command string `json:"command"`
|
||||
Status string `json:"status"`
|
||||
}
|
||||
|
||||
// SendCommand 向设备发送指令接口
|
||||
// @Summary 向设备发送指令
|
||||
// @Description 平台向指定设备发送控制指令
|
||||
// @Tags remote
|
||||
// @Accept json
|
||||
// @Produce json
|
||||
// @Param request body SendCommandRequest true "指令请求"
|
||||
// @Success 200 {object} controller.APIResponse{data=SendCommandResponseData}
|
||||
// @Router /api/v1/remote/command [post]
|
||||
func (c *Controller) SendCommand(ctx *gin.Context) {
|
||||
var req SendCommandRequest
|
||||
if err := ctx.ShouldBindJSON(&req); err != nil {
|
||||
controller.SendErrorResponse(ctx, controller.InvalidParameterCode, "请求参数错误")
|
||||
return
|
||||
}
|
||||
|
||||
// 通过WebSocket服务向设备发送指令
|
||||
err := c.websocketService.SendCommand(req.DeviceID, req.Command, req.Data)
|
||||
if err != nil {
|
||||
c.logger.Error("发送指令失败: " + err.Error())
|
||||
controller.SendErrorResponse(ctx, controller.InternalServerErrorCode, "发送指令失败: "+err.Error())
|
||||
return
|
||||
}
|
||||
|
||||
data := SendCommandResponseData{
|
||||
DeviceID: req.DeviceID,
|
||||
Command: req.Command,
|
||||
Status: "sent",
|
||||
}
|
||||
|
||||
controller.SendSuccessResponse(ctx, "指令发送成功", data)
|
||||
}
|
||||
|
||||
// ListConnectedDevicesResponseData 获取已连接设备列表响应数据结构体
|
||||
type ListConnectedDevicesResponseData struct {
|
||||
Devices []string `json:"devices"`
|
||||
}
|
||||
|
||||
// ListConnectedDevices 获取已连接设备列表接口
|
||||
// @Summary 获取已连接设备列表
|
||||
// @Description 获取当前通过WebSocket连接到平台的设备列表
|
||||
// @Tags remote
|
||||
// @Produce json
|
||||
// @Success 200 {object} controller.APIResponse{data=ListConnectedDevicesResponseData}
|
||||
// @Router /api/v1/remote/devices [get]
|
||||
func (c *Controller) ListConnectedDevices(ctx *gin.Context) {
|
||||
// 获取已连接的设备列表
|
||||
devices := c.websocketService.GetConnectedDevices()
|
||||
|
||||
data := ListConnectedDevicesResponseData{
|
||||
Devices: devices,
|
||||
}
|
||||
|
||||
controller.SendSuccessResponse(ctx, "获取设备列表成功", data)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user