mirror of
				https://github.com/MindWorkAI/AI-Studio.git
				synced 2025-11-04 04:20:20 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			66 lines
		
	
	
		
			2.0 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			66 lines
		
	
	
		
			2.0 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
(() => {
 | 
						|
    const maximumRetryCount = 3;
 | 
						|
    const retryIntervalMilliseconds = 500;
 | 
						|
    const reconnectModal = document.getElementById('reconnect-modal');
 | 
						|
 | 
						|
    const startReconnectionProcess = () => {
 | 
						|
        reconnectModal.style.display = 'block';
 | 
						|
 | 
						|
        let isCanceled = false;
 | 
						|
 | 
						|
        (async () => {
 | 
						|
            for (let i = 0; i < maximumRetryCount; i++) {
 | 
						|
                reconnectModal.innerText = `Attempting to reconnect: ${i + 1} of ${maximumRetryCount}`;
 | 
						|
 | 
						|
                await new Promise(resolve => setTimeout(resolve, retryIntervalMilliseconds));
 | 
						|
 | 
						|
                if (isCanceled) {
 | 
						|
                    return;
 | 
						|
                }
 | 
						|
 | 
						|
                try {
 | 
						|
                    const result = await Blazor.reconnect();
 | 
						|
                    if (!result) {
 | 
						|
                        // The server was reached, but the connection was rejected; reload the page.
 | 
						|
                        location.reload();
 | 
						|
                        return;
 | 
						|
                    }
 | 
						|
 | 
						|
                    // Successfully reconnected to the server.
 | 
						|
                    return;
 | 
						|
                } catch {
 | 
						|
                    // Didn't reach the server; try again.
 | 
						|
                }
 | 
						|
            }
 | 
						|
 | 
						|
            // Retried too many times; reload the page.
 | 
						|
            location.reload();
 | 
						|
        })();
 | 
						|
 | 
						|
        return {
 | 
						|
            cancel: () => {
 | 
						|
                isCanceled = true;
 | 
						|
                reconnectModal.style.display = 'none';
 | 
						|
            },
 | 
						|
        };
 | 
						|
    };
 | 
						|
 | 
						|
    let currentReconnectionProcess = null;
 | 
						|
 | 
						|
    Blazor.start({
 | 
						|
        circuit: {
 | 
						|
            reconnectionHandler: {
 | 
						|
                onConnectionDown: () => currentReconnectionProcess ??= startReconnectionProcess(),
 | 
						|
                onConnectionUp: () => {
 | 
						|
                    currentReconnectionProcess?.cancel();
 | 
						|
                    currentReconnectionProcess = null;
 | 
						|
                }
 | 
						|
            },
 | 
						|
 | 
						|
            configureSignalR: function (builder) {
 | 
						|
                builder.withServerTimeout(1_200_000);
 | 
						|
                builder.withKeepAliveInterval(30_000);
 | 
						|
            },
 | 
						|
        }
 | 
						|
    });
 | 
						|
})(); |