SHA256
Merge branch 'main' of https://github.com/ai5590/SHiNE-server
# Conflicts: # shine-UI/js/app.js
This commit is contained in:
+111
-1
@@ -3,7 +3,13 @@ import { renderToolbar } from './components/toolbar.js';
|
||||
import { captureClientError, setClientErrorTransport } from './services/client-error-reporter.js';
|
||||
import { initPwaInstallPromptHandling } from './services/pwa-install-service.js';
|
||||
import { initPwaPush } from './services/pwa-push-service.js';
|
||||
import { handleIncomingCallInvite, handleIncomingCallSignal } from './services/call-service.js';
|
||||
import {
|
||||
handleIncomingCallInvite,
|
||||
handleIncomingCallSignal,
|
||||
setCallDebugReporter,
|
||||
startDebugConnectionAsInitiator,
|
||||
startDebugConnectionAsResponder,
|
||||
} from './services/call-service.js';
|
||||
import {
|
||||
authService,
|
||||
addAppLogEntry,
|
||||
@@ -104,12 +110,14 @@ let currentCleanup = null;
|
||||
let pingIntervalId = null;
|
||||
let versionCheckIntervalId = null;
|
||||
let versionCheckInFlight = false;
|
||||
let reconnectIntervalId = null;
|
||||
let sessionRuntimeStarted = false;
|
||||
let connectionStatusEl = null;
|
||||
let connectionState = '';
|
||||
|
||||
setClientErrorTransport((payload) => authService.reportClientError(payload));
|
||||
initPwaInstallPromptHandling();
|
||||
setCallDebugReporter((payload) => authService.reportClientDebug(payload));
|
||||
|
||||
function ensureConnectionStatusEl() {
|
||||
if (connectionStatusEl) return connectionStatusEl;
|
||||
@@ -219,6 +227,16 @@ function startConnectionMonitor() {
|
||||
}, CONNECTION_CHECK_INTERVAL_MS);
|
||||
}
|
||||
|
||||
function isReconnectAllowedNow() {
|
||||
const pageId = getRoute().pageId || '';
|
||||
return !PRE_AUTH_PAGES.includes(pageId);
|
||||
}
|
||||
|
||||
function wsIsOpen() {
|
||||
const ws = authService?.ws?.ws;
|
||||
return !!(ws && ws.readyState === WebSocket.OPEN);
|
||||
}
|
||||
|
||||
function showGlobalErrorAlert(title, details = {}) {
|
||||
const lines = [title];
|
||||
if (details.message) lines.push(`Сообщение: ${details.message}`);
|
||||
@@ -411,6 +429,32 @@ async function ensureSessionRuntimeStarted() {
|
||||
});
|
||||
|
||||
startConnectionMonitor();
|
||||
|
||||
if (reconnectIntervalId) {
|
||||
window.clearInterval(reconnectIntervalId);
|
||||
reconnectIntervalId = null;
|
||||
}
|
||||
reconnectIntervalId = window.setInterval(async () => {
|
||||
if (!state.session.isAuthorized) return;
|
||||
if (!isReconnectAllowedNow()) return;
|
||||
if (wsIsOpen()) return;
|
||||
|
||||
try {
|
||||
await authService.ws.open();
|
||||
addAppLogEntry({
|
||||
level: 'info',
|
||||
source: 'ws-reconnect',
|
||||
message: 'WS переподключен автоматически',
|
||||
});
|
||||
} catch (error) {
|
||||
addAppLogEntry({
|
||||
level: 'warn',
|
||||
source: 'ws-reconnect',
|
||||
message: 'Попытка автопереподключения не удалась',
|
||||
details: { error: error?.message || 'unknown' },
|
||||
});
|
||||
}
|
||||
}, 15_000);
|
||||
}
|
||||
|
||||
async function init() {
|
||||
@@ -423,6 +467,10 @@ async function init() {
|
||||
setSessionResetHandler(() => {
|
||||
sessionRuntimeStarted = false;
|
||||
startConnectionMonitor();
|
||||
if (reconnectIntervalId) {
|
||||
window.clearInterval(reconnectIntervalId);
|
||||
reconnectIntervalId = null;
|
||||
}
|
||||
navigate('start-view');
|
||||
});
|
||||
|
||||
@@ -564,6 +612,68 @@ async function init() {
|
||||
try { await handleIncomingCallSignal(evt); } catch {}
|
||||
});
|
||||
|
||||
authService.onEvent('DebugConnectPrepareResponder', async (evt) => {
|
||||
try {
|
||||
const p = evt?.payload || {};
|
||||
await startDebugConnectionAsResponder({
|
||||
runId: p.runId,
|
||||
callId: p.callId,
|
||||
peerLogin: p.peerLogin,
|
||||
peerSessionId: p.peerSessionId,
|
||||
});
|
||||
addAppLogEntry({
|
||||
level: 'info',
|
||||
source: 'debug-connect',
|
||||
message: 'Получена команда debug responder',
|
||||
details: p,
|
||||
});
|
||||
} catch (error) {
|
||||
addAppLogEntry({
|
||||
level: 'error',
|
||||
source: 'debug-connect',
|
||||
message: 'Ошибка запуска debug responder',
|
||||
details: { error: error?.message || 'unknown' },
|
||||
});
|
||||
await authService.reportClientDebug({
|
||||
runId: evt?.payload?.runId || '',
|
||||
level: 'error',
|
||||
message: 'debug_responder_failed',
|
||||
details: error?.message || 'unknown',
|
||||
});
|
||||
}
|
||||
});
|
||||
|
||||
authService.onEvent('DebugConnectStartInitiator', async (evt) => {
|
||||
try {
|
||||
const p = evt?.payload || {};
|
||||
await startDebugConnectionAsInitiator({
|
||||
runId: p.runId,
|
||||
callId: p.callId,
|
||||
peerLogin: p.peerLogin,
|
||||
peerSessionId: p.peerSessionId,
|
||||
});
|
||||
addAppLogEntry({
|
||||
level: 'info',
|
||||
source: 'debug-connect',
|
||||
message: 'Получена команда debug initiator',
|
||||
details: p,
|
||||
});
|
||||
} catch (error) {
|
||||
addAppLogEntry({
|
||||
level: 'error',
|
||||
source: 'debug-connect',
|
||||
message: 'Ошибка запуска debug initiator',
|
||||
details: { error: error?.message || 'unknown' },
|
||||
});
|
||||
await authService.reportClientDebug({
|
||||
runId: evt?.payload?.runId || '',
|
||||
level: 'error',
|
||||
message: 'debug_initiator_failed',
|
||||
details: error?.message || 'unknown',
|
||||
});
|
||||
}
|
||||
});
|
||||
|
||||
await tryAutoLogin();
|
||||
await hydrateMessagesFromStore();
|
||||
startVersionMonitor();
|
||||
|
||||
Reference in New Issue
Block a user