♻️ Moves analytics subscription handling to store
This commit is contained in:
@@ -1,19 +1,34 @@
|
||||
import { AnalyticsData } from '$lib/platform_shared/message'
|
||||
import { writable } from 'svelte/store'
|
||||
|
||||
const analytics_data: AnalyticsData[] = []
|
||||
import { socket } from './socket'
|
||||
|
||||
const maxAnalyticsData = 100
|
||||
|
||||
function createAnalytics() {
|
||||
const { subscribe, update } = writable(analytics_data)
|
||||
const { subscribe, update } = writable<AnalyticsData[]>([])
|
||||
|
||||
let unsubscribe: (() => void) | null = null
|
||||
let listenerCount = 0
|
||||
|
||||
const addData = (content: AnalyticsData) => {
|
||||
update(data => [...data, content].slice(-maxAnalyticsData))
|
||||
}
|
||||
|
||||
return {
|
||||
subscribe,
|
||||
addData: (content: AnalyticsData) => {
|
||||
update(analytics_data => {
|
||||
return [...analytics_data, content].slice(-maxAnalyticsData)
|
||||
})
|
||||
addData,
|
||||
listen: () => {
|
||||
listenerCount++
|
||||
if (!unsubscribe) {
|
||||
unsubscribe = socket.on(AnalyticsData, addData)
|
||||
}
|
||||
},
|
||||
stop: () => {
|
||||
listenerCount = Math.max(0, listenerCount - 1)
|
||||
if (listenerCount === 0 && unsubscribe) {
|
||||
unsubscribe()
|
||||
unsubscribe = null
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,3 +1,53 @@
|
||||
export enum MessageTopic {
|
||||
imu = 'imu',
|
||||
imuCalibrate = 'imuCalibrate',
|
||||
mode = 'mode',
|
||||
input = 'input',
|
||||
analytics = 'analytics',
|
||||
position = 'position',
|
||||
angles = 'angles',
|
||||
i2cScan = 'i2cScan',
|
||||
peripheralSettings = 'peripheralSettings',
|
||||
otastatus = 'otastatus',
|
||||
gait = 'walk_gait',
|
||||
servoState = 'servoState',
|
||||
servoPWM = 'servoPWM',
|
||||
WiFiSettings = 'WiFiSettings',
|
||||
sonar = 'sonar',
|
||||
rssi = 'rssi'
|
||||
}
|
||||
|
||||
export type WifiStatus = {
|
||||
status: number
|
||||
local_ip: string
|
||||
mac_address: string
|
||||
rssi: number
|
||||
ssid: string
|
||||
bssid: string
|
||||
channel: number
|
||||
subnet_mask: string
|
||||
gateway_ip: string
|
||||
dns_ip_1: string
|
||||
dns_ip_2?: string
|
||||
}
|
||||
|
||||
export type KnownNetworkItem = {
|
||||
ssid: string
|
||||
password: string
|
||||
static_ip_config: boolean
|
||||
local_ip?: string
|
||||
subnet_mask?: string
|
||||
gateway_ip?: string
|
||||
dns_ip_1?: string
|
||||
dns_ip_2?: string
|
||||
}
|
||||
|
||||
export type WifiSettings = {
|
||||
hostname: string
|
||||
priority_RSSI: boolean
|
||||
wifi_networks: KnownNetworkItem[]
|
||||
}
|
||||
|
||||
export type vector = { x: number; y: number }
|
||||
|
||||
export type GithubRelease = {
|
||||
|
||||
Reference in New Issue
Block a user