repeater/internal/wifi/events.go

70 lines
1.7 KiB
Go

package wifi
import (
"time"
"github.com/nemunaire/repeater/internal/models"
)
// WifiEvent represents a WiFi event to be sent over WebSocket
type WifiEvent struct {
Type string `json:"type"`
Timestamp time.Time `json:"timestamp"`
Data interface{} `json:"data"`
}
// ScanUpdateData contains network list update information
type ScanUpdateData struct {
Networks []models.WiFiNetwork `json:"networks"`
}
// StateChangeData contains connection state change information
type StateChangeData struct {
State string `json:"state"`
SSID string `json:"ssid,omitempty"`
PreviousState string `json:"previous_state,omitempty"`
}
// SignalUpdateData contains signal strength update information
type SignalUpdateData struct {
SSID string `json:"ssid"`
Signal int `json:"signal"` // 1-5 scale
DBm int `json:"dbm"` // Raw dBm value
}
// NewScanUpdateEvent creates a new scan update event
func NewScanUpdateEvent(networks []models.WiFiNetwork) WifiEvent {
return WifiEvent{
Type: "scan_update",
Timestamp: time.Now(),
Data: ScanUpdateData{
Networks: networks,
},
}
}
// NewStateChangeEvent creates a new state change event
func NewStateChangeEvent(state, ssid, previousState string) WifiEvent {
return WifiEvent{
Type: "state_change",
Timestamp: time.Now(),
Data: StateChangeData{
State: state,
SSID: ssid,
PreviousState: previousState,
},
}
}
// NewSignalUpdateEvent creates a new signal update event
func NewSignalUpdateEvent(ssid string, signal, dbm int) WifiEvent {
return WifiEvent{
Type: "signal_update",
Timestamp: time.Now(),
Data: SignalUpdateData{
SSID: ssid,
Signal: signal,
DBm: dbm,
},
}
}