136 lines
2.9 KiB
Go
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
|
|
}
|