From ad649058888087beffc2c7d30008b14a8a3a33b0 Mon Sep 17 00:00:00 2001 From: Anton Vakhrushev Date: Sat, 18 Jul 2020 18:13:32 +0300 Subject: [PATCH] Divide task components --- src/Container.ts | 2 +- src/ControlPanel.ts | 4 ++-- src/Executor.ts | 4 ++-- .../Action/BalanceHeroResourcesAction.ts | 2 +- src/Handler/Action/BaseAction.ts | 2 +- src/Handler/Action/BuildBuildingAction.ts | 2 +- src/Handler/Action/CelebrationAction.ts | 2 +- .../CheckBuildingRemainingTimeAction.ts | 2 +- src/Handler/Action/ClickButtonAction.ts | 2 +- src/Handler/Action/CompleteTaskAction.ts | 2 +- .../Action/FindSendResourcesPathAction.ts | 2 +- src/Handler/Action/ForgeImprovementAction.ts | 2 +- src/Handler/Action/GoToHeroVillageAction.ts | 2 +- src/Handler/Action/GoToPageAction.ts | 2 +- src/Handler/Action/SendOnAdventureAction.ts | 2 +- src/Handler/Action/SendResourcesAction.ts | 2 +- src/Handler/Action/TrainTrooperAction.ts | 2 +- src/Handler/Action/UpgradeBuildingAction.ts | 2 +- .../Action/UpgradeResourceToLevelAction.ts | 2 +- src/Handler/Task/BalanceHeroResourcesTask.ts | 2 +- src/Handler/Task/BaseTask.ts | 4 ++-- src/Handler/Task/BuildBuildingTask.ts | 2 +- src/Handler/Task/CelebrationTask.ts | 2 +- src/Handler/Task/ForgeImprovementTask.ts | 2 +- src/Handler/Task/GrabVillageStateTask.ts | 2 +- src/Handler/Task/ResourcesToLevelTask.ts | 2 +- src/Handler/Task/RunVillageProductionTask.ts | 2 +- src/Handler/Task/SendOnAdventureTask.ts | 2 +- src/Handler/Task/SendResourcesTask.ts | 2 +- src/Handler/Task/TrainTroopTask.ts | 2 +- .../Task/UpdateResourceContractsTask.ts | 2 +- src/Handler/Task/UpgradeBuildingTask.ts | 2 +- src/Queue/Action.ts | 9 ++++++++ src/Queue/ActionQueue.ts | 11 +-------- src/Queue/Args.ts | 2 +- src/Queue/{TaskProvider.ts => Task.ts} | 23 +------------------ src/Queue/TaskId.ts | 17 ++++++++++++++ .../{ => TaskProvider}/ArrayTaskProvider.ts | 3 ++- .../DataStorageTaskProvider.ts | 6 +++-- src/Queue/TaskProvider/TaskProvider.ts | 6 +++++ src/Queue/TaskQueue.ts | 4 +++- src/Scheduler.ts | 6 +++-- src/Storage/VillageStorage.ts | 3 ++- src/TaskQueueRenderer.ts | 2 +- src/Village/VillageController.ts | 3 ++- src/Village/VillageState.ts | 3 ++- src/Village/VillageTaskCollection.ts | 3 ++- tests/Queue/TaskQueueTest.js.ts | 4 ++-- 48 files changed, 94 insertions(+), 81 deletions(-) create mode 100644 src/Queue/Action.ts rename src/Queue/{TaskProvider.ts => Task.ts} (76%) create mode 100644 src/Queue/TaskId.ts rename src/Queue/{ => TaskProvider}/ArrayTaskProvider.ts (77%) rename src/Queue/{ => TaskProvider}/DataStorageTaskProvider.ts (81%) create mode 100644 src/Queue/TaskProvider/TaskProvider.ts diff --git a/src/Container.ts b/src/Container.ts index 3ae0861..0f19f95 100644 --- a/src/Container.ts +++ b/src/Container.ts @@ -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'; diff --git a/src/ControlPanel.ts b/src/ControlPanel.ts index 0b4efb0..d19c866 100644 --- a/src/ControlPanel.ts +++ b/src/ControlPanel.ts @@ -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); diff --git a/src/Executor.ts b/src/Executor.ts index 69dc24d..3d89d18 100644 --- a/src/Executor.ts +++ b/src/Executor.ts @@ -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; diff --git a/src/Handler/Action/BalanceHeroResourcesAction.ts b/src/Handler/Action/BalanceHeroResourcesAction.ts index 64c74f9..56be608 100644 --- a/src/Handler/Action/BalanceHeroResourcesAction.ts +++ b/src/Handler/Action/BalanceHeroResourcesAction.ts @@ -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 { diff --git a/src/Handler/Action/BaseAction.ts b/src/Handler/Action/BaseAction.ts index 32a8668..a50966a 100644 --- a/src/Handler/Action/BaseAction.ts +++ b/src/Handler/Action/BaseAction.ts @@ -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; diff --git a/src/Handler/Action/BuildBuildingAction.ts b/src/Handler/Action/BuildBuildingAction.ts index fba8b78..89afd56 100644 --- a/src/Handler/Action/BuildBuildingAction.ts +++ b/src/Handler/Action/BuildBuildingAction.ts @@ -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 { diff --git a/src/Handler/Action/CelebrationAction.ts b/src/Handler/Action/CelebrationAction.ts index 99c1dbc..4e1a072 100644 --- a/src/Handler/Action/CelebrationAction.ts +++ b/src/Handler/Action/CelebrationAction.ts @@ -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 { diff --git a/src/Handler/Action/CheckBuildingRemainingTimeAction.ts b/src/Handler/Action/CheckBuildingRemainingTimeAction.ts index 3c18bf1..fd24e74 100644 --- a/src/Handler/Action/CheckBuildingRemainingTimeAction.ts +++ b/src/Handler/Action/CheckBuildingRemainingTimeAction.ts @@ -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 { diff --git a/src/Handler/Action/ClickButtonAction.ts b/src/Handler/Action/ClickButtonAction.ts index 56b6059..adcd99e 100644 --- a/src/Handler/Action/ClickButtonAction.ts +++ b/src/Handler/Action/ClickButtonAction.ts @@ -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 { diff --git a/src/Handler/Action/CompleteTaskAction.ts b/src/Handler/Action/CompleteTaskAction.ts index 1d569f2..ff4c741 100644 --- a/src/Handler/Action/CompleteTaskAction.ts +++ b/src/Handler/Action/CompleteTaskAction.ts @@ -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 { diff --git a/src/Handler/Action/FindSendResourcesPathAction.ts b/src/Handler/Action/FindSendResourcesPathAction.ts index 20dd295..d874fc7 100644 --- a/src/Handler/Action/FindSendResourcesPathAction.ts +++ b/src/Handler/Action/FindSendResourcesPathAction.ts @@ -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 { diff --git a/src/Handler/Action/ForgeImprovementAction.ts b/src/Handler/Action/ForgeImprovementAction.ts index ed4e0de..2ecae18 100644 --- a/src/Handler/Action/ForgeImprovementAction.ts +++ b/src/Handler/Action/ForgeImprovementAction.ts @@ -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 { diff --git a/src/Handler/Action/GoToHeroVillageAction.ts b/src/Handler/Action/GoToHeroVillageAction.ts index e33491c..ac0ebd5 100644 --- a/src/Handler/Action/GoToHeroVillageAction.ts +++ b/src/Handler/Action/GoToHeroVillageAction.ts @@ -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 { diff --git a/src/Handler/Action/GoToPageAction.ts b/src/Handler/Action/GoToPageAction.ts index 35330d4..517b9f6 100644 --- a/src/Handler/Action/GoToPageAction.ts +++ b/src/Handler/Action/GoToPageAction.ts @@ -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 { diff --git a/src/Handler/Action/SendOnAdventureAction.ts b/src/Handler/Action/SendOnAdventureAction.ts index f0961ee..45a75b1 100644 --- a/src/Handler/Action/SendOnAdventureAction.ts +++ b/src/Handler/Action/SendOnAdventureAction.ts @@ -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 }, diff --git a/src/Handler/Action/SendResourcesAction.ts b/src/Handler/Action/SendResourcesAction.ts index daa1cbf..a7de9c4 100644 --- a/src/Handler/Action/SendResourcesAction.ts +++ b/src/Handler/Action/SendResourcesAction.ts @@ -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 { diff --git a/src/Handler/Action/TrainTrooperAction.ts b/src/Handler/Action/TrainTrooperAction.ts index 727f808..1bea489 100644 --- a/src/Handler/Action/TrainTrooperAction.ts +++ b/src/Handler/Action/TrainTrooperAction.ts @@ -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 { diff --git a/src/Handler/Action/UpgradeBuildingAction.ts b/src/Handler/Action/UpgradeBuildingAction.ts index 5e494bc..37e7507 100644 --- a/src/Handler/Action/UpgradeBuildingAction.ts +++ b/src/Handler/Action/UpgradeBuildingAction.ts @@ -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 { diff --git a/src/Handler/Action/UpgradeResourceToLevelAction.ts b/src/Handler/Action/UpgradeResourceToLevelAction.ts index 9a77f76..9ed09f0 100644 --- a/src/Handler/Action/UpgradeResourceToLevelAction.ts +++ b/src/Handler/Action/UpgradeResourceToLevelAction.ts @@ -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 { diff --git a/src/Handler/Task/BalanceHeroResourcesTask.ts b/src/Handler/Task/BalanceHeroResourcesTask.ts index 94a7027..0f94393 100644 --- a/src/Handler/Task/BalanceHeroResourcesTask.ts +++ b/src/Handler/Task/BalanceHeroResourcesTask.ts @@ -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 { diff --git a/src/Handler/Task/BaseTask.ts b/src/Handler/Task/BaseTask.ts index f6c5bc5..8c00b49 100644 --- a/src/Handler/Task/BaseTask.ts +++ b/src/Handler/Task/BaseTask.ts @@ -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; diff --git a/src/Handler/Task/BuildBuildingTask.ts b/src/Handler/Task/BuildBuildingTask.ts index 68758d1..964c0c2 100644 --- a/src/Handler/Task/BuildBuildingTask.ts +++ b/src/Handler/Task/BuildBuildingTask.ts @@ -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 { diff --git a/src/Handler/Task/CelebrationTask.ts b/src/Handler/Task/CelebrationTask.ts index 5199e45..abd15d7 100644 --- a/src/Handler/Task/CelebrationTask.ts +++ b/src/Handler/Task/CelebrationTask.ts @@ -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 { diff --git a/src/Handler/Task/ForgeImprovementTask.ts b/src/Handler/Task/ForgeImprovementTask.ts index 959ba8a..3a1dcdf 100644 --- a/src/Handler/Task/ForgeImprovementTask.ts +++ b/src/Handler/Task/ForgeImprovementTask.ts @@ -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 { diff --git a/src/Handler/Task/GrabVillageStateTask.ts b/src/Handler/Task/GrabVillageStateTask.ts index 083c4c2..e9c0dca 100644 --- a/src/Handler/Task/GrabVillageStateTask.ts +++ b/src/Handler/Task/GrabVillageStateTask.ts @@ -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 { diff --git a/src/Handler/Task/ResourcesToLevelTask.ts b/src/Handler/Task/ResourcesToLevelTask.ts index db272b6..9afe487 100644 --- a/src/Handler/Task/ResourcesToLevelTask.ts +++ b/src/Handler/Task/ResourcesToLevelTask.ts @@ -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 { diff --git a/src/Handler/Task/RunVillageProductionTask.ts b/src/Handler/Task/RunVillageProductionTask.ts index a259a66..07ea421 100644 --- a/src/Handler/Task/RunVillageProductionTask.ts +++ b/src/Handler/Task/RunVillageProductionTask.ts @@ -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 { diff --git a/src/Handler/Task/SendOnAdventureTask.ts b/src/Handler/Task/SendOnAdventureTask.ts index dd8184b..c98e3eb 100644 --- a/src/Handler/Task/SendOnAdventureTask.ts +++ b/src/Handler/Task/SendOnAdventureTask.ts @@ -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 { diff --git a/src/Handler/Task/SendResourcesTask.ts b/src/Handler/Task/SendResourcesTask.ts index 9755862..35f9ca9 100644 --- a/src/Handler/Task/SendResourcesTask.ts +++ b/src/Handler/Task/SendResourcesTask.ts @@ -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 { diff --git a/src/Handler/Task/TrainTroopTask.ts b/src/Handler/Task/TrainTroopTask.ts index 0143c01..370ba9b 100644 --- a/src/Handler/Task/TrainTroopTask.ts +++ b/src/Handler/Task/TrainTroopTask.ts @@ -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 { diff --git a/src/Handler/Task/UpdateResourceContractsTask.ts b/src/Handler/Task/UpdateResourceContractsTask.ts index d64f97a..1f41147 100644 --- a/src/Handler/Task/UpdateResourceContractsTask.ts +++ b/src/Handler/Task/UpdateResourceContractsTask.ts @@ -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 { diff --git a/src/Handler/Task/UpgradeBuildingTask.ts b/src/Handler/Task/UpgradeBuildingTask.ts index 95399a0..6ce6aae 100644 --- a/src/Handler/Task/UpgradeBuildingTask.ts +++ b/src/Handler/Task/UpgradeBuildingTask.ts @@ -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 { diff --git a/src/Queue/Action.ts b/src/Queue/Action.ts new file mode 100644 index 0000000..f9bce27 --- /dev/null +++ b/src/Queue/Action.ts @@ -0,0 +1,9 @@ +import { Args } from './Args'; + +export interface Action { + name: string; + args: Args; +} + +export type ActionList = Array; +export type ImmutableActionList = ReadonlyArray; diff --git a/src/Queue/ActionQueue.ts b/src/Queue/ActionQueue.ts index 4d0710d..aded18a 100644 --- a/src/Queue/ActionQueue.ts +++ b/src/Queue/ActionQueue.ts @@ -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; - -export type ImmutableActionList = ReadonlyArray; - export class ActionQueue { private storage: DataStorage; private readonly logger: Logger; diff --git a/src/Queue/Args.ts b/src/Queue/Args.ts index ae40773..30e3fc5 100644 --- a/src/Queue/Args.ts +++ b/src/Queue/Args.ts @@ -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; diff --git a/src/Queue/TaskProvider.ts b/src/Queue/Task.ts similarity index 76% rename from src/Queue/TaskProvider.ts rename to src/Queue/Task.ts index 1ee1110..076765e 100644 --- a/src/Queue/TaskProvider.ts +++ b/src/Queue/Task.ts @@ -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; export type ImmutableTaskList = ReadonlyArray; -export interface TaskProvider { - getTasks(): TaskList; - setTasks(tasks: TaskList): void; -} - export interface TaskMatcher { (task: TaskCore): boolean; } diff --git a/src/Queue/TaskId.ts b/src/Queue/TaskId.ts new file mode 100644 index 0000000..71572a9 --- /dev/null +++ b/src/Queue/TaskId.ts @@ -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(''); +} diff --git a/src/Queue/ArrayTaskProvider.ts b/src/Queue/TaskProvider/ArrayTaskProvider.ts similarity index 77% rename from src/Queue/ArrayTaskProvider.ts rename to src/Queue/TaskProvider/ArrayTaskProvider.ts index bd36788..732c73a 100644 --- a/src/Queue/ArrayTaskProvider.ts +++ b/src/Queue/TaskProvider/ArrayTaskProvider.ts @@ -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; diff --git a/src/Queue/DataStorageTaskProvider.ts b/src/Queue/TaskProvider/DataStorageTaskProvider.ts similarity index 81% rename from src/Queue/DataStorageTaskProvider.ts rename to src/Queue/TaskProvider/DataStorageTaskProvider.ts index fbf19f2..ac8bcc1 100644 --- a/src/Queue/DataStorageTaskProvider.ts +++ b/src/Queue/TaskProvider/DataStorageTaskProvider.ts @@ -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'; diff --git a/src/Queue/TaskProvider/TaskProvider.ts b/src/Queue/TaskProvider/TaskProvider.ts new file mode 100644 index 0000000..806313b --- /dev/null +++ b/src/Queue/TaskProvider/TaskProvider.ts @@ -0,0 +1,6 @@ +import { TaskList } from '../Task'; + +export interface TaskProvider { + getTasks(): TaskList; + setTasks(tasks: TaskList): void; +} diff --git a/src/Queue/TaskQueue.ts b/src/Queue/TaskQueue.ts index fa09b9d..e613ddf 100644 --- a/src/Queue/TaskQueue.ts +++ b/src/Queue/TaskQueue.ts @@ -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; diff --git a/src/Scheduler.ts b/src/Scheduler.ts index a1f7139..41a49d1 100644 --- a/src/Scheduler.ts +++ b/src/Scheduler.ts @@ -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; diff --git a/src/Storage/VillageStorage.ts b/src/Storage/VillageStorage.ts index 26455ec..7b4e121 100644 --- a/src/Storage/VillageStorage.ts +++ b/src/Storage/VillageStorage.ts @@ -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'; diff --git a/src/TaskQueueRenderer.ts b/src/TaskQueueRenderer.ts index f39d742..bacb9a2 100644 --- a/src/TaskQueueRenderer.ts +++ b/src/TaskQueueRenderer.ts @@ -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(); diff --git a/src/Village/VillageController.ts b/src/Village/VillageController.ts index 2b52856..f56efd7 100644 --- a/src/Village/VillageController.ts +++ b/src/Village/VillageController.ts @@ -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; diff --git a/src/Village/VillageState.ts b/src/Village/VillageState.ts index d9cea06..9a616ed 100644 --- a/src/Village/VillageState.ts +++ b/src/Village/VillageState.ts @@ -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; diff --git a/src/Village/VillageTaskCollection.ts b/src/Village/VillageTaskCollection.ts index 955bb94..bd04139 100644 --- a/src/Village/VillageTaskCollection.ts +++ b/src/Village/VillageTaskCollection.ts @@ -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; diff --git a/tests/Queue/TaskQueueTest.js.ts b/tests/Queue/TaskQueueTest.js.ts index a9948b6..87ec68f 100644 --- a/tests/Queue/TaskQueueTest.js.ts +++ b/tests/Queue/TaskQueueTest.js.ts @@ -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() {