mirror of
https://github.com/duckietm/Nitro-V3.git
synced 2026-06-20 07:26:19 +00:00
🆙 Stage 1 reconnect
This commit is contained in:
@@ -1,4 +1,4 @@
|
|||||||
import { GetRoomSessionManager } from '@nitrots/nitro-renderer';
|
import { GetRoomSessionManager, NitroLogger } from '@nitrots/nitro-renderer';
|
||||||
import { GetRoomSession } from './GetRoomSession';
|
import { GetRoomSession } from './GetRoomSession';
|
||||||
import { GoToDesktop } from './GoToDesktop';
|
import { GoToDesktop } from './GoToDesktop';
|
||||||
|
|
||||||
@@ -6,6 +6,8 @@ export const VisitDesktop = () =>
|
|||||||
{
|
{
|
||||||
if(!GetRoomSession()) return;
|
if(!GetRoomSession()) return;
|
||||||
|
|
||||||
|
NitroLogger.log('[VisitDesktop] Called (isReconnecting=' + GetRoomSessionManager().isReconnecting + ')');
|
||||||
|
|
||||||
GoToDesktop();
|
GoToDesktop();
|
||||||
GetRoomSessionManager().removeSession(-1);
|
GetRoomSessionManager().removeSession(-1);
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -20,6 +20,16 @@ export const ReconnectView: FC<{}> = props =>
|
|||||||
|
|
||||||
const onReconnected = useCallback(() =>
|
const onReconnected = useCallback(() =>
|
||||||
{
|
{
|
||||||
|
// Socket is open but not yet re-authenticated.
|
||||||
|
// Update attempt display but keep the overlay visible until
|
||||||
|
// re-authentication completes (SOCKET_REAUTHENTICATED).
|
||||||
|
setHasFailed(false);
|
||||||
|
}, []);
|
||||||
|
|
||||||
|
const onReauthenticated = useCallback(() =>
|
||||||
|
{
|
||||||
|
// Fully re-authenticated — dismiss the overlay so the room view
|
||||||
|
// (which stayed alive behind the overlay) is visible again.
|
||||||
setIsReconnecting(false);
|
setIsReconnecting(false);
|
||||||
setHasFailed(false);
|
setHasFailed(false);
|
||||||
setAttempt(0);
|
setAttempt(0);
|
||||||
@@ -33,6 +43,7 @@ export const ReconnectView: FC<{}> = props =>
|
|||||||
|
|
||||||
useNitroEvent<ReconnectEvent>(NitroEventType.SOCKET_RECONNECTING, onReconnecting);
|
useNitroEvent<ReconnectEvent>(NitroEventType.SOCKET_RECONNECTING, onReconnecting);
|
||||||
useNitroEvent(NitroEventType.SOCKET_RECONNECTED, onReconnected);
|
useNitroEvent(NitroEventType.SOCKET_RECONNECTED, onReconnected);
|
||||||
|
useNitroEvent(NitroEventType.SOCKET_REAUTHENTICATED, onReauthenticated);
|
||||||
useNitroEvent(NitroEventType.SOCKET_RECONNECT_FAILED, onReconnectFailed);
|
useNitroEvent(NitroEventType.SOCKET_RECONNECT_FAILED, onReconnectFailed);
|
||||||
|
|
||||||
const handleReload = useCallback(() =>
|
const handleReload = useCallback(() =>
|
||||||
@@ -42,8 +53,8 @@ export const ReconnectView: FC<{}> = props =>
|
|||||||
|
|
||||||
const handleGoHome = useCallback(() =>
|
const handleGoHome = useCallback(() =>
|
||||||
{
|
{
|
||||||
sessionStorage.removeItem('nitro_last_room');
|
sessionStorage.removeItem('nitro.session.lastRoomId');
|
||||||
sessionStorage.removeItem('nitro_last_room_password');
|
sessionStorage.removeItem('nitro.session.lastRoomPassword');
|
||||||
window.location.reload();
|
window.location.reload();
|
||||||
}, []);
|
}, []);
|
||||||
|
|
||||||
|
|||||||
@@ -1,8 +1,8 @@
|
|||||||
import { CanCreateRoomEventEvent, CantConnectMessageParser, CreateLinkEvent, DoorbellMessageEvent, FavouriteChangedEvent, FavouritesEvent, FlatAccessDeniedMessageEvent, FlatCreatedEvent, FollowFriendMessageComposer, GenericErrorEvent, GetGuestRoomMessageComposer, GetGuestRoomResultEvent, GetRoomSessionManager, GetSessionDataManager, GetUserEventCatsMessageComposer, GetUserFlatCatsMessageComposer, HabboWebTools, LegacyExternalInterface, NavigatorCategoryDataParser, NavigatorEventCategoryDataParser, NavigatorHomeRoomEvent, NavigatorMetadataEvent, NavigatorOpenRoomCreatorEvent, NavigatorSavedSearch, NavigatorSearchesEvent, NavigatorSearchEvent, NavigatorSearchResultSet, NavigatorTopLevelContext, RoomDataParser, RoomDoorbellAcceptedEvent, RoomEnterErrorEvent, RoomEntryInfoMessageEvent, RoomForwardEvent, RoomScoreEvent, RoomSettingsUpdatedEvent, SecurityLevel, UserEventCatsEvent, UserFlatCatsEvent, UserInfoEvent, UserPermissionsEvent } from '@nitrots/nitro-renderer';
|
import { CanCreateRoomEventEvent, CantConnectMessageParser, CreateLinkEvent, DoorbellMessageEvent, FavouriteChangedEvent, FavouritesEvent, FlatAccessDeniedMessageEvent, FlatCreatedEvent, FollowFriendMessageComposer, GenericErrorEvent, GetGuestRoomMessageComposer, GetGuestRoomResultEvent, GetRoomSessionManager, GetSessionDataManager, GetUserEventCatsMessageComposer, GetUserFlatCatsMessageComposer, HabboWebTools, LegacyExternalInterface, NavigatorCategoryDataParser, NavigatorEventCategoryDataParser, NavigatorHomeRoomEvent, NavigatorMetadataEvent, NavigatorOpenRoomCreatorEvent, NavigatorSavedSearch, NavigatorSearchesEvent, NavigatorSearchEvent, NavigatorSearchResultSet, NavigatorTopLevelContext, NitroEventType, RoomDataParser, RoomDoorbellAcceptedEvent, RoomEnterErrorEvent, RoomEntryInfoMessageEvent, RoomForwardEvent, RoomScoreEvent, RoomSettingsUpdatedEvent, SecurityLevel, UserEventCatsEvent, UserFlatCatsEvent, UserInfoEvent, UserPermissionsEvent } from '@nitrots/nitro-renderer';
|
||||||
import { useState } from 'react';
|
import { useState } from 'react';
|
||||||
import { useBetween } from 'use-between';
|
import { useBetween } from 'use-between';
|
||||||
import { CreateRoomSession, DoorStateType, GetConfigurationValue, INavigatorData, LocalizeText, NotificationAlertType, SendMessageComposer, TryVisitRoom, VisitDesktop } from '../../api';
|
import { CreateRoomSession, DoorStateType, GetConfigurationValue, INavigatorData, LocalizeText, NotificationAlertType, SendMessageComposer, TryVisitRoom, VisitDesktop } from '../../api';
|
||||||
import { useMessageEvent } from '../events';
|
import { useMessageEvent, useNitroEvent } from '../events';
|
||||||
import { useNotification } from '../notification';
|
import { useNotification } from '../notification';
|
||||||
|
|
||||||
const useNavigatorState = () =>
|
const useNavigatorState = () =>
|
||||||
@@ -373,6 +373,15 @@ const useNavigatorState = () =>
|
|||||||
CreateRoomSession(parser.roomId);
|
CreateRoomSession(parser.roomId);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
// When reconnection starts, reset settingsReceived so the login sequence's
|
||||||
|
// NavigatorHomeRoomEvent is treated as a fresh login. Without this, the
|
||||||
|
// prevSettingsReceived check blocks home room navigation after reconnection,
|
||||||
|
// leaving the user stuck on hotel view.
|
||||||
|
useNitroEvent(NitroEventType.SOCKET_RECONNECTING, () =>
|
||||||
|
{
|
||||||
|
setNavigatorData(prevValue => ({ ...prevValue, settingsReceived: false }));
|
||||||
|
});
|
||||||
|
|
||||||
useMessageEvent<NavigatorHomeRoomEvent>(NavigatorHomeRoomEvent, event =>
|
useMessageEvent<NavigatorHomeRoomEvent>(NavigatorHomeRoomEvent, event =>
|
||||||
{
|
{
|
||||||
const parser = event.getParser();
|
const parser = event.getParser();
|
||||||
@@ -397,6 +406,8 @@ const useNavigatorState = () =>
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// If a room session was already restored (from a network disconnect reload),
|
||||||
|
// skip the normal home room navigation to avoid overriding it.
|
||||||
if(GetRoomSessionManager().viewerSession) return;
|
if(GetRoomSessionManager().viewerSession) return;
|
||||||
|
|
||||||
let forwardType = -1;
|
let forwardType = -1;
|
||||||
@@ -458,6 +469,11 @@ const useNavigatorState = () =>
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// During reconnection, don't navigate to desktop — the reconnection guard
|
||||||
|
// will handle retrying or cleaning up. Calling VisitDesktop here would
|
||||||
|
// remove the session from the map and send the user to hotel view.
|
||||||
|
if(GetRoomSessionManager().isReconnecting) return;
|
||||||
|
|
||||||
VisitDesktop();
|
VisitDesktop();
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user