Files
2025-12-02 23:20:10 +08:00

136 lines
2.9 KiB
Go

package device
import (
"sync"
)
// Device 设备信息
type Device struct {
ID string `json:"id"`
Name string `json:"name"`
IP string `json:"ip"`
Token string `json:"token"` // 设备认证令牌
Status string `json:"status"` // active, inactive, offline
CreatedAt int64 `json:"created_at"`
UpdatedAt int64 `json:"updated_at"`
}
// Storage 设备存储接口
type Storage interface {
// GetDevices 获取所有设备
GetDevices() []Device
// GetDevice 获取指定设备
GetDevice(id string) (Device, bool)
// GetDeviceByToken 通过令牌获取设备
GetDeviceByToken(token string) (Device, bool)
// AddDevice 添加设备
AddDevice(device Device) error
// UpdateDevice 更新设备
UpdateDevice(device Device) error
// DeleteDevice 删除设备
DeleteDevice(id string) error
// UpdateDeviceStatus 更新设备状态
UpdateDeviceStatus(id string, status string) error
}
// MemoryStorage 内存设备存储
type MemoryStorage struct {
devices map[string]Device
mutex sync.RWMutex
}
// NewMemoryStorage 创建内存设备存储实例
func NewMemoryStorage() *MemoryStorage {
return &MemoryStorage{
devices: make(map[string]Device),
}
}
// GetDevices 获取所有设备
func (s *MemoryStorage) GetDevices() []Device {
s.mutex.RLock()
defer s.mutex.RUnlock()
devices := make([]Device, 0, len(s.devices))
for _, device := range s.devices {
devices = append(devices, device)
}
return devices
}
// GetDevice 获取指定设备
func (s *MemoryStorage) GetDevice(id string) (Device, bool) {
s.mutex.RLock()
defer s.mutex.RUnlock()
device, ok := s.devices[id]
return device, ok
}
// AddDevice 添加设备
func (s *MemoryStorage) AddDevice(device Device) error {
s.mutex.Lock()
defer s.mutex.Unlock()
// 检查设备是否已存在
if _, ok := s.devices[device.ID]; ok {
return nil // 设备已存在,不重复添加
}
s.devices[device.ID] = device
return nil
}
// UpdateDevice 更新设备
func (s *MemoryStorage) UpdateDevice(device Device) error {
s.mutex.Lock()
defer s.mutex.Unlock()
// 检查设备是否存在
if _, ok := s.devices[device.ID]; !ok {
return nil // 设备不存在,不更新
}
s.devices[device.ID] = device
return nil
}
// DeleteDevice 删除设备
func (s *MemoryStorage) DeleteDevice(id string) error {
s.mutex.Lock()
defer s.mutex.Unlock()
delete(s.devices, id)
return nil
}
// GetDeviceByToken 通过令牌获取设备
func (s *MemoryStorage) GetDeviceByToken(token string) (Device, bool) {
s.mutex.RLock()
defer s.mutex.RUnlock()
for _, device := range s.devices {
if device.Token == token {
return device, true
}
}
return Device{}, false
}
// UpdateDeviceStatus 更新设备状态
func (s *MemoryStorage) UpdateDeviceStatus(id string, status string) error {
s.mutex.Lock()
defer s.mutex.Unlock()
device, ok := s.devices[id]
if !ok {
return nil // 设备不存在,不更新
}
device.Status = status
s.devices[id] = device
return nil
}