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

35 lines
880 B
TypeScript

import { writable } from 'svelte/store'
import { IMUData } from '$lib/platform_shared/message'
import { socket } from './socket'
const maxIMUData = 100
export const imu = (() => {
const { subscribe, update } = writable<IMUData[]>([])
let unsubscribe: (() => void) | null = null
let listenerCount = 0
const addData = (content: IMUData) => {
update(data => [...data, content].slice(-maxIMUData))
}
return {
subscribe,
addData,
listen: () => {
listenerCount++
if (!unsubscribe) {
unsubscribe = socket.on(IMUData, addData)
}
},
stop: () => {
listenerCount = Math.max(0, listenerCount - 1)
if (listenerCount === 0 && unsubscribe) {
unsubscribe()
unsubscribe = null
}
}
}
})()