From 39050971517930a536a8c54d720a5a58073537bc Mon Sep 17 00:00:00 2001 From: Anton Vakhrushev Date: Sun, 29 Mar 2020 17:30:53 +0300 Subject: [PATCH] Add immutable state for tasks --- src/Dashboard.ts | 2 ++ src/Scheduler.ts | 10 +++++++--- src/Storage/TaskQueue.ts | 13 +++++++++++-- src/TaskQueueRenderer.ts | 4 ++-- 4 files changed, 22 insertions(+), 7 deletions(-) diff --git a/src/Dashboard.ts b/src/Dashboard.ts index 9e2e8df..8b66ef1 100644 --- a/src/Dashboard.ts +++ b/src/Dashboard.ts @@ -4,6 +4,7 @@ import { v4 as uuid } from 'uuid'; import Scheduler from './Scheduler'; import UpgradeBuildingTask from './Task/UpgradeBuildingTask'; import { Command } from './Common'; +import TaskQueueRenderer from './TaskQueueRenderer'; export default class Dashboard { private scheduler: Scheduler; @@ -19,6 +20,7 @@ export default class Dashboard { await sleepShort(); markPage('Dashboard'); + new TaskQueueRenderer().render(this.scheduler.taskState()); if (p.pathname === '/build.php') { console.log('BUILD PAGE DETECTED'); diff --git a/src/Scheduler.ts b/src/Scheduler.ts index c211ac9..7aff45a 100644 --- a/src/Scheduler.ts +++ b/src/Scheduler.ts @@ -3,14 +3,14 @@ import UpgradeBuildingTask from './Task/UpgradeBuildingTask'; import GoToBuildingAction from './Action/GoToBuildingAction'; import UpgradeBuildingAction from './Action/UpgradeBuildingAction'; import { TryLaterError } from './Errors'; -import { TaskQueue, State } from './Storage/TaskQueue'; +import { TaskQueue, State, ImmutableState } from './Storage/TaskQueue'; import ActionQueue from './Storage/ActionQueue'; import { Args, Command } from './Common'; import TaskQueueRenderer from './TaskQueueRenderer'; export default class Scheduler { - taskQueue: TaskQueue; - actionQueue: ActionQueue; + private taskQueue: TaskQueue; + private actionQueue: ActionQueue; constructor() { this.taskQueue = new TaskQueue(); @@ -45,6 +45,10 @@ export default class Scheduler { } } + taskState(): ImmutableState { + return this.taskQueue.state(); + } + pushTask(task: Command): void { this.log('PUSH TASK', task); this.taskQueue.push(task); diff --git a/src/Storage/TaskQueue.ts b/src/Storage/TaskQueue.ts index 8bc3c3b..68e0aa9 100644 --- a/src/Storage/TaskQueue.ts +++ b/src/Storage/TaskQueue.ts @@ -49,6 +49,15 @@ export class State { } } +export class ImmutableState { + readonly current: CommandWithTime | null; + readonly items: Array; + constructor(state: State) { + this.current = state.current; + this.items = state.items; + } +} + export class TaskQueue { push(cmd: Command, ts: number | null = null) { this.log('PUSH TASK', cmd, ts); @@ -73,8 +82,8 @@ export class TaskQueue { this.flushState(state); } - state(): State { - return this.getState(); + state(): ImmutableState { + return new ImmutableState(this.getState()); } private defaultTs(): number { diff --git a/src/TaskQueueRenderer.ts b/src/TaskQueueRenderer.ts index 7683385..a0c2eec 100644 --- a/src/TaskQueueRenderer.ts +++ b/src/TaskQueueRenderer.ts @@ -1,9 +1,9 @@ -import { State } from './Storage/TaskQueue'; +import { ImmutableState } from './Storage/TaskQueue'; const ID = 'id-832654376836436939356'; export default class TaskQueueRenderer { - render(state: State) { + render(state: ImmutableState) { const ul = jQuery('') .attr({ id: ID }) .css({