From f52bbdc179e558e92b18a8214ec3527947a980e7 Mon Sep 17 00:00:00 2001 From: Eli Yip Date: Tue, 27 May 2025 14:48:15 +0800 Subject: [PATCH] feat: add DeviceManager --- pkg/device/manager.go | 63 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 63 insertions(+) create mode 100644 pkg/device/manager.go diff --git a/pkg/device/manager.go b/pkg/device/manager.go new file mode 100644 index 0000000..d7d6e8c --- /dev/null +++ b/pkg/device/manager.go @@ -0,0 +1,63 @@ +package device + +import ( + "fmt" + "sync" +) + +// DeviceManager 管理设备实例 +type DeviceManager struct { + devices map[string]Device + mutex sync.RWMutex +} + +func NewDeviceManager() *DeviceManager { return &DeviceManager{devices: make(map[string]Device)} } + +func (m *DeviceManager) RegisterDevice(dev Device) error { + m.mutex.Lock() + defer m.mutex.Unlock() + + id := dev.GetID() + if _, exists := m.devices[id]; exists { + return fmt.Errorf("设备 %s 已存在", id) + } + + m.devices[id] = dev + return nil +} + +func (m *DeviceManager) GetDevice(id string) (Device, error) { + m.mutex.RLock() + defer m.mutex.RUnlock() + + dev, exists := m.devices[id] + if !exists { + return nil, fmt.Errorf("设备 %s 不存在", id) + } + + return dev, nil +} + +func (m *DeviceManager) GetAllDevices() []Device { + m.mutex.RLock() + defer m.mutex.RUnlock() + + devices := make([]Device, 0, len(m.devices)) + for _, dev := range m.devices { + devices = append(devices, dev) + } + + return devices +} + +func (m *DeviceManager) RemoveDevice(id string) error { + m.mutex.Lock() + defer m.mutex.Unlock() + + if _, exists := m.devices[id]; !exists { + return fmt.Errorf("设备 %s 不存在", id) + } + + delete(m.devices, id) + return nil +}