Refactor stations discovery and add hostapd discovery
This commit is contained in:
parent
69594c2fe4
commit
2922a03724
15 changed files with 1339 additions and 249 deletions
111
internal/station/station.go
Normal file
111
internal/station/station.go
Normal file
|
|
@ -0,0 +1,111 @@
|
|||
package station
|
||||
|
||||
import (
|
||||
"sync"
|
||||
|
||||
"github.com/nemunaire/repeater/internal/models"
|
||||
"github.com/nemunaire/repeater/internal/station/backend"
|
||||
)
|
||||
|
||||
var (
|
||||
currentBackend backend.StationBackend
|
||||
mu sync.RWMutex
|
||||
)
|
||||
|
||||
// Initialize initializes the station discovery backend
|
||||
func Initialize(backendName string, config backend.BackendConfig) error {
|
||||
mu.Lock()
|
||||
defer mu.Unlock()
|
||||
|
||||
// Close existing backend if any
|
||||
if currentBackend != nil {
|
||||
currentBackend.Close()
|
||||
}
|
||||
|
||||
// Create new backend
|
||||
b, err := createBackend(backendName)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
// Initialize the backend
|
||||
if err := b.Initialize(config); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
currentBackend = b
|
||||
return nil
|
||||
}
|
||||
|
||||
// GetStations returns all connected stations as ConnectedDevice models
|
||||
func GetStations() ([]models.ConnectedDevice, error) {
|
||||
mu.RLock()
|
||||
defer mu.RUnlock()
|
||||
|
||||
if currentBackend == nil {
|
||||
return nil, nil
|
||||
}
|
||||
|
||||
stations, err := currentBackend.GetStations()
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
// Convert backend.Station to models.ConnectedDevice
|
||||
devices := make([]models.ConnectedDevice, len(stations))
|
||||
for i, s := range stations {
|
||||
devices[i] = models.ConnectedDevice{
|
||||
Name: s.Hostname,
|
||||
Type: s.Type,
|
||||
MAC: s.MAC,
|
||||
IP: s.IP,
|
||||
}
|
||||
}
|
||||
|
||||
return devices, nil
|
||||
}
|
||||
|
||||
// StartEventMonitoring starts monitoring for station events
|
||||
func StartEventMonitoring(callbacks backend.EventCallbacks) error {
|
||||
mu.RLock()
|
||||
defer mu.RUnlock()
|
||||
|
||||
if currentBackend == nil {
|
||||
return nil
|
||||
}
|
||||
|
||||
return currentBackend.StartEventMonitoring(callbacks)
|
||||
}
|
||||
|
||||
// StopEventMonitoring stops monitoring for station events
|
||||
func StopEventMonitoring() {
|
||||
mu.RLock()
|
||||
defer mu.RUnlock()
|
||||
|
||||
if currentBackend != nil {
|
||||
currentBackend.StopEventMonitoring()
|
||||
}
|
||||
}
|
||||
|
||||
// Close closes the current backend
|
||||
func Close() {
|
||||
mu.Lock()
|
||||
defer mu.Unlock()
|
||||
|
||||
if currentBackend != nil {
|
||||
currentBackend.Close()
|
||||
currentBackend = nil
|
||||
}
|
||||
}
|
||||
|
||||
// SupportsRealTimeEvents returns true if the current backend supports real-time events
|
||||
func SupportsRealTimeEvents() bool {
|
||||
mu.RLock()
|
||||
defer mu.RUnlock()
|
||||
|
||||
if currentBackend == nil {
|
||||
return false
|
||||
}
|
||||
|
||||
return currentBackend.SupportsRealTimeEvents()
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue