// Package remote 提供远程设备控制相关功能的控制器 // 实现平台向中继设备发送指令等操作 package remote 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 } // 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) }