Add state grabbers

This commit is contained in:
Anton Vakhrushev 2020-04-16 17:53:04 +03:00
parent fc75b007c8
commit c3428afabb
7 changed files with 57 additions and 10 deletions

View File

@ -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<any> {
const villageId = grabActiveVillageId();
const resources = grabResources();
const state = new VillageState(villageId);
state.storeResources(resources);
const manager = new StateGrabberManager();
manager.grab();
}
}

View File

@ -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[] = [];

View File

@ -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();
}

View File

@ -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);
}
}

View File

@ -0,0 +1,3 @@
export abstract class StateGrabber {
abstract grab(): void;
}

View File

@ -0,0 +1,17 @@
import { StateGrabber } from './StateGrabber';
import { ResourceGrabber } from './ResourceGrabber';
export class StateGrabberManager {
private grabbers: Array<StateGrabber> = [];
constructor() {
this.grabbers = [];
this.grabbers.push(new ResourceGrabber());
}
grab() {
for (let grabber of this.grabbers) {
grabber.grab();
}
}
}

View File

@ -1,4 +1,4 @@
import { DataStorage } from './DataStorage';
import { DataStorage } from '../Storage/DataStorage';
import { Resources } from '../Game';
export class VillageState {