Files
SpotMicroESP32-Leika/app/src/lib/stores/analytics.ts
T
2026-01-03 22:15:00 +01:00

37 lines
958 B
TypeScript

import { AnalyticsData } from '$lib/platform_shared/message'
import { writable } from 'svelte/store'
import { socket } from './socket'
const maxAnalyticsData = 100
function createAnalytics() {
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,
listen: () => {
listenerCount++
if (!unsubscribe) {
unsubscribe = socket.on(AnalyticsData, addData)
}
},
stop: () => {
listenerCount = Math.max(0, listenerCount - 1)
if (listenerCount === 0 && unsubscribe) {
unsubscribe()
unsubscribe = null
}
}
}
}
export const analytics = createAnalytics()