네트워크 알림 오류 수정 및 리팩토링

This commit is contained in:
hansoo
2025-03-21 17:00:01 +09:00
parent 96bda2de39
commit 3d246176ad
8 changed files with 599 additions and 14 deletions

View File

@@ -62,19 +62,37 @@ export const checkNetworkStatus = async (): Promise<boolean> => {
'https://www.apple.com'
];
// 첫 번째 성공 응답 시 온라인으로 판단
const isOnline = await Promise.any(
endpoints.map(url =>
try {
// 각 엔드포인트에 대해 fetch 요청 시도
const fetchPromises = endpoints.map(url =>
fetch(url, { method: 'HEAD', signal: controller.signal })
.then(res => res.ok)
)
);
clearTimeout(timeoutId);
setNetworkStatus(isOnline ? 'online' : 'offline');
return isOnline;
.then(res => {
if (res.ok) return true;
throw new Error(`Failed to fetch ${url}`);
})
.catch(err => {
console.log(`[네트워크] ${url} 연결 실패:`, err.message);
return false; // 실패 시 false 반환
})
);
// 모든 요청을 병렬로 실행하고 결과 확인
const results = await Promise.all(fetchPromises);
// 하나라도 성공했으면 온라인으로 판단
const isOnline = results.some(result => result === true);
clearTimeout(timeoutId);
setNetworkStatus(isOnline ? 'online' : 'offline');
return isOnline;
} catch (error) {
clearTimeout(timeoutId);
console.error('[네트워크] 네트워크 확인 실패:', error);
setNetworkStatus('offline');
return false;
}
} catch (error) {
console.error('[네트워크] 연결 확인 실패:', error);
console.error('[네트워크] 연결 확인 중 예상치 못한 오류:', error);
setNetworkStatus('offline');
return false;
}
@@ -100,7 +118,7 @@ export const getNetworkStatus = (): NetworkStatus => {
};
/**
* 네트워크 상태 모니터링 시작
* 네트워크 상태 모니터링 시작 함수 개선
*/
export const startNetworkMonitoring = (): void => {
if (isMonitoring) {
@@ -109,10 +127,11 @@ export const startNetworkMonitoring = (): void => {
isMonitoring = true;
// 초기 네트워크 상태를 온라인으로 설정 (실제 확인 전)
setNetworkStatus('online');
// 초기 네트워크 상태 확인
checkNetworkStatus().then(isOnline => {
setNetworkStatus(isOnline ? 'online' : 'offline');
if (!isOnline) {
// 오프라인 상태면 재연결 시도 시작
reconnectTimer = setTimeout(attemptReconnect, RECONNECT_INTERVAL);