diff options
| author | yaling888 <[email protected]> | 2022-05-06 03:55:39 +0800 |
|---|---|---|
| committer | yaling888 <[email protected]> | 2022-05-06 03:55:39 +0800 |
| commit | dafd4486f17fcd72ac86578854886a807b0c4748 (patch) | |
| tree | d15d3345690f84000afda53c5c2f2ebe84cfdb8b /src/api | |
| parent | 96c16b0ae5562cbe16b311da0ed9f839da172c4e (diff) | |
| parent | 4dea888769ef153806bc5275616fd3c9d3e0a32b (diff) | |
Merge 'tracking' into master
Diffstat (limited to 'src/api')
| -rw-r--r-- | src/api/logs.ts | 21 |
1 files changed, 12 insertions, 9 deletions
diff --git a/src/api/logs.ts b/src/api/logs.ts index cb74bf3..044a31b 100644 --- a/src/api/logs.ts +++ b/src/api/logs.ts @@ -5,6 +5,12 @@ import { LogsAPIConfig } from 'src/types'; import { buildLogsWebSocketURL, getURLAndInit } from '../misc/request-helper'; type AppendLogFn = (x: Log) => void; +enum WebSocketReadyState { + Connecting = 0, + Open = 1, + Closing = 2, + Closed = 3, +} const endpoint = '/logs'; const textDecoder = new TextDecoder('utf-8'); @@ -86,20 +92,13 @@ function makeConnStr(c: LogsAPIConfig) { let prevConnStr: string; let controller: AbortController; -// 1 OPEN -// other value CLOSED -// similar to ws readyState but not the same -// https://developer.mozilla.org/en-US/docs/Web/API/WebSocket/readyState -let wsState: number; export function fetchLogs(apiConfig: LogsAPIConfig, appendLog: AppendLogFn) { if (apiConfig.logLevel === 'uninit') return; - if (fetched || wsState === 1) return; + if (fetched || (ws && ws.readyState === WebSocketReadyState.Open)) return; prevAppendLogFn = appendLog; - wsState = 1; const url = buildLogsWebSocketURL(apiConfig, endpoint); ws = new WebSocket(url); ws.addEventListener('error', () => { - wsState = 3; fetchLogsWithFetch(apiConfig, appendLog); }); ws.addEventListener('message', function (event) { @@ -107,10 +106,14 @@ export function fetchLogs(apiConfig: LogsAPIConfig, appendLog: AppendLogFn) { }); } +export function stop() { + ws.close(); + if (controller) controller.abort(); +} + export function reconnect(apiConfig: LogsAPIConfig) { if (!prevAppendLogFn || !ws) return; ws.close(); - wsState = 3; fetched = false; fetchLogs(apiConfig, prevAppendLogFn); } |
