Add village repo to scheduler

This commit is contained in:
Anton Vakhrushev 2020-05-09 11:51:15 +03:00
parent 304c192ab0
commit ea4deb6323
4 changed files with 35 additions and 5 deletions

View File

@ -7,6 +7,7 @@ import { ControlPanel } from './ControlPanel';
import { DataStorageTaskProvider } from './Queue/DataStorageTaskProvider';
import { Statistics } from './Statistics';
import { StatisticsStorage } from './Storage/StatisticsStorage';
import { VillageRepository, VillageRepositoryInterface } from './VillageRepository';
export class Container {
private readonly version: string;
@ -15,6 +16,17 @@ export class Container {
this.version = version;
}
private _villageRepository: VillageRepositoryInterface | undefined;
get villageRepository(): VillageRepository {
this._villageRepository =
this._villageRepository ||
(() => {
return new VillageRepository();
})();
return this._villageRepository;
}
private _scheduler: Scheduler | undefined;
get scheduler(): Scheduler {
@ -24,7 +36,7 @@ export class Container {
const taskProvider = DataStorageTaskProvider.create();
const taskQueue = new TaskQueue(taskProvider, new ConsoleLogger(TaskQueue.name));
const actionQueue = new ActionQueue();
return new Scheduler(taskQueue, actionQueue, new ConsoleLogger(Scheduler.name));
return new Scheduler(taskQueue, actionQueue, this.villageRepository, new ConsoleLogger(Scheduler.name));
})();
return this._scheduler;
}

View File

@ -20,7 +20,6 @@ import { ExecutionStorage } from './Storage/ExecutionStorage';
import { createVillageStates, VillageState } from './VillageState';
import { Task } from './Queue/TaskProvider';
import { Action } from './Queue/ActionQueue';
import * as _ from 'underscore';
interface QuickAction {
label: string;

View File

@ -14,7 +14,7 @@ import { ImmutableTaskList, Task, TaskId } from './Queue/TaskProvider';
import { ForgeImprovementTask } from './Task/ForgeImprovementTask';
import { getTaskType, TaskType } from './Task/TaskMap';
import { MARKET_ID } from './Core/Buildings';
import { grabVillageList } from './Page/VillageBlock';
import { VillageRepositoryInterface } from './VillageRepository';
export enum ContractType {
UpgradeBuilding,
@ -31,11 +31,18 @@ interface ContractAttributes {
export class Scheduler {
private taskQueue: TaskQueue;
private actionQueue: ActionQueue;
private villageRepository: VillageRepositoryInterface;
private logger: Logger;
constructor(taskQueue: TaskQueue, actionQueue: ActionQueue, logger: Logger) {
constructor(
taskQueue: TaskQueue,
actionQueue: ActionQueue,
villageRepository: VillageRepositoryInterface,
logger: Logger
) {
this.taskQueue = taskQueue;
this.actionQueue = actionQueue;
this.villageRepository = villageRepository;
this.logger = logger;
// this.taskQueue.push(GrabVillageState.name, {}, timestamp());
@ -185,7 +192,7 @@ export class Scheduler {
scheduleResourceTransferTasks(fromVillageId: number, toVillageId: number): void {
this.dropResourceTransferTasks(fromVillageId, toVillageId);
const village = grabVillageList().find(v => v.id === toVillageId);
const village = this.villageRepository.all().find(v => v.id === toVillageId);
if (!village) {
throw new Error('No village');
}

12
src/VillageRepository.ts Normal file
View File

@ -0,0 +1,12 @@
import { Village } from './Core/Village';
import { grabVillageList } from './Page/VillageBlock';
export interface VillageRepositoryInterface {
all(): Array<Village>;
}
export class VillageRepository implements VillageRepositoryInterface {
all(): Array<Village> {
return grabVillageList();
}
}