diff --git a/src/nitro/session/events/RoomSessionSpectatorModeEvent.ts b/src/nitro/session/events/RoomSessionSpectatorModeEvent.ts new file mode 100644 index 00000000..68daac96 --- /dev/null +++ b/src/nitro/session/events/RoomSessionSpectatorModeEvent.ts @@ -0,0 +1,12 @@ +import { IRoomSession } from '../IRoomSession'; +import { RoomSessionEvent } from './RoomSessionEvent'; + +export class RoomSessionSpectatorModeEvent extends RoomSessionEvent +{ + public static SPECTATOR_MODE: string = 'RSSME_SPECTATOR_MODE'; + + constructor(type: string, session: IRoomSession) + { + super(type, session); + } +} diff --git a/src/nitro/session/events/index.ts b/src/nitro/session/events/index.ts index dbe3f4f0..82421b01 100644 --- a/src/nitro/session/events/index.ts +++ b/src/nitro/session/events/index.ts @@ -25,6 +25,7 @@ export * from './RoomSessionPollEvent'; export * from './RoomSessionPresentEvent'; export * from './RoomSessionPropertyUpdateEvent'; export * from './RoomSessionQueueEvent'; +export * from './RoomSessionSpectatorModeEvent'; export * from './RoomSessionUserBadgesEvent'; export * from './RoomSessionUserDataUpdateEvent'; export * from './RoomSessionUserFigureUpdateEvent'; diff --git a/src/nitro/session/handler/RoomSessionHandler.ts b/src/nitro/session/handler/RoomSessionHandler.ts index a9fe995e..24db26df 100644 --- a/src/nitro/session/handler/RoomSessionHandler.ts +++ b/src/nitro/session/handler/RoomSessionHandler.ts @@ -4,9 +4,11 @@ import { RoomDoorbellAcceptedEvent } from '../../communication/messages/incoming import { RoomDoorbellRejectedEvent } from '../../communication/messages/incoming/room/access/doorbell/RoomDoorbellRejectedEvent'; import { RoomEnterEvent } from '../../communication/messages/incoming/room/access/RoomEnterEvent'; import { RoomReadyMessageEvent } from '../../communication/messages/incoming/room/mapping/RoomReadyMessageEvent'; +import { YouAreSpectatorMessageEvent } from '../../communication/messages/incoming/room/session/YouAreSpectatorMessageEvent'; import { GoToFlatMessageComposer } from '../../communication/messages/outgoing/room/session/GoToFlatMessageComposer'; import { RoomSessionDoorbellEvent } from '../events/RoomSessionDoorbellEvent'; import { IRoomHandlerListener } from '../IRoomHandlerListener'; +import { RoomSessionSpectatorModeEvent } from './../events/RoomSessionSpectatorModeEvent'; import { BaseHandler } from './BaseHandler'; export class RoomSessionHandler extends BaseHandler @@ -24,6 +26,7 @@ export class RoomSessionHandler extends BaseHandler connection.addMessageEvent(new DesktopViewEvent(this.onDesktopViewEvent.bind(this))); connection.addMessageEvent(new RoomDoorbellAcceptedEvent(this.onRoomDoorbellAcceptedEvent.bind(this))); connection.addMessageEvent(new RoomDoorbellRejectedEvent(this.onRoomDoorbellRejectedEvent.bind(this))); + connection.addMessageEvent(new YouAreSpectatorMessageEvent(this.onYouAreSpectatorMessageEvent.bind(this))); } private onRoomEnterEvent(event: RoomEnterEvent): void @@ -107,4 +110,17 @@ export class RoomSessionHandler extends BaseHandler } } } + + private onYouAreSpectatorMessageEvent(event: YouAreSpectatorMessageEvent): void + { + if(this.listener) + { + const session = this.listener.getSession(this.roomId); + + if(!session) return; + + session.isSpectator = true; + this.listener.events.dispatchEvent(new RoomSessionSpectatorModeEvent(RoomSessionSpectatorModeEvent.SPECTATOR_MODE, session)); + } + } }