1. 优化前端显示
2. 优化日志输出
This commit is contained in:
@@ -3,12 +3,14 @@
|
||||
package websocket
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"net/http"
|
||||
"sync"
|
||||
"time"
|
||||
|
||||
"git.huangwc.com/pig/pig-farm-controller/internal/logs"
|
||||
"git.huangwc.com/pig/pig-farm-controller/internal/service"
|
||||
"git.huangwc.com/pig/pig-farm-controller/internal/storage/repository"
|
||||
"github.com/gin-gonic/gin"
|
||||
"github.com/gorilla/websocket"
|
||||
)
|
||||
@@ -29,10 +31,13 @@ type Manager struct {
|
||||
|
||||
// connections 设备连接映射
|
||||
connections map[string]*websocket.Conn
|
||||
|
||||
// deviceRepo 设备仓库
|
||||
deviceRepo repository.DeviceRepo
|
||||
}
|
||||
|
||||
// NewManager 创建WebSocket管理器实例
|
||||
func NewManager(websocketService *service.WebSocketService) *Manager {
|
||||
func NewManager(websocketService *service.WebSocketService, deviceRepo repository.DeviceRepo) *Manager {
|
||||
return &Manager{
|
||||
websocketService: websocketService,
|
||||
logger: logs.NewLogger(),
|
||||
@@ -43,9 +48,20 @@ func NewManager(websocketService *service.WebSocketService) *Manager {
|
||||
},
|
||||
},
|
||||
connections: make(map[string]*websocket.Conn),
|
||||
deviceRepo: deviceRepo,
|
||||
}
|
||||
}
|
||||
|
||||
// getDeviceDisplayName 获取设备显示名称
|
||||
func (wm *Manager) getDeviceDisplayName(deviceID string) string {
|
||||
if wm.deviceRepo != nil {
|
||||
if device, err := wm.deviceRepo.FindByIDString(deviceID); err == nil && device != nil {
|
||||
return fmt.Sprintf("%s(id:%s)", device.Name, deviceID)
|
||||
}
|
||||
}
|
||||
return fmt.Sprintf("未知设备(id:%s)", deviceID)
|
||||
}
|
||||
|
||||
// HandleConnection 处理WebSocket连接
|
||||
func (wm *Manager) HandleConnection(c *gin.Context) {
|
||||
// 升级HTTP连接到WebSocket
|
||||
@@ -69,7 +85,8 @@ func (wm *Manager) HandleConnection(c *gin.Context) {
|
||||
wm.connections[deviceID] = conn
|
||||
wm.mutex.Unlock()
|
||||
|
||||
wm.logger.Info("设备 " + deviceID + " 已连接")
|
||||
deviceName := wm.getDeviceDisplayName(deviceID)
|
||||
wm.logger.Info("设备 " + deviceName + " 已连接")
|
||||
|
||||
// 发送连接成功消息
|
||||
successMsg := service.WebSocketMessage{
|
||||
@@ -84,7 +101,7 @@ func (wm *Manager) HandleConnection(c *gin.Context) {
|
||||
// 读取消息
|
||||
messageType, message, err := conn.ReadMessage()
|
||||
if err != nil {
|
||||
wm.logger.Error("读取设备 " + deviceID + " 消息失败: " + err.Error())
|
||||
wm.logger.Error("读取设备 " + deviceName + " 消息失败: " + err.Error())
|
||||
break
|
||||
}
|
||||
|
||||
@@ -95,7 +112,7 @@ func (wm *Manager) HandleConnection(c *gin.Context) {
|
||||
|
||||
// 处理设备消息
|
||||
if err := wm.websocketService.HandleMessage(deviceID, message); err != nil {
|
||||
wm.logger.Error("处理设备 " + deviceID + " 消息失败: " + err.Error())
|
||||
wm.logger.Error("处理设备 " + deviceName + " 消息失败: " + err.Error())
|
||||
continue
|
||||
}
|
||||
}
|
||||
@@ -106,7 +123,7 @@ func (wm *Manager) HandleConnection(c *gin.Context) {
|
||||
wm.mutex.Unlock()
|
||||
|
||||
conn.Close()
|
||||
wm.logger.Info("设备 " + deviceID + " 已断开连接")
|
||||
wm.logger.Info("设备 " + deviceName + " 已断开连接")
|
||||
}
|
||||
|
||||
// SendCommand 向指定设备发送指令
|
||||
@@ -129,7 +146,8 @@ func (wm *Manager) SendCommand(deviceID, command string, data interface{}) error
|
||||
|
||||
// 发送消息
|
||||
if err := conn.WriteJSON(msg); err != nil {
|
||||
return err
|
||||
deviceName := wm.getDeviceDisplayName(deviceID)
|
||||
return fmt.Errorf("向设备 %s 发送指令失败: %v", deviceName, err)
|
||||
}
|
||||
|
||||
return nil
|
||||
|
||||
Reference in New Issue
Block a user