added trigger message code
This commit is contained in:
parent
3cf0a9ee84
commit
5472d220ba
9 changed files with 267 additions and 99 deletions
|
@ -18,6 +18,7 @@ import type { PlaySoundEvent } from "./PlaySoundEvent";
|
|||
import type { MenuItemClickedEvent } from "./ui/MenuItemClickedEvent";
|
||||
import type { MenuItemRegisterEvent } from './ui/MenuItemRegisterEvent';
|
||||
import type { HasPlayerMovedEvent } from "./HasPlayerMovedEvent";
|
||||
import type { MessageReferenceEvent, TriggerMessageEvent } from '../iframe/TriggerMessageEvent';
|
||||
|
||||
|
||||
export interface TypedMessageEvent<T> extends MessageEvent {
|
||||
|
@ -49,6 +50,9 @@ export type IframeEventMap = {
|
|||
stopSound: null,
|
||||
getState: undefined,
|
||||
registerMenuCommand: MenuItemRegisterEvent
|
||||
|
||||
triggerMessage: TriggerMessageEvent
|
||||
removeTriggerMessage: MessageReferenceEvent
|
||||
}
|
||||
export interface IframeEvent<T extends keyof IframeEventMap> {
|
||||
type: T;
|
||||
|
@ -68,6 +72,7 @@ export interface IframeResponseEventMap {
|
|||
hasPlayerMoved: HasPlayerMovedEvent
|
||||
dataLayer: DataLayerEvent
|
||||
menuItemClicked: MenuItemClickedEvent
|
||||
messageTriggered: MessageReferenceEvent
|
||||
}
|
||||
export interface IframeResponseEvent<T extends keyof IframeResponseEventMap> {
|
||||
type: T;
|
||||
|
|
21
front/src/Api/Events/ui/TriggerMessageEvent.ts
Normal file
21
front/src/Api/Events/ui/TriggerMessageEvent.ts
Normal file
|
@ -0,0 +1,21 @@
|
|||
import * as tg from "generic-type-guard";
|
||||
|
||||
export const triggerMessage = "triggerMessage"
|
||||
export const removeTriggerMessage = "removeTriggerMessage"
|
||||
|
||||
export const isTriggerMessageEvent = new tg.IsInterface().withProperties({
|
||||
message: tg.isString,
|
||||
uuid: tg.isString
|
||||
}).get()
|
||||
|
||||
|
||||
export type TriggerMessageEvent = tg.GuardedType<typeof isTriggerMessageEvent>;
|
||||
|
||||
|
||||
export const isMessageReferenceEvent =
|
||||
new tg.IsInterface().withProperties({
|
||||
uuid: tg.isString
|
||||
}).get();
|
||||
|
||||
|
||||
export type MessageReferenceEvent = tg.GuardedType<typeof isMessageReferenceEvent>;
|
42
front/src/Api/Events/ui/TriggerMessageEventHandler.ts
Normal file
42
front/src/Api/Events/ui/TriggerMessageEventHandler.ts
Normal file
|
@ -0,0 +1,42 @@
|
|||
import { Subject } from 'rxjs';
|
||||
import { iframeListener } from '../../IframeListener';
|
||||
import { isMessageReferenceEvent, isTriggerMessageEvent, MessageReferenceEvent, removeTriggerMessage, triggerMessage, TriggerMessageEvent } from './TriggerMessageEvent';
|
||||
import * as tg from "generic-type-guard";
|
||||
export function sendMessageTriggeredEvent(uuid: string) {
|
||||
iframeListener.postMessage({
|
||||
'type': 'messageTriggered',
|
||||
'data': {
|
||||
uuid,
|
||||
} as MessageReferenceEvent
|
||||
});
|
||||
}
|
||||
|
||||
const _triggerMessageEvent: Subject<TriggerMessageEvent> = new Subject();
|
||||
const _removeTriggerMessageEvent: Subject<MessageReferenceEvent> = new Subject();
|
||||
|
||||
export const triggerMessageEvent = _triggerMessageEvent.asObservable();
|
||||
|
||||
export const removeTriggerMessageEvent = _removeTriggerMessageEvent.asObservable();
|
||||
|
||||
const isTriggerMessageEventObject = new tg.IsInterface().withProperties({
|
||||
type: tg.isSingletonString(triggerMessage),
|
||||
data: isTriggerMessageEvent
|
||||
}).get()
|
||||
const isTriggerMessageRemoveEventObject = new tg.IsInterface().withProperties({
|
||||
type: tg.isSingletonString(removeTriggerMessage),
|
||||
data: isMessageReferenceEvent
|
||||
}).get()
|
||||
|
||||
|
||||
export const isTriggerMessageHandlerEvent = tg.isUnion(isTriggerMessageEventObject, isTriggerMessageRemoveEventObject)
|
||||
|
||||
|
||||
|
||||
|
||||
export function triggerMessageEventHandler(event: tg.GuardedType<typeof isTriggerMessageHandlerEvent>) {
|
||||
if (isTriggerMessageEventObject(event)) {
|
||||
_triggerMessageEvent.next(event.data)
|
||||
} else if (isTriggerMessageRemoveEventObject(event)) {
|
||||
_removeTriggerMessageEvent.next(event.data)
|
||||
}
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue