2021-07-05 08:46:47 +02:00
|
|
|
import { AdvancedMap, BadgesEvent, BotAddedToInventoryEvent, BotInventoryMessageEvent, BotRemovedFromInventoryEvent, FurnitureListAddOrUpdateEvent, FurnitureListEvent, FurnitureListInvalidateEvent, FurnitureListItemParser, FurnitureListRemovedEvent, FurniturePostItPlacedEvent, PetAddedToInventoryEvent, PetData, PetInventoryEvent, PetRemovedFromInventory, TradingAcceptEvent, TradingCloseEvent, TradingCompletedEvent, TradingConfirmationEvent, TradingListItemEvent, TradingOpenEvent } from 'nitro-renderer';
|
2021-04-28 07:27:15 +02:00
|
|
|
import { FC, useCallback } from 'react';
|
2021-07-05 08:46:47 +02:00
|
|
|
import { GetRoomSession, GetSessionDataManager } from '../../api';
|
2021-04-28 07:27:15 +02:00
|
|
|
import { CreateMessageHook } from '../../hooks/messages/message-event';
|
2021-06-23 06:03:56 +02:00
|
|
|
import { mergeFurniFragments } from './common/FurnitureUtilities';
|
|
|
|
import { mergePetFragments } from './common/PetUtilities';
|
2021-07-05 08:46:47 +02:00
|
|
|
import { TradeState } from './common/TradeState';
|
|
|
|
import { TradeUserData } from './common/TradeUserData';
|
2021-04-28 19:47:33 +02:00
|
|
|
import { useInventoryContext } from './context/InventoryContext';
|
2021-04-22 05:18:44 +02:00
|
|
|
import { InventoryMessageHandlerProps } from './InventoryMessageHandler.types';
|
2021-04-29 10:05:49 +02:00
|
|
|
import { InventoryBadgeActions } from './reducers/InventoryBadgeReducer';
|
|
|
|
import { InventoryBotActions } from './reducers/InventoryBotReducer';
|
2021-04-28 19:47:33 +02:00
|
|
|
import { InventoryFurnitureActions } from './reducers/InventoryFurnitureReducer';
|
2021-04-29 10:05:49 +02:00
|
|
|
import { InventoryPetActions } from './reducers/InventoryPetReducer';
|
2021-04-28 07:27:15 +02:00
|
|
|
let furniMsgFragments: Map<number, FurnitureListItemParser>[] = null;
|
2021-04-29 10:05:49 +02:00
|
|
|
let petMsgFragments: Map<number, PetData>[] = null;
|
2021-04-28 07:27:15 +02:00
|
|
|
|
2021-04-22 05:18:44 +02:00
|
|
|
export const InventoryMessageHandler: FC<InventoryMessageHandlerProps> = props =>
|
|
|
|
{
|
2021-04-29 10:05:49 +02:00
|
|
|
const { dispatchFurnitureState = null, dispatchBotState = null, dispatchPetState = null, dispatchBadgeState = null } = useInventoryContext();
|
2021-04-28 07:27:15 +02:00
|
|
|
|
|
|
|
const onFurnitureListAddOrUpdateEvent = useCallback((event: FurnitureListAddOrUpdateEvent) =>
|
|
|
|
{
|
|
|
|
const parser = event.getParser();
|
|
|
|
|
2021-04-28 19:47:33 +02:00
|
|
|
dispatchFurnitureState({
|
|
|
|
type: InventoryFurnitureActions.ADD_OR_UPDATE_FURNITURE,
|
|
|
|
payload: {
|
|
|
|
parsers: parser.items
|
|
|
|
}
|
|
|
|
});
|
|
|
|
}, [ dispatchFurnitureState ]);
|
2021-04-28 07:27:15 +02:00
|
|
|
|
|
|
|
const onFurnitureListEvent = useCallback((event: FurnitureListEvent) =>
|
|
|
|
{
|
|
|
|
const parser = event.getParser();
|
|
|
|
|
|
|
|
if(!furniMsgFragments) furniMsgFragments = new Array(parser.totalFragments);
|
|
|
|
|
2021-04-29 10:05:49 +02:00
|
|
|
const fragment = mergeFurniFragments(parser.fragment, parser.totalFragments, parser.fragmentNumber, furniMsgFragments);
|
2021-04-28 07:27:15 +02:00
|
|
|
|
2021-04-28 19:47:33 +02:00
|
|
|
if(!fragment) return;
|
2021-04-28 07:27:15 +02:00
|
|
|
|
2021-04-28 19:47:33 +02:00
|
|
|
dispatchFurnitureState({
|
|
|
|
type: InventoryFurnitureActions.PROCESS_FRAGMENT,
|
|
|
|
payload: { fragment }
|
|
|
|
});
|
|
|
|
}, [ dispatchFurnitureState ]);
|
2021-04-28 07:27:15 +02:00
|
|
|
|
|
|
|
const onFurnitureListInvalidateEvent = useCallback((event: FurnitureListInvalidateEvent) =>
|
|
|
|
{
|
2021-04-28 19:47:33 +02:00
|
|
|
dispatchFurnitureState({
|
|
|
|
type: InventoryFurnitureActions.SET_NEEDS_UPDATE,
|
2021-04-29 10:05:49 +02:00
|
|
|
payload: {
|
2021-04-28 19:47:33 +02:00
|
|
|
flag: true
|
|
|
|
}
|
|
|
|
});
|
|
|
|
}, [ dispatchFurnitureState ]);
|
2021-04-28 07:27:15 +02:00
|
|
|
|
|
|
|
const onFurnitureListRemovedEvent = useCallback((event: FurnitureListRemovedEvent) =>
|
|
|
|
{
|
|
|
|
const parser = event.getParser();
|
|
|
|
|
2021-04-28 19:47:33 +02:00
|
|
|
dispatchFurnitureState({
|
|
|
|
type: InventoryFurnitureActions.REMOVE_FURNITURE,
|
2021-04-29 10:05:49 +02:00
|
|
|
payload: {
|
2021-04-28 19:47:33 +02:00
|
|
|
itemId: parser.itemId
|
|
|
|
}
|
|
|
|
});
|
|
|
|
}, [ dispatchFurnitureState ]);
|
2021-04-28 07:27:15 +02:00
|
|
|
|
|
|
|
const onFurniturePostItPlacedEvent = useCallback((event: FurniturePostItPlacedEvent) =>
|
|
|
|
{
|
|
|
|
|
|
|
|
}, []);
|
|
|
|
|
2021-04-29 10:05:49 +02:00
|
|
|
const onBotInventoryMessageEvent = useCallback((event: BotInventoryMessageEvent) =>
|
|
|
|
{
|
|
|
|
const parser = event.getParser();
|
|
|
|
|
|
|
|
const fragment = Array.from(parser.items.values());
|
|
|
|
|
|
|
|
dispatchBotState({
|
|
|
|
type: InventoryBotActions.PROCESS_FRAGMENT,
|
|
|
|
payload: { fragment }
|
|
|
|
});
|
|
|
|
}, [ dispatchBotState ]);
|
|
|
|
|
|
|
|
const onBotAddedToInventoryEvent = useCallback((event: BotAddedToInventoryEvent) =>
|
|
|
|
{
|
|
|
|
const parser = event.getParser();
|
|
|
|
|
|
|
|
dispatchBotState({
|
|
|
|
type: InventoryBotActions.ADD_BOT,
|
|
|
|
payload: {
|
|
|
|
botData: parser.item
|
|
|
|
}
|
|
|
|
});
|
|
|
|
}, [ dispatchBotState ]);
|
|
|
|
|
|
|
|
const onBotRemovedFromInventoryEvent = useCallback((event: BotRemovedFromInventoryEvent) =>
|
|
|
|
{
|
|
|
|
const parser = event.getParser();
|
|
|
|
|
|
|
|
dispatchBotState({
|
|
|
|
type: InventoryBotActions.REMOVE_BOT,
|
|
|
|
payload: {
|
|
|
|
botId: parser.itemId
|
|
|
|
}
|
|
|
|
});
|
|
|
|
}, [ dispatchBotState ]);
|
|
|
|
|
|
|
|
const onPetInventoryEvent = useCallback((event: PetInventoryEvent) =>
|
|
|
|
{
|
|
|
|
const parser = event.getParser();
|
|
|
|
|
|
|
|
if(!petMsgFragments) petMsgFragments = new Array(parser.totalFragments);
|
|
|
|
|
|
|
|
const fragment = mergePetFragments(parser.fragment, parser.totalFragments, parser.fragmentNumber, petMsgFragments);
|
|
|
|
|
|
|
|
if(!fragment) return;
|
|
|
|
|
|
|
|
dispatchPetState({
|
|
|
|
type: InventoryPetActions.PROCESS_FRAGMENT,
|
|
|
|
payload: { fragment }
|
|
|
|
});
|
|
|
|
}, [dispatchPetState ]);
|
|
|
|
|
|
|
|
const onPetAddedToInventoryEvent = useCallback((event: PetAddedToInventoryEvent) =>
|
|
|
|
{
|
|
|
|
const parser = event.getParser();
|
|
|
|
|
|
|
|
dispatchPetState({
|
|
|
|
type: InventoryPetActions.ADD_PET,
|
|
|
|
payload: {
|
|
|
|
petData: parser.pet
|
|
|
|
}
|
|
|
|
});
|
|
|
|
}, [ dispatchPetState ]);
|
|
|
|
|
|
|
|
const onPetRemovedFromInventory = useCallback((event: PetRemovedFromInventory) =>
|
|
|
|
{
|
|
|
|
const parser = event.getParser();
|
|
|
|
|
|
|
|
dispatchPetState({
|
|
|
|
type: InventoryPetActions.REMOVE_PET,
|
|
|
|
payload: {
|
|
|
|
petId: parser.petId
|
|
|
|
}
|
|
|
|
});
|
|
|
|
}, [ dispatchPetState ]);
|
|
|
|
|
|
|
|
const onBadgesEvent = useCallback((event: BadgesEvent) =>
|
|
|
|
{
|
|
|
|
const parser = event.getParser();
|
|
|
|
|
|
|
|
dispatchBadgeState({
|
|
|
|
type: InventoryBadgeActions.SET_BADGES,
|
|
|
|
payload: {
|
|
|
|
badgeCodes: parser.getAllBadgeCodes(),
|
|
|
|
activeBadgeCodes: parser.getActiveBadgeCodes()
|
|
|
|
}
|
|
|
|
});
|
|
|
|
}, [ dispatchBadgeState ]);
|
|
|
|
|
2021-07-05 08:46:47 +02:00
|
|
|
const onTradingAcceptEvent = useCallback((event: TradingAcceptEvent) =>
|
|
|
|
{
|
|
|
|
const parser = event.getParser();
|
|
|
|
|
|
|
|
dispatchFurnitureState({
|
|
|
|
type: InventoryFurnitureActions.SET_TRADE_ACCEPTANCE,
|
|
|
|
payload: {
|
|
|
|
userId: parser.userID,
|
|
|
|
flag: parser.userAccepts
|
|
|
|
}
|
|
|
|
});
|
|
|
|
}, [ dispatchFurnitureState ]);
|
|
|
|
|
|
|
|
const onTradingOpenEvent = useCallback((event: TradingOpenEvent) =>
|
|
|
|
{
|
|
|
|
const parser = event.getParser();
|
|
|
|
|
|
|
|
const ownUser = new TradeUserData();
|
|
|
|
const otherUser = new TradeUserData();
|
|
|
|
|
|
|
|
ownUser.userItems = new AdvancedMap();
|
|
|
|
otherUser.userItems = new AdvancedMap();
|
|
|
|
|
|
|
|
const userDataOne = GetRoomSession().userDataManager.getUserData(parser.userID);
|
|
|
|
const userDataTwo = GetRoomSession().userDataManager.getUserData(parser.otherUserID);
|
|
|
|
|
|
|
|
if(userDataOne.webID === GetSessionDataManager().userId)
|
|
|
|
{
|
|
|
|
ownUser.userId = userDataOne.webID;
|
|
|
|
ownUser.userName = userDataOne.name;
|
|
|
|
ownUser.canTrade = parser.userCanTrade;
|
|
|
|
|
|
|
|
otherUser.userId = userDataTwo.webID;
|
|
|
|
otherUser.userName = userDataTwo.name;
|
|
|
|
otherUser.canTrade = parser.otherUserCanTrade;
|
|
|
|
}
|
|
|
|
|
|
|
|
else if(userDataTwo.webID === GetSessionDataManager().userId)
|
|
|
|
{
|
|
|
|
ownUser.userId = userDataTwo.webID;
|
|
|
|
ownUser.userName = userDataTwo.name;
|
|
|
|
ownUser.canTrade = parser.otherUserCanTrade;
|
|
|
|
|
|
|
|
otherUser.userId = userDataOne.webID;
|
|
|
|
otherUser.userName = userDataOne.name;
|
|
|
|
otherUser.canTrade = parser.userCanTrade;
|
|
|
|
}
|
|
|
|
|
|
|
|
dispatchFurnitureState({
|
|
|
|
type: InventoryFurnitureActions.SET_TRADE_DATA,
|
|
|
|
payload: {
|
|
|
|
ownTradeUser: ownUser,
|
|
|
|
otherTradeUser: otherUser
|
|
|
|
}
|
|
|
|
});
|
|
|
|
}, [ dispatchFurnitureState ]);
|
|
|
|
|
|
|
|
const onTradingCloseEvent = useCallback((event: TradingCloseEvent) =>
|
|
|
|
{
|
|
|
|
const parser = event.getParser();
|
|
|
|
|
|
|
|
dispatchFurnitureState({
|
|
|
|
type: InventoryFurnitureActions.CLOSE_TRADE,
|
|
|
|
payload: {}
|
|
|
|
});
|
|
|
|
}, [ dispatchFurnitureState ]);
|
|
|
|
|
|
|
|
const onTradingCompletedEvent = useCallback((event: TradingCompletedEvent) =>
|
|
|
|
{
|
|
|
|
const parser = event.getParser();
|
|
|
|
|
|
|
|
dispatchFurnitureState({
|
|
|
|
type: InventoryFurnitureActions.SET_TRADE_STATE,
|
|
|
|
payload: {
|
|
|
|
tradeState: TradeState.TRADING_STATE_COMPLETED
|
|
|
|
}
|
|
|
|
});
|
|
|
|
}, [ dispatchFurnitureState ]);
|
|
|
|
|
|
|
|
const onTradingConfirmationEvent = useCallback((event: TradingConfirmationEvent) =>
|
|
|
|
{
|
|
|
|
const parser = event.getParser();
|
|
|
|
|
|
|
|
dispatchFurnitureState({
|
|
|
|
type: InventoryFurnitureActions.SET_TRADE_STATE,
|
|
|
|
payload: {
|
|
|
|
tradeState: TradeState.TRADING_STATE_CONFIRMED
|
|
|
|
}
|
|
|
|
});
|
|
|
|
}, [ dispatchFurnitureState ]);
|
|
|
|
|
|
|
|
const onTradingListItemEvent = useCallback((event: TradingListItemEvent) =>
|
|
|
|
{
|
|
|
|
const parser = event.getParser();
|
|
|
|
|
|
|
|
console.log(parser);
|
|
|
|
|
|
|
|
dispatchFurnitureState({
|
|
|
|
type: InventoryFurnitureActions.UPDATE_TRADE,
|
|
|
|
payload: {
|
|
|
|
tradeParser: event.getParser()
|
|
|
|
}
|
|
|
|
});
|
|
|
|
}, [ dispatchFurnitureState ]);
|
|
|
|
|
2021-04-28 07:27:15 +02:00
|
|
|
CreateMessageHook(FurnitureListAddOrUpdateEvent, onFurnitureListAddOrUpdateEvent);
|
|
|
|
CreateMessageHook(FurnitureListEvent, onFurnitureListEvent);
|
|
|
|
CreateMessageHook(FurnitureListInvalidateEvent, onFurnitureListInvalidateEvent);
|
|
|
|
CreateMessageHook(FurnitureListRemovedEvent, onFurnitureListRemovedEvent);
|
|
|
|
CreateMessageHook(FurniturePostItPlacedEvent, onFurniturePostItPlacedEvent);
|
2021-04-29 10:05:49 +02:00
|
|
|
CreateMessageHook(BotInventoryMessageEvent, onBotInventoryMessageEvent);
|
|
|
|
CreateMessageHook(BotRemovedFromInventoryEvent, onBotRemovedFromInventoryEvent);
|
|
|
|
CreateMessageHook(BotAddedToInventoryEvent, onBotAddedToInventoryEvent);
|
|
|
|
CreateMessageHook(PetInventoryEvent, onPetInventoryEvent);
|
|
|
|
CreateMessageHook(PetRemovedFromInventory, onPetRemovedFromInventory);
|
|
|
|
CreateMessageHook(PetAddedToInventoryEvent, onPetAddedToInventoryEvent);
|
|
|
|
CreateMessageHook(BadgesEvent, onBadgesEvent);
|
2021-07-05 08:46:47 +02:00
|
|
|
CreateMessageHook(TradingAcceptEvent, onTradingAcceptEvent);
|
|
|
|
CreateMessageHook(TradingOpenEvent, onTradingOpenEvent);
|
|
|
|
CreateMessageHook(TradingCloseEvent, onTradingCloseEvent);
|
|
|
|
CreateMessageHook(TradingCompletedEvent, onTradingCompletedEvent);
|
|
|
|
CreateMessageHook(TradingConfirmationEvent, onTradingConfirmationEvent);
|
|
|
|
CreateMessageHook(TradingListItemEvent, onTradingListItemEvent);
|
2021-04-28 07:27:15 +02:00
|
|
|
|
|
|
|
return null;
|
2021-04-22 05:18:44 +02:00
|
|
|
}
|