네트워크 끊김 알람 오류 수정
This commit is contained in:
@@ -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'; // 오류 시 기본값
|
|
||||||
}
|
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
Reference in New Issue
Block a user