네트워크 끊김 알람 오류 수정

This commit is contained in:
hansoo
2025-03-21 16:32:36 +09:00
parent 2d08a7962b
commit 96bda2de39

View File

@@ -43,23 +43,34 @@ interface ExtendedWindow extends Window {
__networkHandlers?: NetworkEventHandlers; __networkHandlers?: NetworkEventHandlers;
} }
// 메모리에 네트워크 상태 저장
let networkStatus: NetworkStatus | null = null;
/** /**
* 현재 네트워크 상태 확인 * 현재 네트워크 상태 확인 (개선 버전)
*/ */
export const checkNetworkStatus = async (): Promise<boolean> => { export const checkNetworkStatus = async (): Promise<boolean> => {
try { try {
// 간단한 네트워크 연결 테스트 // 더 빠른 타임아웃 설정 (2초)
const controller = new AbortController(); const controller = new AbortController();
const timeoutId = setTimeout(() => controller.abort(), 5000); // 5초 타임아웃 const timeoutId = setTimeout(() => controller.abort(), 2000);
const response = await fetch('https://www.google.com', { // 여러 엔드포인트로 확인하여 신뢰성 향상
method: 'HEAD', const endpoints = [
signal: controller.signal 'https://www.google.com',
}); 'https://www.cloudflare.com',
'https://www.apple.com'
];
// 첫 번째 성공 응답 시 온라인으로 판단
const isOnline = await Promise.any(
endpoints.map(url =>
fetch(url, { method: 'HEAD', signal: controller.signal })
.then(res => res.ok)
)
);
clearTimeout(timeoutId); clearTimeout(timeoutId);
const isOnline = response.ok;
setNetworkStatus(isOnline ? 'online' : 'offline'); setNetworkStatus(isOnline ? 'online' : 'offline');
return isOnline; return isOnline;
} catch (error) { } catch (error) {
@@ -70,30 +81,22 @@ export const checkNetworkStatus = async (): Promise<boolean> => {
}; };
/** /**
* 네트워크 상태 저장 * 네트워크 상태 저장 (메모리 기반)
*/ */
export const setNetworkStatus = (status: NetworkStatus): void => { export const setNetworkStatus = (status: NetworkStatus): void => {
try { // 메모리에 상태 저장
localStorage.setItem(NETWORK_STATUS_KEY, status); networkStatus = status;
// 상태 변경 이벤트 발생
window.dispatchEvent(new CustomEvent('networkStatusChange', { detail: status })); // 상태 변경 이벤트 발생
console.log(`[네트워크] 상태 변경: ${status}`); window.dispatchEvent(new CustomEvent('networkStatusChange', { detail: status }));
} catch (error) { console.log(`[네트워크] 상태 변경: ${status}`);
console.error('[네트워크] 상태 저장 실패:', error);
}
}; };
/** /**
* 저장된 네트워크 상태 가져오기 * 네트워크 상태 가져오기 (메모리 기반)
*/ */
export const getNetworkStatus = (): NetworkStatus => { export const getNetworkStatus = (): NetworkStatus => {
try { return networkStatus || 'online';
const status = localStorage.getItem(NETWORK_STATUS_KEY) as NetworkStatus;
return status || 'online'; // 기본값은 온라인으로 설정
} catch (error) {
console.error('[네트워크] 상태 조회 실패:', error);
return 'online'; // 오류 시 기본값
}
}; };
/** /**