fix(ui): показывать остановку потока live-трафика
This commit is contained in:
1 parent
e05b3a38c8
commit
9eb6a3fad1
4 files changed
+53
-2
No files matched your search
@@ -55,6 +55,7 @@ export function useTrafficLive(opts: {
|
||||
signal: ac.signal,
|
||||
credentials: "include",
|
||||
})
|
||||
if (ac.signal.aborted) return
|
||||
if (!res.ok || !res.body) {
|
||||
setError(`live HTTP ${res.status}`)
|
||||
return
|
||||
@@ -63,7 +64,11 @@ export function useTrafficLive(opts: {
|
||||
const decoder = new TextDecoder()
|
||||
while (!ac.signal.aborted) {
|
||||
const { done, value } = await reader.read()
|
||||
if (done) break
|
||||
if (ac.signal.aborted) return
|
||||
if (done) {
|
||||
setError("Поток live завершён")
|
||||
break
|
||||
}
|
||||
buf += decoder.decode(value, { stream: true })
|
||||
const parts = buf.split("\n\n")
|
||||
buf = parts.pop() ?? ""
|
||||
@@ -72,6 +77,9 @@ export function useTrafficLive(opts: {
|
||||
const ev = parseSseBlock(raw)
|
||||
if (ev.event === "sample" && ev.data) {
|
||||
const parsed = JSON.parse(ev.data) as TrafficLiveSample
|
||||
if (!parsed || !Number.isFinite(parsed.rxMbps) || !Number.isFinite(parsed.txMbps) || parsed.rxMbps < 0 || parsed.txMbps < 0 || typeof parsed.at !== "string" || !Number.isFinite(Date.parse(parsed.at))) {
|
||||
throw new Error("Некорректные данные live-потока")
|
||||
}
|
||||
setSample(parsed)
|
||||
setError(null)
|
||||
} else if (ev.event === "error" && ev.data) {
|
||||
|
||||
Reference in new issue
Block a user