nitro-react/src/views/navigator/NavigatorMessageHandler.tsx

200 lines
6.9 KiB
TypeScript
Raw Normal View History

import { GenericErrorEvent, NavigatorCategoriesComposer, NavigatorCategoriesEvent, NavigatorHomeRoomEvent, NavigatorMetadataEvent, NavigatorSearchEvent, NavigatorSettingsComposer, RoomCreatedEvent, RoomDataParser, RoomDoorbellAcceptedEvent, RoomDoorbellEvent, RoomForwardEvent, RoomInfoComposer, RoomInfoEvent, RoomInfoOwnerEvent, RoomSettingsUpdatedEvent, UserInfoEvent } from '@nitrots/nitro-renderer';
2021-06-23 10:05:23 +02:00
import { FC, useCallback } from 'react';
2021-04-21 05:36:39 +02:00
import { GetRoomSessionManager, GetSessionDataManager } from '../../api';
2021-06-30 04:15:32 +02:00
import { VisitRoom } from '../../api/navigator/VisitRoom';
2021-04-21 05:36:39 +02:00
import { CreateMessageHook, SendMessageHook } from '../../hooks/messages/message-event';
2021-05-05 00:38:31 +02:00
import { useNavigatorContext } from './context/NavigatorContext';
2021-04-21 05:36:39 +02:00
import { NavigatorMessageHandlerProps } from './NavigatorMessageHandler.types';
2021-05-05 00:38:31 +02:00
import { NavigatorActions } from './reducers/NavigatorReducer';
2021-04-21 05:36:39 +02:00
2021-06-23 10:05:23 +02:00
export const NavigatorMessageHandler: FC<NavigatorMessageHandlerProps> = props =>
2021-04-21 05:36:39 +02:00
{
2021-07-02 06:37:31 +02:00
const { navigatorState = null, dispatchNavigatorState = null } = useNavigatorContext();
2021-04-21 05:36:39 +02:00
const onUserInfoEvent = useCallback((event: UserInfoEvent) =>
{
SendMessageHook(new NavigatorCategoriesComposer());
SendMessageHook(new NavigatorSettingsComposer());
}, []);
const onRoomForwardEvent = useCallback((event: RoomForwardEvent) =>
{
const parser = event.getParser();
SendMessageHook(new RoomInfoComposer(parser.roomId, false, true));
}, []);
const onRoomInfoOwnerEvent = useCallback((event: RoomInfoOwnerEvent) =>
{
const parser = event.getParser();
2021-07-02 06:37:31 +02:00
const roomInfoData = navigatorState.roomInfoData;
roomInfoData.currentRoomOwner = parser.isOwner;
roomInfoData.currentRoomId = parser.roomId;
dispatchNavigatorState({
type: NavigatorActions.SET_ROOM_INFO_DATA,
payload: {
roomInfoData: roomInfoData
}
});
2021-04-21 05:36:39 +02:00
SendMessageHook(new RoomInfoComposer(parser.roomId, true, false));
2021-07-02 06:37:31 +02:00
}, [ navigatorState, dispatchNavigatorState ]);
2021-04-21 05:36:39 +02:00
const onRoomInfoEvent = useCallback((event: RoomInfoEvent) =>
{
const parser = event.getParser();
if(parser.roomEnter)
{
2021-07-02 06:37:31 +02:00
const roomInfoData = navigatorState.roomInfoData;
roomInfoData.enteredGuestRoom = parser.data;
2021-04-21 05:36:39 +02:00
2021-07-02 06:37:31 +02:00
dispatchNavigatorState({
type: NavigatorActions.SET_ROOM_INFO_DATA,
payload: {
roomInfoData: roomInfoData
}
});
2021-04-21 05:36:39 +02:00
}
else if(parser.roomForward)
{
if((parser.data.ownerName !== GetSessionDataManager().userName) && !parser.isGroupMember)
{
switch(parser.data.doorMode)
{
case RoomDataParser.DOORBELL_STATE:
case RoomDataParser.PASSWORD_STATE:
2021-05-05 00:38:31 +02:00
//showLock();
2021-04-21 05:36:39 +02:00
return;
}
}
GetRoomSessionManager().createSession(parser.data.roomId);
}
else
{
2021-07-02 06:37:31 +02:00
const roomInfoData = navigatorState.roomInfoData;
roomInfoData.enteredGuestRoom = parser.data;
dispatchNavigatorState({
type: NavigatorActions.SET_ROOM_INFO_DATA,
payload: {
roomInfoData: roomInfoData
}
});
2021-04-21 05:36:39 +02:00
}
2021-07-02 06:37:31 +02:00
}, [ dispatchNavigatorState, navigatorState ]);
2021-04-21 05:36:39 +02:00
const onRoomDoorbellEvent = useCallback((event: RoomDoorbellEvent) =>
{
const parser = event.getParser();
2021-05-05 00:38:31 +02:00
// if(!parser.userName || (parser.userName.length === 0))
// {
// showLock(NavigatorLockViewStage.WAITING);
// }
}, []);
const onRoomDoorbellAcceptedEvent = useCallback((event: RoomDoorbellAcceptedEvent) =>
{
const parser = event.getParser();
2021-05-05 00:38:31 +02:00
// if(!parser.userName || (parser.userName.length === 0))
// {
// hideLock();
// }
}, []);
const onGenericErrorEvent = useCallback((event: GenericErrorEvent) =>
{
const parser = event.getParser();
2021-05-05 00:38:31 +02:00
// switch(parser.errorCode)
// {
// case -100002:
// showLock(NavigatorLockViewStage.FAILED);
// break;
// }
}, []);
2021-04-21 05:36:39 +02:00
const onNavigatorMetadataEvent = useCallback((event: NavigatorMetadataEvent) =>
{
const parser = event.getParser();
2021-05-05 00:38:31 +02:00
dispatchNavigatorState({
type: NavigatorActions.SET_TOP_LEVEL_CONTEXTS,
payload: {
topLevelContexts: parser.topLevelContexts
}
});
}, [ dispatchNavigatorState ]);
2021-04-21 05:36:39 +02:00
const onNavigatorSearchEvent = useCallback((event: NavigatorSearchEvent) =>
{
const parser = event.getParser();
2021-05-05 00:38:31 +02:00
dispatchNavigatorState({
type: NavigatorActions.SET_SEARCH_RESULT,
payload: {
searchResult: parser.result
}
});
}, [ dispatchNavigatorState ]);
2021-04-21 05:36:39 +02:00
2021-06-30 04:15:32 +02:00
const onNavigatorCategoriesEvent = useCallback((event: NavigatorCategoriesEvent) =>
{
const parser = event.getParser();
dispatchNavigatorState({
type: NavigatorActions.SET_CATEGORIES,
payload: {
categories: parser.categories
}
});
}, [ dispatchNavigatorState ]);
const onRoomCreatedEvent = useCallback((event: RoomCreatedEvent) =>
{
const parser = event.getParser();
VisitRoom(parser.roomId);
}, []);
2021-07-02 06:37:31 +02:00
const onNavigatorHomeRoomEvent = useCallback((event: NavigatorHomeRoomEvent) =>
{
const parser = event.getParser();
dispatchNavigatorState({
type: NavigatorActions.SET_HOME_ROOM_ID,
payload: {
homeRoomId: parser.homeRoomId
}
});
}, [ dispatchNavigatorState ]);
2021-07-05 05:44:15 +02:00
const onRoomSettingsUpdatedEvent = useCallback((event: RoomSettingsUpdatedEvent) =>
{
const parser = event.getParser();
SendMessageHook(new RoomInfoComposer(parser.roomId, false, false));
}, []);
2021-04-22 04:06:02 +02:00
CreateMessageHook(UserInfoEvent, onUserInfoEvent);
CreateMessageHook(RoomForwardEvent, onRoomForwardEvent);
CreateMessageHook(RoomInfoOwnerEvent, onRoomInfoOwnerEvent);
CreateMessageHook(RoomInfoEvent, onRoomInfoEvent);
CreateMessageHook(RoomDoorbellEvent, onRoomDoorbellEvent);
CreateMessageHook(RoomDoorbellAcceptedEvent, onRoomDoorbellAcceptedEvent);
CreateMessageHook(GenericErrorEvent, onGenericErrorEvent);
CreateMessageHook(NavigatorMetadataEvent, onNavigatorMetadataEvent);
CreateMessageHook(NavigatorSearchEvent, onNavigatorSearchEvent);
2021-06-30 04:15:32 +02:00
CreateMessageHook(NavigatorCategoriesEvent, onNavigatorCategoriesEvent);
CreateMessageHook(RoomCreatedEvent, onRoomCreatedEvent);
2021-07-02 06:37:31 +02:00
CreateMessageHook(NavigatorHomeRoomEvent, onNavigatorHomeRoomEvent);
2021-07-05 05:44:15 +02:00
CreateMessageHook(RoomSettingsUpdatedEvent, onRoomSettingsUpdatedEvent);
2021-04-21 05:36:39 +02:00
return null;
}