Divide task components
This commit is contained in:
parent
a74a26896c
commit
ad64905888
@ -4,7 +4,7 @@ import { AggregateLogger, ConsoleLogger, LogLevel, StorageLogger } from './Logge
|
||||
import { ActionQueue } from './Queue/ActionQueue';
|
||||
import { Executor } from './Executor';
|
||||
import { ControlPanel } from './ControlPanel';
|
||||
import { DataStorageTaskProvider } from './Queue/DataStorageTaskProvider';
|
||||
import { DataStorageTaskProvider } from './Queue/TaskProvider/DataStorageTaskProvider';
|
||||
import { Statistics } from './Statistics';
|
||||
import { VillageRepository } from './Village/VillageRepository';
|
||||
import { VillageFactory } from './Village/VillageFactory';
|
||||
|
@ -17,12 +17,12 @@ import { DataStorage } from './Storage/DataStorage';
|
||||
import { getBuildingPageAttributes, isBuildingPage } from './Page/PageDetector';
|
||||
import { ExecutionStorage } from './Storage/ExecutionStorage';
|
||||
import { VillageState } from './Village/VillageState';
|
||||
import { Task } from './Queue/TaskProvider';
|
||||
import { Action } from './Queue/ActionQueue';
|
||||
import { VillageFactory } from './Village/VillageFactory';
|
||||
import { uniqId } from './Helpers/Identity';
|
||||
import { timestamp } from './Helpers/Time';
|
||||
import { notify, parseLocation, waitForLoad } from './Helpers/Browser';
|
||||
import { Action } from './Queue/Action';
|
||||
import { Task } from './Queue/Task';
|
||||
|
||||
Vue.use(Vuex);
|
||||
|
||||
|
@ -12,13 +12,13 @@ import { GrabberManager } from './Grabber/GrabberManager';
|
||||
import { Scheduler } from './Scheduler';
|
||||
import { Statistics } from './Statistics';
|
||||
import { ExecutionStorage } from './Storage/ExecutionStorage';
|
||||
import { Action } from './Queue/ActionQueue';
|
||||
import { Task } from './Queue/TaskProvider';
|
||||
import { createTaskHandler } from './Handler/TaskMap';
|
||||
import { VillageFactory } from './Village/VillageFactory';
|
||||
import { sleepMicro, timestamp } from './Helpers/Time';
|
||||
import { markPage, waitForLoad } from './Helpers/Browser';
|
||||
import { createActionHandler } from './Handler/ActionMap';
|
||||
import { Action } from './Queue/Action';
|
||||
import { Task } from './Queue/Task';
|
||||
|
||||
export interface ExecutionSettings {
|
||||
pauseTs: number;
|
||||
|
@ -5,8 +5,8 @@ import { HeroStorage } from '../../Storage/HeroStorage';
|
||||
import { calcHeroResource } from '../../Core/HeroBalance';
|
||||
import { HeroAllResources } from '../../Core/Hero';
|
||||
import { Args } from '../../Queue/Args';
|
||||
import { Task } from '../../Queue/TaskProvider';
|
||||
import { registerAction } from '../ActionMap';
|
||||
import { Task } from '../../Queue/Task';
|
||||
|
||||
@registerAction
|
||||
export class BalanceHeroResourcesAction extends BaseAction {
|
||||
|
@ -2,9 +2,9 @@ import { Scheduler } from '../../Scheduler';
|
||||
import { taskError, TryLaterError } from '../../Errors';
|
||||
import { grabActiveVillageId } from '../../Page/VillageBlock';
|
||||
import { Args } from '../../Queue/Args';
|
||||
import { Task } from '../../Queue/TaskProvider';
|
||||
import { VillageFactory } from '../../Village/VillageFactory';
|
||||
import { aroundMinutes } from '../../Helpers/Time';
|
||||
import { Task } from '../../Queue/Task';
|
||||
|
||||
export class BaseAction {
|
||||
protected readonly scheduler: Scheduler;
|
||||
|
@ -2,9 +2,9 @@ import { BaseAction } from './BaseAction';
|
||||
import { GrabError, taskError, TryLaterError } from '../../Errors';
|
||||
import { clickBuildButton } from '../../Page/BuildingPage/BuildingPage';
|
||||
import { Args } from '../../Queue/Args';
|
||||
import { Task } from '../../Queue/TaskProvider';
|
||||
import { aroundMinutes } from '../../Helpers/Time';
|
||||
import { registerAction } from '../ActionMap';
|
||||
import { Task } from '../../Queue/Task';
|
||||
|
||||
@registerAction
|
||||
export class BuildBuildingAction extends BaseAction {
|
||||
|
@ -1,10 +1,10 @@
|
||||
import { BaseAction } from './BaseAction';
|
||||
import { GrabError, TryLaterError } from '../../Errors';
|
||||
import { Args } from '../../Queue/Args';
|
||||
import { Task } from '../../Queue/TaskProvider';
|
||||
import { clickCelebrationButton } from '../../Page/BuildingPage/GuildHallPage';
|
||||
import { aroundMinutes } from '../../Helpers/Time';
|
||||
import { registerAction } from '../ActionMap';
|
||||
import { Task } from '../../Queue/Task';
|
||||
|
||||
@registerAction
|
||||
export class CelebrationAction extends BaseAction {
|
||||
|
@ -2,9 +2,9 @@ import { BaseAction } from './BaseAction';
|
||||
import { GrabError, TryLaterError } from '../../Errors';
|
||||
import { grabBuildingQueueInfo } from '../../Page/VillageBlock';
|
||||
import { Args } from '../../Queue/Args';
|
||||
import { Task } from '../../Queue/TaskProvider';
|
||||
import { BuildingQueueInfo } from '../../Core/BuildingQueueInfo';
|
||||
import { registerAction } from '../ActionMap';
|
||||
import { Task } from '../../Queue/Task';
|
||||
|
||||
@registerAction
|
||||
export class CheckBuildingRemainingTimeAction extends BaseAction {
|
||||
|
@ -1,8 +1,8 @@
|
||||
import { BaseAction } from './BaseAction';
|
||||
import { taskError } from '../../Errors';
|
||||
import { Args } from '../../Queue/Args';
|
||||
import { Task } from '../../Queue/TaskProvider';
|
||||
import { registerAction } from '../ActionMap';
|
||||
import { Task } from '../../Queue/Task';
|
||||
|
||||
@registerAction
|
||||
export class ClickButtonAction extends BaseAction {
|
||||
|
@ -1,7 +1,7 @@
|
||||
import { BaseAction } from './BaseAction';
|
||||
import { Args } from '../../Queue/Args';
|
||||
import { Task } from '../../Queue/TaskProvider';
|
||||
import { registerAction } from '../ActionMap';
|
||||
import { Task } from '../../Queue/Task';
|
||||
|
||||
@registerAction
|
||||
export class CompleteTaskAction extends BaseAction {
|
||||
|
@ -3,7 +3,6 @@ import { FailTaskError, taskError, TryLaterError } from '../../Errors';
|
||||
import { Resources } from '../../Core/Resources';
|
||||
import { Coordinates } from '../../Core/Village';
|
||||
import { Args } from '../../Queue/Args';
|
||||
import { Task } from '../../Queue/TaskProvider';
|
||||
import { clickSendButton, fillSendResourcesForm } from '../../Page/BuildingPage/MarketPage';
|
||||
import { VillageState } from '../../Village/VillageState';
|
||||
import { MerchantsInfo } from '../../Core/Market';
|
||||
@ -18,6 +17,7 @@ import { path } from '../../Helpers/Path';
|
||||
import { MARKET_ID } from '../../Core/Buildings';
|
||||
import { aroundMinutes, timestamp } from '../../Helpers/Time';
|
||||
import { registerAction } from '../ActionMap';
|
||||
import { Task } from '../../Queue/Task';
|
||||
|
||||
@registerAction
|
||||
export class FindSendResourcesPathAction extends BaseAction {
|
||||
|
@ -1,10 +1,10 @@
|
||||
import { BaseAction } from './BaseAction';
|
||||
import { GrabError, taskError, TryLaterError } from '../../Errors';
|
||||
import { Args } from '../../Queue/Args';
|
||||
import { Task } from '../../Queue/TaskProvider';
|
||||
import { clickResearchButton } from '../../Page/BuildingPage/ForgePage';
|
||||
import { aroundMinutes } from '../../Helpers/Time';
|
||||
import { registerAction } from '../ActionMap';
|
||||
import { Task } from '../../Queue/Task';
|
||||
|
||||
@registerAction
|
||||
export class ForgeImprovementAction extends BaseAction {
|
||||
|
@ -3,9 +3,9 @@ import { grabVillageList } from '../../Page/VillageBlock';
|
||||
import { grabHeroVillage } from '../../Page/HeroPage';
|
||||
import { HeroStorage } from '../../Storage/HeroStorage';
|
||||
import { Args } from '../../Queue/Args';
|
||||
import { Task } from '../../Queue/TaskProvider';
|
||||
import { path } from '../../Helpers/Path';
|
||||
import { registerAction } from '../ActionMap';
|
||||
import { Task } from '../../Queue/Task';
|
||||
|
||||
@registerAction
|
||||
export class GoToHeroVillageAction extends BaseAction {
|
||||
|
@ -1,8 +1,8 @@
|
||||
import { BaseAction } from './BaseAction';
|
||||
import { taskError } from '../../Errors';
|
||||
import { Args } from '../../Queue/Args';
|
||||
import { Task } from '../../Queue/TaskProvider';
|
||||
import { registerAction } from '../ActionMap';
|
||||
import { Task } from '../../Queue/Task';
|
||||
|
||||
@registerAction
|
||||
export class GoToPageAction extends BaseAction {
|
||||
|
@ -1,9 +1,9 @@
|
||||
import { BaseAction } from './BaseAction';
|
||||
import { AbortTaskError } from '../../Errors';
|
||||
import { Args } from '../../Queue/Args';
|
||||
import { Task } from '../../Queue/TaskProvider';
|
||||
import { trimPrefix } from '../../Helpers/Convert';
|
||||
import { registerAction } from '../ActionMap';
|
||||
import { Task } from '../../Queue/Task';
|
||||
|
||||
const CONFIG = [
|
||||
{ level: 0, health: 60 },
|
||||
|
@ -1,12 +1,12 @@
|
||||
import { BaseAction } from './BaseAction';
|
||||
import { Args } from '../../Queue/Args';
|
||||
import { Task } from '../../Queue/TaskProvider';
|
||||
import { clickSendButton, fillSendResourcesForm } from '../../Page/BuildingPage/MarketPage';
|
||||
import { ResourceTransferCalculator } from '../../Village/ResourceTransfer';
|
||||
import { ResourceTransferStorage } from '../../Storage/ResourceTransferStorage';
|
||||
import { Resources } from '../../Core/Resources';
|
||||
import { AbortTaskError } from '../../Errors';
|
||||
import { registerAction } from '../ActionMap';
|
||||
import { Task } from '../../Queue/Task';
|
||||
|
||||
@registerAction
|
||||
export class SendResourcesAction extends BaseAction {
|
||||
|
@ -1,7 +1,6 @@
|
||||
import { BaseAction } from './BaseAction';
|
||||
import { taskError, TryLaterError } from '../../Errors';
|
||||
import { Args } from '../../Queue/Args';
|
||||
import { Task } from '../../Queue/TaskProvider';
|
||||
import {
|
||||
clickTrainButton,
|
||||
fillTrainCount,
|
||||
@ -12,6 +11,7 @@ import { Resources } from '../../Core/Resources';
|
||||
import { randomInRange } from '../../Helpers/Random';
|
||||
import { aroundMinutes } from '../../Helpers/Time';
|
||||
import { registerAction } from '../ActionMap';
|
||||
import { Task } from '../../Queue/Task';
|
||||
|
||||
@registerAction
|
||||
export class TrainTrooperAction extends BaseAction {
|
||||
|
@ -2,9 +2,9 @@ import { BaseAction } from './BaseAction';
|
||||
import { GrabError, TryLaterError } from '../../Errors';
|
||||
import { clickUpgradeButton } from '../../Page/BuildingPage/BuildingPage';
|
||||
import { Args } from '../../Queue/Args';
|
||||
import { Task } from '../../Queue/TaskProvider';
|
||||
import { aroundMinutes } from '../../Helpers/Time';
|
||||
import { registerAction } from '../ActionMap';
|
||||
import { Task } from '../../Queue/Task';
|
||||
|
||||
@registerAction
|
||||
export class UpgradeBuildingAction extends BaseAction {
|
||||
|
@ -3,11 +3,11 @@ import { ActionError, taskError, TryLaterError } from '../../Errors';
|
||||
import { grabResourceSlots } from '../../Page/SlotBlock';
|
||||
import { UpgradeBuildingTask } from '../Task/UpgradeBuildingTask';
|
||||
import { Args } from '../../Queue/Args';
|
||||
import { Task } from '../../Queue/TaskProvider';
|
||||
import { ResourceSlot } from '../../Core/Slot';
|
||||
import { getNumber } from '../../Helpers/Convert';
|
||||
import { aroundMinutes } from '../../Helpers/Time';
|
||||
import { registerAction } from '../ActionMap';
|
||||
import { Task } from '../../Queue/Task';
|
||||
|
||||
@registerAction
|
||||
export class UpgradeResourceToLevelAction extends BaseAction {
|
||||
|
@ -3,9 +3,9 @@ import { GoToPageAction } from '../Action/GoToPageAction';
|
||||
import { CompleteTaskAction } from '../Action/CompleteTaskAction';
|
||||
import { BalanceHeroResourcesAction } from '../Action/BalanceHeroResourcesAction';
|
||||
import { GoToHeroVillageAction } from '../Action/GoToHeroVillageAction';
|
||||
import { Task } from '../../Queue/TaskProvider';
|
||||
import { path } from '../../Helpers/Path';
|
||||
import { registerTask } from '../TaskMap';
|
||||
import { Task } from '../../Queue/Task';
|
||||
|
||||
@registerTask()
|
||||
export class BalanceHeroResourcesTask extends BaseTask {
|
||||
|
@ -1,9 +1,9 @@
|
||||
import { Scheduler } from '../../Scheduler';
|
||||
import { CompleteTaskAction } from '../Action/CompleteTaskAction';
|
||||
import { Action } from '../../Queue/ActionQueue';
|
||||
import { Args } from '../../Queue/Args';
|
||||
import { Task } from '../../Queue/TaskProvider';
|
||||
import { VillageFactory } from '../../Village/VillageFactory';
|
||||
import { Action } from '../../Queue/Action';
|
||||
import { Task } from '../../Queue/Task';
|
||||
|
||||
export interface ActionDefinition {
|
||||
name: string;
|
||||
|
@ -1,12 +1,12 @@
|
||||
import { BuildBuildingAction } from '../Action/BuildBuildingAction';
|
||||
import { GoToPageAction } from '../Action/GoToPageAction';
|
||||
import { ActionDefinition, BaseTask } from './BaseTask';
|
||||
import { Task } from '../../Queue/TaskProvider';
|
||||
import { path } from '../../Helpers/Path';
|
||||
import { registerTask } from '../TaskMap';
|
||||
import { taskError } from '../../Errors';
|
||||
import { goToResourceViewPage } from '../ActionBundles';
|
||||
import { ProductionQueue } from '../../Core/ProductionQueue';
|
||||
import { Task } from '../../Queue/Task';
|
||||
|
||||
@registerTask({ queue: ProductionQueue.Building })
|
||||
export class BuildBuildingTask extends BaseTask {
|
||||
|
@ -1,10 +1,10 @@
|
||||
import { ActionDefinition, BaseTask } from './BaseTask';
|
||||
import { GoToPageAction } from '../Action/GoToPageAction';
|
||||
import { Task } from '../../Queue/TaskProvider';
|
||||
import { path } from '../../Helpers/Path';
|
||||
import { CelebrationAction } from '../Action/CelebrationAction';
|
||||
import { registerTask } from '../TaskMap';
|
||||
import { ProductionQueue } from '../../Core/ProductionQueue';
|
||||
import { Task } from '../../Queue/Task';
|
||||
|
||||
@registerTask({ queue: ProductionQueue.Celebration })
|
||||
export class CelebrationTask extends BaseTask {
|
||||
|
@ -1,10 +1,10 @@
|
||||
import { ActionDefinition, BaseTask } from './BaseTask';
|
||||
import { GoToPageAction } from '../Action/GoToPageAction';
|
||||
import { Task } from '../../Queue/TaskProvider';
|
||||
import { ForgeImprovementAction } from '../Action/ForgeImprovementAction';
|
||||
import { path } from '../../Helpers/Path';
|
||||
import { registerTask } from '../TaskMap';
|
||||
import { ProductionQueue } from '../../Core/ProductionQueue';
|
||||
import { Task } from '../../Queue/Task';
|
||||
|
||||
@registerTask({ queue: ProductionQueue.UpgradeUnit })
|
||||
export class ForgeImprovementTask extends BaseTask {
|
||||
|
@ -1,7 +1,7 @@
|
||||
import { BaseTask, ActionDefinition } from './BaseTask';
|
||||
import { scanAllVillagesBundle } from '../ActionBundles';
|
||||
import { Task } from '../../Queue/TaskProvider';
|
||||
import { registerTask } from '../TaskMap';
|
||||
import { Task } from '../../Queue/Task';
|
||||
|
||||
@registerTask()
|
||||
export class GrabVillageStateTask extends BaseTask {
|
||||
|
@ -1,9 +1,9 @@
|
||||
import { BaseTask, ActionDefinition } from './BaseTask';
|
||||
import { UpgradeResourceToLevelAction } from '../Action/UpgradeResourceToLevelAction';
|
||||
import { Task } from '../../Queue/TaskProvider';
|
||||
import { registerTask } from '../TaskMap';
|
||||
import { goToResourceViewPage } from '../ActionBundles';
|
||||
import { taskError } from '../../Errors';
|
||||
import { Task } from '../../Queue/Task';
|
||||
|
||||
@registerTask()
|
||||
export class ResourcesToLevelTask extends BaseTask {
|
||||
|
@ -1,6 +1,6 @@
|
||||
import { BaseTask, ActionDefinition } from './BaseTask';
|
||||
import { Task } from '../../Queue/TaskProvider';
|
||||
import { registerTask } from '../TaskMap';
|
||||
import { Task } from '../../Queue/Task';
|
||||
|
||||
@registerTask()
|
||||
export class RunVillageProductionTask extends BaseTask {
|
||||
|
@ -2,9 +2,9 @@ import { ActionDefinition, BaseTask } from './BaseTask';
|
||||
import { GoToPageAction } from '../Action/GoToPageAction';
|
||||
import { SendOnAdventureAction } from '../Action/SendOnAdventureAction';
|
||||
import { ClickButtonAction } from '../Action/ClickButtonAction';
|
||||
import { Task } from '../../Queue/TaskProvider';
|
||||
import { path } from '../../Helpers/Path';
|
||||
import { registerTask } from '../TaskMap';
|
||||
import { Task } from '../../Queue/Task';
|
||||
|
||||
@registerTask()
|
||||
export class SendOnAdventureTask extends BaseTask {
|
||||
|
@ -2,9 +2,9 @@ import { BaseTask, ActionDefinition } from './BaseTask';
|
||||
import { SendResourcesAction } from '../Action/SendResourcesAction';
|
||||
import { ClickButtonAction } from '../Action/ClickButtonAction';
|
||||
import { goToMarketSendResourcesPage, goToResourceViewPage } from '../ActionBundles';
|
||||
import { Task } from '../../Queue/TaskProvider';
|
||||
import { registerTask } from '../TaskMap';
|
||||
import { FindSendResourcesPathAction } from '../Action/FindSendResourcesPathAction';
|
||||
import { Task } from '../../Queue/Task';
|
||||
|
||||
@registerTask()
|
||||
export class SendResourcesTask extends BaseTask {
|
||||
|
@ -1,10 +1,10 @@
|
||||
import { ActionDefinition, BaseTask } from './BaseTask';
|
||||
import { GoToPageAction } from '../Action/GoToPageAction';
|
||||
import { TrainTrooperAction } from '../Action/TrainTrooperAction';
|
||||
import { Task } from '../../Queue/TaskProvider';
|
||||
import { path } from '../../Helpers/Path';
|
||||
import { registerTask } from '../TaskMap';
|
||||
import { ProductionQueue } from '../../Core/ProductionQueue';
|
||||
import { Task } from '../../Queue/Task';
|
||||
|
||||
@registerTask({ queue: ProductionQueue.TrainUnit })
|
||||
export class TrainTroopTask extends BaseTask {
|
||||
|
@ -1,10 +1,10 @@
|
||||
import { ActionDefinition, BaseTask } from './BaseTask';
|
||||
import { GoToPageAction } from '../Action/GoToPageAction';
|
||||
import { UpgradeBuildingTask } from './UpgradeBuildingTask';
|
||||
import { ImmutableTaskList, Task } from '../../Queue/TaskProvider';
|
||||
import { ForgeImprovementTask } from './ForgeImprovementTask';
|
||||
import { path, PathList, uniqPaths } from '../../Helpers/Path';
|
||||
import { registerTask } from '../TaskMap';
|
||||
import { ImmutableTaskList, Task } from '../../Queue/Task';
|
||||
|
||||
@registerTask()
|
||||
export class UpdateResourceContractsTask extends BaseTask {
|
||||
|
@ -1,12 +1,12 @@
|
||||
import { UpgradeBuildingAction } from '../Action/UpgradeBuildingAction';
|
||||
import { BaseTask, ActionDefinition } from './BaseTask';
|
||||
import { GoToPageAction } from '../Action/GoToPageAction';
|
||||
import { Task } from '../../Queue/TaskProvider';
|
||||
import { path } from '../../Helpers/Path';
|
||||
import { registerTask } from '../TaskMap';
|
||||
import { goToResourceViewPage } from '../ActionBundles';
|
||||
import { taskError } from '../../Errors';
|
||||
import { ProductionQueue } from '../../Core/ProductionQueue';
|
||||
import { Task } from '../../Queue/Task';
|
||||
|
||||
@registerTask({ queue: ProductionQueue.Building })
|
||||
export class UpgradeBuildingTask extends BaseTask {
|
||||
|
9
src/Queue/Action.ts
Normal file
9
src/Queue/Action.ts
Normal file
@ -0,0 +1,9 @@
|
||||
import { Args } from './Args';
|
||||
|
||||
export interface Action {
|
||||
name: string;
|
||||
args: Args;
|
||||
}
|
||||
|
||||
export type ActionList = Array<Action>;
|
||||
export type ImmutableActionList = ReadonlyArray<Action>;
|
@ -1,19 +1,10 @@
|
||||
import { ConsoleLogger, Logger } from '../Logger';
|
||||
import { DataStorage } from '../Storage/DataStorage';
|
||||
import { Args } from './Args';
|
||||
import { Action, ActionList, ImmutableActionList } from './Action';
|
||||
|
||||
const NAMESPACE = 'actions.v1';
|
||||
const QUEUE_NAME = 'queue';
|
||||
|
||||
export interface Action {
|
||||
name: string;
|
||||
args: Args;
|
||||
}
|
||||
|
||||
type ActionList = Array<Action>;
|
||||
|
||||
export type ImmutableActionList = ReadonlyArray<Action>;
|
||||
|
||||
export class ActionQueue {
|
||||
private storage: DataStorage;
|
||||
private readonly logger: Logger;
|
||||
|
@ -1,6 +1,6 @@
|
||||
import { ResourcesInterface } from '../Core/Resources';
|
||||
import { CoordinatesInterface } from '../Core/Village';
|
||||
import { TaskId } from './TaskProvider';
|
||||
import { TaskId } from './TaskId';
|
||||
|
||||
export interface Args {
|
||||
taskId?: TaskId;
|
||||
|
@ -2,23 +2,7 @@ import { Args } from './Args';
|
||||
import { ResourcesInterface } from '../Core/Resources';
|
||||
import { ProductionQueue } from '../Core/ProductionQueue';
|
||||
import { getProductionQueue } from '../Handler/TaskMap';
|
||||
import { uniqId } from '../Helpers/Identity';
|
||||
|
||||
export type TaskId = string;
|
||||
|
||||
let idSequence = 1;
|
||||
let lastTimestamp: number | undefined = undefined;
|
||||
|
||||
export function uniqTaskId(): TaskId {
|
||||
const ts = Math.floor(Date.now() / 1000);
|
||||
if (ts === lastTimestamp) {
|
||||
++idSequence;
|
||||
} else {
|
||||
idSequence = 1;
|
||||
}
|
||||
lastTimestamp = ts;
|
||||
return 'tid.' + ts + '.' + String(idSequence).padStart(4, '0') + '.' + uniqId('');
|
||||
}
|
||||
import { TaskId } from './TaskId';
|
||||
|
||||
export interface TaskCore {
|
||||
readonly id: TaskId;
|
||||
@ -43,11 +27,6 @@ export class Task implements TaskCore {
|
||||
export type TaskList = Array<Task>;
|
||||
export type ImmutableTaskList = ReadonlyArray<Task>;
|
||||
|
||||
export interface TaskProvider {
|
||||
getTasks(): TaskList;
|
||||
setTasks(tasks: TaskList): void;
|
||||
}
|
||||
|
||||
export interface TaskMatcher {
|
||||
(task: TaskCore): boolean;
|
||||
}
|
17
src/Queue/TaskId.ts
Normal file
17
src/Queue/TaskId.ts
Normal file
@ -0,0 +1,17 @@
|
||||
import { uniqId } from '../Helpers/Identity';
|
||||
|
||||
export type TaskId = string;
|
||||
|
||||
let idSequence = 1;
|
||||
let lastTimestamp: number | undefined = undefined;
|
||||
|
||||
export function uniqTaskId(): TaskId {
|
||||
const ts = Math.floor(Date.now() / 1000);
|
||||
if (ts === lastTimestamp) {
|
||||
++idSequence;
|
||||
} else {
|
||||
idSequence = 1;
|
||||
}
|
||||
lastTimestamp = ts;
|
||||
return 'tid.' + ts + '.' + String(idSequence).padStart(4, '0') + '.' + uniqId('');
|
||||
}
|
@ -1,4 +1,5 @@
|
||||
import { TaskList, TaskProvider } from './TaskProvider';
|
||||
import { TaskProvider } from './TaskProvider';
|
||||
import { TaskList } from '../Task';
|
||||
|
||||
export class ArrayTaskProvider implements TaskProvider {
|
||||
private tasks: TaskList;
|
@ -1,5 +1,7 @@
|
||||
import { DataStorage } from '../Storage/DataStorage';
|
||||
import { Task, TaskList, TaskProvider, uniqTaskId } from './TaskProvider';
|
||||
import { DataStorage } from '../../Storage/DataStorage';
|
||||
import { TaskProvider } from './TaskProvider';
|
||||
import { Task, TaskList } from '../Task';
|
||||
import { uniqTaskId } from '../TaskId';
|
||||
|
||||
const QUEUE_NAME = 'queue';
|
||||
|
6
src/Queue/TaskProvider/TaskProvider.ts
Normal file
6
src/Queue/TaskProvider/TaskProvider.ts
Normal file
@ -0,0 +1,6 @@
|
||||
import { TaskList } from '../Task';
|
||||
|
||||
export interface TaskProvider {
|
||||
getTasks(): TaskList;
|
||||
setTasks(tasks: TaskList): void;
|
||||
}
|
@ -1,5 +1,7 @@
|
||||
import { Logger } from '../Logger';
|
||||
import { ImmutableTaskList, Task, TaskId, TaskList, TaskProvider } from './TaskProvider';
|
||||
import { TaskProvider } from './TaskProvider/TaskProvider';
|
||||
import { ImmutableTaskList, Task, TaskList } from './Task';
|
||||
import { TaskId } from './TaskId';
|
||||
|
||||
export class TaskQueue {
|
||||
private provider: TaskProvider;
|
||||
|
@ -2,17 +2,19 @@ import { TaskQueue } from './Queue/TaskQueue';
|
||||
import { BalanceHeroResourcesTask } from './Handler/Task/BalanceHeroResourcesTask';
|
||||
import { Logger } from './Logger';
|
||||
import { GrabVillageStateTask } from './Handler/Task/GrabVillageStateTask';
|
||||
import { Action, ActionQueue, ImmutableActionList } from './Queue/ActionQueue';
|
||||
import { ActionQueue } from './Queue/ActionQueue';
|
||||
import { UpdateResourceContractsTask } from './Handler/Task/UpdateResourceContractsTask';
|
||||
import { SendResourcesTask } from './Handler/Task/SendResourcesTask';
|
||||
import { Args } from './Queue/Args';
|
||||
import { ImmutableTaskList, Task, TaskId, uniqTaskId, withTime } from './Queue/TaskProvider';
|
||||
import { VillageRepositoryInterface } from './Village/VillageRepository';
|
||||
import { VillageFactory } from './Village/VillageFactory';
|
||||
import { RunVillageProductionTask } from './Handler/Task/RunVillageProductionTask';
|
||||
import { isProductionTask } from './Handler/TaskMap';
|
||||
import { around } from './Helpers/Random';
|
||||
import { timestamp } from './Helpers/Time';
|
||||
import { Action, ImmutableActionList } from './Queue/Action';
|
||||
import { ImmutableTaskList, Task, withTime } from './Queue/Task';
|
||||
import { TaskId, uniqTaskId } from './Queue/TaskId';
|
||||
|
||||
interface NextExecution {
|
||||
task?: Task;
|
||||
|
@ -4,7 +4,6 @@ import { ResourceStorage } from '../Core/ResourceStorage';
|
||||
import { IncomingMerchant, MerchantsInfo } from '../Core/Market';
|
||||
import { VillageSettings, VillageSettingsDefaults } from '../Core/Village';
|
||||
import { ProductionQueue } from '../Core/ProductionQueue';
|
||||
import { Task, uniqTaskId } from '../Queue/TaskProvider';
|
||||
import {
|
||||
BuildingSlot,
|
||||
BuildingSlotDefaults,
|
||||
@ -12,6 +11,8 @@ import {
|
||||
ResourceSlotDefaults,
|
||||
} from '../Core/Slot';
|
||||
import { getNumber } from '../Helpers/Convert';
|
||||
import { Task } from '../Queue/Task';
|
||||
import { uniqTaskId } from '../Queue/TaskId';
|
||||
|
||||
const RESOURCES_KEY = 'resources';
|
||||
const CAPACITY_KEY = 'capacity';
|
||||
|
@ -1,6 +1,6 @@
|
||||
import { ImmutableTaskList } from './Queue/TaskProvider';
|
||||
import { uniqId } from './Helpers/Identity';
|
||||
import { formatDate } from './Helpers/Format';
|
||||
import { ImmutableTaskList } from './Queue/Task';
|
||||
|
||||
const ID = uniqId();
|
||||
|
||||
|
@ -1,5 +1,4 @@
|
||||
import { VillageTaskCollection } from './VillageTaskCollection';
|
||||
import { isBuildingPlanned, TaskId } from '../Queue/TaskProvider';
|
||||
import { Args } from '../Queue/Args';
|
||||
import { TaskState, VillageState } from './VillageState';
|
||||
import { Resources } from '../Core/Resources';
|
||||
@ -10,6 +9,8 @@ import { ResourceType } from '../Core/ResourceType';
|
||||
import { UpgradeBuildingTask } from '../Handler/Task/UpgradeBuildingTask';
|
||||
import { GARNER_ID, WAREHOUSE_ID } from '../Core/Buildings';
|
||||
import { first } from '../Helpers/Collection';
|
||||
import { isBuildingPlanned } from '../Queue/Task';
|
||||
import { TaskId } from '../Queue/TaskId';
|
||||
|
||||
export class VillageController {
|
||||
private readonly villageId: number;
|
||||
|
@ -5,11 +5,12 @@ import { calcGatheringTimings, GatheringTime } from '../Core/GatheringTimings';
|
||||
import { VillageRepositoryInterface } from './VillageRepository';
|
||||
import { VillageNotFound } from '../Errors';
|
||||
import { OrderedProductionQueues, ProductionQueue } from '../Core/ProductionQueue';
|
||||
import { isInQueue, TaskCore, TaskId } from '../Queue/TaskProvider';
|
||||
import { VillageTaskCollection } from './VillageTaskCollection';
|
||||
import { TrainTroopTask } from '../Handler/Task/TrainTroopTask';
|
||||
import { Args } from '../Queue/Args';
|
||||
import { timestamp } from '../Helpers/Time';
|
||||
import { isInQueue, TaskCore } from '../Queue/Task';
|
||||
import { TaskId } from '../Queue/TaskId';
|
||||
|
||||
export interface TaskState {
|
||||
id: TaskId;
|
||||
|
@ -1,5 +1,4 @@
|
||||
import { VillageStorage } from '../Storage/VillageStorage';
|
||||
import { Task, TaskId, uniqTaskId, withResources, withTime } from '../Queue/TaskProvider';
|
||||
import { Args } from '../Queue/Args';
|
||||
import { Resources } from '../Core/Resources';
|
||||
import { ContractAttributes, ContractType } from '../Core/Contract';
|
||||
@ -7,6 +6,8 @@ import { UpgradeBuildingTask } from '../Handler/Task/UpgradeBuildingTask';
|
||||
import { ForgeImprovementTask } from '../Handler/Task/ForgeImprovementTask';
|
||||
import { isProductionTask } from '../Handler/TaskMap';
|
||||
import { timestamp } from '../Helpers/Time';
|
||||
import { Task, withResources, withTime } from '../Queue/Task';
|
||||
import { TaskId, uniqTaskId } from '../Queue/TaskId';
|
||||
|
||||
export class VillageTaskCollection {
|
||||
private readonly storage: VillageStorage;
|
||||
|
@ -1,10 +1,10 @@
|
||||
import { it, describe } from 'mocha';
|
||||
import { expect } from 'chai';
|
||||
|
||||
import { Task } from '../../src/Queue/TaskProvider';
|
||||
import { TaskQueue } from '../../src/Queue/TaskQueue';
|
||||
import { NullLogger } from '../../src/Logger';
|
||||
import { ArrayTaskProvider } from '../../src/Queue/ArrayTaskProvider';
|
||||
import { ArrayTaskProvider } from '../../src/Queue/TaskProvider/ArrayTaskProvider';
|
||||
import { Task } from '../../src/Queue/Task';
|
||||
|
||||
describe('Task Queue', function() {
|
||||
it('Can get task from queue', function() {
|
||||
|
Loading…
Reference in New Issue
Block a user