refactor(player): separate more live functions to WebLivePlayer

This commit is contained in:
Alex Kaminskii 2022-12-26 22:22:31 +01:00
parent 33a6f854a2
commit 3b43691945
3 changed files with 28 additions and 24 deletions

View file

@ -4,12 +4,16 @@ import type { Store } from './common/types'
import WebPlayer from './web/WebPlayer'
import WebLivePlayer from './web/WebLivePlayer'
type WebState = typeof WebPlayer.INITIAL_STATE //?
type WebState = typeof WebPlayer.INITIAL_STATE
type WebPlayerStore = Store<WebState>
export type IWebPlayer = WebPlayer
export type IWebLivePlayer = WebLivePlayer
export type IWebPlayerStore = WebPlayerStore
type WebLiveState = typeof WebLivePlayer.INITIAL_STATE
type WebLivePlayerStore = Store<WebLiveState>
export type IWebLivePlayer = WebLivePlayer
export type IWebLivePlayerStore = WebLivePlayerStore
export function createWebPlayer(session: Record<string, any>, wrapStore?: (s:IWebPlayerStore) => IWebPlayerStore): [IWebPlayer, IWebPlayerStore] {
let store: WebPlayerStore = new SimpleStore<WebState>({
...WebPlayer.INITIAL_STATE,
@ -23,9 +27,9 @@ export function createWebPlayer(session: Record<string, any>, wrapStore?: (s:IWe
}
export function createLiveWebPlayer(session: Record<string, any>, config: RTCIceServer[], wrapStore?: (s:IWebPlayerStore) => IWebPlayerStore): [IWebLivePlayer, IWebPlayerStore] {
let store: WebPlayerStore = new SimpleStore<WebState>({
...WebPlayer.INITIAL_STATE,
export function createLiveWebPlayer(session: Record<string, any>, config: RTCIceServer[], wrapStore?: (s:IWebLivePlayerStore) => IWebLivePlayerStore): [IWebLivePlayer, IWebLivePlayerStore] {
let store: WebLivePlayerStore = new SimpleStore<WebLiveState>({
...WebLivePlayer.INITIAL_STATE,
})
if (wrapStore) {
store = wrapStore(store)

View file

@ -5,11 +5,28 @@ import AssistManager from './assist/AssistManager'
export default class WebLivePlayer extends WebPlayer {
static readonly INITIAL_STATE = {
...WebPlayer.INITIAL_STATE,
...AssistManager.INITIAL_STATE,
liveTimeTravel: false,
}
assistManager: AssistManager // public so far
constructor(wpState: Store<typeof WebPlayer.INITIAL_STATE>, session:any, config: RTCIceServer[]) {
constructor(wpState: Store<typeof WebLivePlayer.INITIAL_STATE>, session:any, config: RTCIceServer[]) {
super(wpState, session, true)
this.assistManager = new AssistManager(session, this.messageManager, this.screen, config, wpState)
this.assistManager.connect(session.agentToken)
}
// TODO separate message receivers
toggleTimetravel = async () => {
if (!this.wpState.get().liveTimeTravel) {
await this.messageManager.reloadWithUnprocessedFile(() =>
this.wpState.update({
liveTimeTravel: true,
})
)
}
}
}

View file

@ -6,7 +6,6 @@ import Player, { State as PlayerState } from '../player/Player'
import MessageManager from './MessageManager'
import InspectorController from './addons/InspectorController'
import TargetMarker from './addons/TargetMarker'
import AssistManager from './assist/AssistManager'
import Screen from './Screen/Screen'
// export type State = typeof WebPlayer.INITIAL_STATE
@ -15,12 +14,9 @@ export default class WebPlayer extends Player {
static readonly INITIAL_STATE = {
...Player.INITIAL_STATE,
...TargetMarker.INITIAL_STATE,
...MessageManager.INITIAL_STATE,
...AssistManager.INITIAL_STATE,
inspectorMode: false,
liveTimeTravel: false,
}
private readonly inspectorController: InspectorController
@ -29,7 +25,7 @@ export default class WebPlayer extends Player {
private targetMarker: TargetMarker
constructor(private wpState: Store<typeof WebPlayer.INITIAL_STATE>, session: any, live: boolean) {
constructor(protected wpState: Store<typeof WebPlayer.INITIAL_STATE>, session: any, live: boolean) {
let initialLists = live ? {} : {
event: session.events.toJSON(),
stack: session.stackEvents.toJSON(),
@ -110,25 +106,12 @@ export default class WebPlayer extends Player {
this.targetMarker.markTargets(...args)
}
// TODO separate message receivers
toggleTimetravel = async () => {
if (!this.wpState.get().liveTimeTravel) {
await this.messageManager.reloadWithUnprocessedFile(() =>
this.wpState.update({
liveTimeTravel: true,
})
)
}
}
toggleUserName = (name?: string) => {
this.screen.cursor.showTag(name)
}
clean = () => {
super.clean()
this.assistManager.clean()
window.removeEventListener('resize', this.scale)
}
}