diff --git a/src/Action/StoreVillageState.ts b/src/Action/StoreVillageState.ts index e96bcac..207b2e8 100644 --- a/src/Action/StoreVillageState.ts +++ b/src/Action/StoreVillageState.ts @@ -1,16 +1,12 @@ import { ActionController, registerAction } from './ActionController'; import { Args } from '../Common'; import { Task } from '../Storage/TaskQueue'; -import { grabResources } from '../Page/ResourcesBlock'; -import { grabActiveVillageId } from '../Page/VillageBlock'; -import { VillageState } from '../Storage/VillageState'; +import { StateGrabberManager } from '../State/StateGrabberManager'; @registerAction export class StoreVillageState extends ActionController { async run(args: Args, task: Task): Promise { - const villageId = grabActiveVillageId(); - const resources = grabResources(); - const state = new VillageState(villageId); - state.storeResources(resources); + const manager = new StateGrabberManager(); + manager.grab(); } } diff --git a/src/Dashboard/Dashboard.ts b/src/Dashboard/Dashboard.ts index 269a3fe..183d659 100644 --- a/src/Dashboard/Dashboard.ts +++ b/src/Dashboard/Dashboard.ts @@ -1,5 +1,5 @@ import * as URLParse from 'url-parse'; -import { getNumber, toNumber, uniqId, waitForLoad } from '../utils'; +import { getNumber, uniqId, waitForLoad } from '../utils'; import { Scheduler } from '../Scheduler'; import { BuildPage } from '../Page/BuildPage'; import { UpgradeBuildingTask } from '../Task/UpgradeBuildingTask'; @@ -15,7 +15,8 @@ import DashboardApp from './Components/DashboardApp.vue'; import { ResourcesToLevel } from '../Task/ResourcesToLevel'; import { Logger } from '../Logger'; import { Resources } from '../Game'; -import { VillageState } from '../Storage/VillageState'; +import { VillageState } from '../State/VillageState'; +import { StateGrabberManager } from '../State/StateGrabberManager'; interface QuickAction { label: string; @@ -26,10 +27,12 @@ export class Dashboard { private readonly version: string; private scheduler: Scheduler; private readonly logger; + private grabbers: StateGrabberManager; constructor(version: string, scheduler: Scheduler) { this.version = version; this.scheduler = scheduler; + this.grabbers = new StateGrabberManager(); this.logger = new Logger(this.constructor.name); } @@ -41,6 +44,8 @@ export class Dashboard { const villageId = grabActiveVillageId(); + this.grabbers.grab(); + const scheduler = this.scheduler; const quickActions: QuickAction[] = []; diff --git a/src/Scheduler.ts b/src/Scheduler.ts index 8049892..c1e3fa9 100644 --- a/src/Scheduler.ts +++ b/src/Scheduler.ts @@ -12,17 +12,20 @@ import { BalanceHeroResourcesTask } from './Task/BalanceHeroResourcesTask'; import { Logger } from './Logger'; import { BuildBuildingTask } from './Task/BuildBuildingTask'; import { GrabVillageState } from './Task/GrabVillageState'; +import { StateGrabberManager } from './State/StateGrabberManager'; export class Scheduler { private readonly version: string; private taskQueue: TaskQueue; private actionQueue: ActionQueue; + private grabbers: StateGrabberManager; private logger: Logger; constructor(version: string) { this.version = version; this.taskQueue = new TaskQueue(); this.actionQueue = new ActionQueue(); + this.grabbers = new StateGrabberManager(); this.logger = new Logger(this.constructor.name); } @@ -89,6 +92,7 @@ export class Scheduler { } private async processActionCommand(cmd: Command, task: Task) { + this.runGrabbers(); const actionController = createAction(cmd.name, this); this.logger.log('PROCESS ACTION', cmd.name, actionController); if (actionController) { @@ -146,6 +150,15 @@ export class Scheduler { throw err; } + private runGrabbers() { + try { + this.logger.log('Rug grabbers'); + this.grabbers.grab(); + } catch (e) { + this.logger.warn('Grabbers fails with', e.message); + } + } + getTaskItems(): TaskList { return this.taskQueue.seeItems(); } diff --git a/src/State/ResourceGrabber.ts b/src/State/ResourceGrabber.ts new file mode 100644 index 0000000..e972f19 --- /dev/null +++ b/src/State/ResourceGrabber.ts @@ -0,0 +1,13 @@ +import { StateGrabber } from './StateGrabber'; +import { grabActiveVillageId } from '../Page/VillageBlock'; +import { grabResources } from '../Page/ResourcesBlock'; +import { VillageState } from './VillageState'; + +export class ResourceGrabber extends StateGrabber { + grab(): void { + const villageId = grabActiveVillageId(); + const resources = grabResources(); + const state = new VillageState(villageId); + state.storeResources(resources); + } +} diff --git a/src/State/StateGrabber.ts b/src/State/StateGrabber.ts new file mode 100644 index 0000000..8be407a --- /dev/null +++ b/src/State/StateGrabber.ts @@ -0,0 +1,3 @@ +export abstract class StateGrabber { + abstract grab(): void; +} diff --git a/src/State/StateGrabberManager.ts b/src/State/StateGrabberManager.ts new file mode 100644 index 0000000..f54c099 --- /dev/null +++ b/src/State/StateGrabberManager.ts @@ -0,0 +1,17 @@ +import { StateGrabber } from './StateGrabber'; +import { ResourceGrabber } from './ResourceGrabber'; + +export class StateGrabberManager { + private grabbers: Array = []; + + constructor() { + this.grabbers = []; + this.grabbers.push(new ResourceGrabber()); + } + + grab() { + for (let grabber of this.grabbers) { + grabber.grab(); + } + } +} diff --git a/src/Storage/VillageState.ts b/src/State/VillageState.ts similarity index 90% rename from src/Storage/VillageState.ts rename to src/State/VillageState.ts index fd98e55..39c3cba 100644 --- a/src/Storage/VillageState.ts +++ b/src/State/VillageState.ts @@ -1,4 +1,4 @@ -import { DataStorage } from './DataStorage'; +import { DataStorage } from '../Storage/DataStorage'; import { Resources } from '../Game'; export class VillageState {