Divide task components

This commit is contained in:
Anton Vakhrushev 2020-07-18 18:13:32 +03:00
parent a74a26896c
commit ad64905888
48 changed files with 94 additions and 81 deletions

View File

@ -4,7 +4,7 @@ import { AggregateLogger, ConsoleLogger, LogLevel, StorageLogger } from './Logge
import { ActionQueue } from './Queue/ActionQueue'; import { ActionQueue } from './Queue/ActionQueue';
import { Executor } from './Executor'; import { Executor } from './Executor';
import { ControlPanel } from './ControlPanel'; import { ControlPanel } from './ControlPanel';
import { DataStorageTaskProvider } from './Queue/DataStorageTaskProvider'; import { DataStorageTaskProvider } from './Queue/TaskProvider/DataStorageTaskProvider';
import { Statistics } from './Statistics'; import { Statistics } from './Statistics';
import { VillageRepository } from './Village/VillageRepository'; import { VillageRepository } from './Village/VillageRepository';
import { VillageFactory } from './Village/VillageFactory'; import { VillageFactory } from './Village/VillageFactory';

View File

@ -17,12 +17,12 @@ import { DataStorage } from './Storage/DataStorage';
import { getBuildingPageAttributes, isBuildingPage } from './Page/PageDetector'; import { getBuildingPageAttributes, isBuildingPage } from './Page/PageDetector';
import { ExecutionStorage } from './Storage/ExecutionStorage'; import { ExecutionStorage } from './Storage/ExecutionStorage';
import { VillageState } from './Village/VillageState'; import { VillageState } from './Village/VillageState';
import { Task } from './Queue/TaskProvider';
import { Action } from './Queue/ActionQueue';
import { VillageFactory } from './Village/VillageFactory'; import { VillageFactory } from './Village/VillageFactory';
import { uniqId } from './Helpers/Identity'; import { uniqId } from './Helpers/Identity';
import { timestamp } from './Helpers/Time'; import { timestamp } from './Helpers/Time';
import { notify, parseLocation, waitForLoad } from './Helpers/Browser'; import { notify, parseLocation, waitForLoad } from './Helpers/Browser';
import { Action } from './Queue/Action';
import { Task } from './Queue/Task';
Vue.use(Vuex); Vue.use(Vuex);

View File

@ -12,13 +12,13 @@ import { GrabberManager } from './Grabber/GrabberManager';
import { Scheduler } from './Scheduler'; import { Scheduler } from './Scheduler';
import { Statistics } from './Statistics'; import { Statistics } from './Statistics';
import { ExecutionStorage } from './Storage/ExecutionStorage'; import { ExecutionStorage } from './Storage/ExecutionStorage';
import { Action } from './Queue/ActionQueue';
import { Task } from './Queue/TaskProvider';
import { createTaskHandler } from './Handler/TaskMap'; import { createTaskHandler } from './Handler/TaskMap';
import { VillageFactory } from './Village/VillageFactory'; import { VillageFactory } from './Village/VillageFactory';
import { sleepMicro, timestamp } from './Helpers/Time'; import { sleepMicro, timestamp } from './Helpers/Time';
import { markPage, waitForLoad } from './Helpers/Browser'; import { markPage, waitForLoad } from './Helpers/Browser';
import { createActionHandler } from './Handler/ActionMap'; import { createActionHandler } from './Handler/ActionMap';
import { Action } from './Queue/Action';
import { Task } from './Queue/Task';
export interface ExecutionSettings { export interface ExecutionSettings {
pauseTs: number; pauseTs: number;

View File

@ -5,8 +5,8 @@ import { HeroStorage } from '../../Storage/HeroStorage';
import { calcHeroResource } from '../../Core/HeroBalance'; import { calcHeroResource } from '../../Core/HeroBalance';
import { HeroAllResources } from '../../Core/Hero'; import { HeroAllResources } from '../../Core/Hero';
import { Args } from '../../Queue/Args'; import { Args } from '../../Queue/Args';
import { Task } from '../../Queue/TaskProvider';
import { registerAction } from '../ActionMap'; import { registerAction } from '../ActionMap';
import { Task } from '../../Queue/Task';
@registerAction @registerAction
export class BalanceHeroResourcesAction extends BaseAction { export class BalanceHeroResourcesAction extends BaseAction {

View File

@ -2,9 +2,9 @@ import { Scheduler } from '../../Scheduler';
import { taskError, TryLaterError } from '../../Errors'; import { taskError, TryLaterError } from '../../Errors';
import { grabActiveVillageId } from '../../Page/VillageBlock'; import { grabActiveVillageId } from '../../Page/VillageBlock';
import { Args } from '../../Queue/Args'; import { Args } from '../../Queue/Args';
import { Task } from '../../Queue/TaskProvider';
import { VillageFactory } from '../../Village/VillageFactory'; import { VillageFactory } from '../../Village/VillageFactory';
import { aroundMinutes } from '../../Helpers/Time'; import { aroundMinutes } from '../../Helpers/Time';
import { Task } from '../../Queue/Task';
export class BaseAction { export class BaseAction {
protected readonly scheduler: Scheduler; protected readonly scheduler: Scheduler;

View File

@ -2,9 +2,9 @@ import { BaseAction } from './BaseAction';
import { GrabError, taskError, TryLaterError } from '../../Errors'; import { GrabError, taskError, TryLaterError } from '../../Errors';
import { clickBuildButton } from '../../Page/BuildingPage/BuildingPage'; import { clickBuildButton } from '../../Page/BuildingPage/BuildingPage';
import { Args } from '../../Queue/Args'; import { Args } from '../../Queue/Args';
import { Task } from '../../Queue/TaskProvider';
import { aroundMinutes } from '../../Helpers/Time'; import { aroundMinutes } from '../../Helpers/Time';
import { registerAction } from '../ActionMap'; import { registerAction } from '../ActionMap';
import { Task } from '../../Queue/Task';
@registerAction @registerAction
export class BuildBuildingAction extends BaseAction { export class BuildBuildingAction extends BaseAction {

View File

@ -1,10 +1,10 @@
import { BaseAction } from './BaseAction'; import { BaseAction } from './BaseAction';
import { GrabError, TryLaterError } from '../../Errors'; import { GrabError, TryLaterError } from '../../Errors';
import { Args } from '../../Queue/Args'; import { Args } from '../../Queue/Args';
import { Task } from '../../Queue/TaskProvider';
import { clickCelebrationButton } from '../../Page/BuildingPage/GuildHallPage'; import { clickCelebrationButton } from '../../Page/BuildingPage/GuildHallPage';
import { aroundMinutes } from '../../Helpers/Time'; import { aroundMinutes } from '../../Helpers/Time';
import { registerAction } from '../ActionMap'; import { registerAction } from '../ActionMap';
import { Task } from '../../Queue/Task';
@registerAction @registerAction
export class CelebrationAction extends BaseAction { export class CelebrationAction extends BaseAction {

View File

@ -2,9 +2,9 @@ import { BaseAction } from './BaseAction';
import { GrabError, TryLaterError } from '../../Errors'; import { GrabError, TryLaterError } from '../../Errors';
import { grabBuildingQueueInfo } from '../../Page/VillageBlock'; import { grabBuildingQueueInfo } from '../../Page/VillageBlock';
import { Args } from '../../Queue/Args'; import { Args } from '../../Queue/Args';
import { Task } from '../../Queue/TaskProvider';
import { BuildingQueueInfo } from '../../Core/BuildingQueueInfo'; import { BuildingQueueInfo } from '../../Core/BuildingQueueInfo';
import { registerAction } from '../ActionMap'; import { registerAction } from '../ActionMap';
import { Task } from '../../Queue/Task';
@registerAction @registerAction
export class CheckBuildingRemainingTimeAction extends BaseAction { export class CheckBuildingRemainingTimeAction extends BaseAction {

View File

@ -1,8 +1,8 @@
import { BaseAction } from './BaseAction'; import { BaseAction } from './BaseAction';
import { taskError } from '../../Errors'; import { taskError } from '../../Errors';
import { Args } from '../../Queue/Args'; import { Args } from '../../Queue/Args';
import { Task } from '../../Queue/TaskProvider';
import { registerAction } from '../ActionMap'; import { registerAction } from '../ActionMap';
import { Task } from '../../Queue/Task';
@registerAction @registerAction
export class ClickButtonAction extends BaseAction { export class ClickButtonAction extends BaseAction {

View File

@ -1,7 +1,7 @@
import { BaseAction } from './BaseAction'; import { BaseAction } from './BaseAction';
import { Args } from '../../Queue/Args'; import { Args } from '../../Queue/Args';
import { Task } from '../../Queue/TaskProvider';
import { registerAction } from '../ActionMap'; import { registerAction } from '../ActionMap';
import { Task } from '../../Queue/Task';
@registerAction @registerAction
export class CompleteTaskAction extends BaseAction { export class CompleteTaskAction extends BaseAction {

View File

@ -3,7 +3,6 @@ import { FailTaskError, taskError, TryLaterError } from '../../Errors';
import { Resources } from '../../Core/Resources'; import { Resources } from '../../Core/Resources';
import { Coordinates } from '../../Core/Village'; import { Coordinates } from '../../Core/Village';
import { Args } from '../../Queue/Args'; import { Args } from '../../Queue/Args';
import { Task } from '../../Queue/TaskProvider';
import { clickSendButton, fillSendResourcesForm } from '../../Page/BuildingPage/MarketPage'; import { clickSendButton, fillSendResourcesForm } from '../../Page/BuildingPage/MarketPage';
import { VillageState } from '../../Village/VillageState'; import { VillageState } from '../../Village/VillageState';
import { MerchantsInfo } from '../../Core/Market'; import { MerchantsInfo } from '../../Core/Market';
@ -18,6 +17,7 @@ import { path } from '../../Helpers/Path';
import { MARKET_ID } from '../../Core/Buildings'; import { MARKET_ID } from '../../Core/Buildings';
import { aroundMinutes, timestamp } from '../../Helpers/Time'; import { aroundMinutes, timestamp } from '../../Helpers/Time';
import { registerAction } from '../ActionMap'; import { registerAction } from '../ActionMap';
import { Task } from '../../Queue/Task';
@registerAction @registerAction
export class FindSendResourcesPathAction extends BaseAction { export class FindSendResourcesPathAction extends BaseAction {

View File

@ -1,10 +1,10 @@
import { BaseAction } from './BaseAction'; import { BaseAction } from './BaseAction';
import { GrabError, taskError, TryLaterError } from '../../Errors'; import { GrabError, taskError, TryLaterError } from '../../Errors';
import { Args } from '../../Queue/Args'; import { Args } from '../../Queue/Args';
import { Task } from '../../Queue/TaskProvider';
import { clickResearchButton } from '../../Page/BuildingPage/ForgePage'; import { clickResearchButton } from '../../Page/BuildingPage/ForgePage';
import { aroundMinutes } from '../../Helpers/Time'; import { aroundMinutes } from '../../Helpers/Time';
import { registerAction } from '../ActionMap'; import { registerAction } from '../ActionMap';
import { Task } from '../../Queue/Task';
@registerAction @registerAction
export class ForgeImprovementAction extends BaseAction { export class ForgeImprovementAction extends BaseAction {

View File

@ -3,9 +3,9 @@ import { grabVillageList } from '../../Page/VillageBlock';
import { grabHeroVillage } from '../../Page/HeroPage'; import { grabHeroVillage } from '../../Page/HeroPage';
import { HeroStorage } from '../../Storage/HeroStorage'; import { HeroStorage } from '../../Storage/HeroStorage';
import { Args } from '../../Queue/Args'; import { Args } from '../../Queue/Args';
import { Task } from '../../Queue/TaskProvider';
import { path } from '../../Helpers/Path'; import { path } from '../../Helpers/Path';
import { registerAction } from '../ActionMap'; import { registerAction } from '../ActionMap';
import { Task } from '../../Queue/Task';
@registerAction @registerAction
export class GoToHeroVillageAction extends BaseAction { export class GoToHeroVillageAction extends BaseAction {

View File

@ -1,8 +1,8 @@
import { BaseAction } from './BaseAction'; import { BaseAction } from './BaseAction';
import { taskError } from '../../Errors'; import { taskError } from '../../Errors';
import { Args } from '../../Queue/Args'; import { Args } from '../../Queue/Args';
import { Task } from '../../Queue/TaskProvider';
import { registerAction } from '../ActionMap'; import { registerAction } from '../ActionMap';
import { Task } from '../../Queue/Task';
@registerAction @registerAction
export class GoToPageAction extends BaseAction { export class GoToPageAction extends BaseAction {

View File

@ -1,9 +1,9 @@
import { BaseAction } from './BaseAction'; import { BaseAction } from './BaseAction';
import { AbortTaskError } from '../../Errors'; import { AbortTaskError } from '../../Errors';
import { Args } from '../../Queue/Args'; import { Args } from '../../Queue/Args';
import { Task } from '../../Queue/TaskProvider';
import { trimPrefix } from '../../Helpers/Convert'; import { trimPrefix } from '../../Helpers/Convert';
import { registerAction } from '../ActionMap'; import { registerAction } from '../ActionMap';
import { Task } from '../../Queue/Task';
const CONFIG = [ const CONFIG = [
{ level: 0, health: 60 }, { level: 0, health: 60 },

View File

@ -1,12 +1,12 @@
import { BaseAction } from './BaseAction'; import { BaseAction } from './BaseAction';
import { Args } from '../../Queue/Args'; import { Args } from '../../Queue/Args';
import { Task } from '../../Queue/TaskProvider';
import { clickSendButton, fillSendResourcesForm } from '../../Page/BuildingPage/MarketPage'; import { clickSendButton, fillSendResourcesForm } from '../../Page/BuildingPage/MarketPage';
import { ResourceTransferCalculator } from '../../Village/ResourceTransfer'; import { ResourceTransferCalculator } from '../../Village/ResourceTransfer';
import { ResourceTransferStorage } from '../../Storage/ResourceTransferStorage'; import { ResourceTransferStorage } from '../../Storage/ResourceTransferStorage';
import { Resources } from '../../Core/Resources'; import { Resources } from '../../Core/Resources';
import { AbortTaskError } from '../../Errors'; import { AbortTaskError } from '../../Errors';
import { registerAction } from '../ActionMap'; import { registerAction } from '../ActionMap';
import { Task } from '../../Queue/Task';
@registerAction @registerAction
export class SendResourcesAction extends BaseAction { export class SendResourcesAction extends BaseAction {

View File

@ -1,7 +1,6 @@
import { BaseAction } from './BaseAction'; import { BaseAction } from './BaseAction';
import { taskError, TryLaterError } from '../../Errors'; import { taskError, TryLaterError } from '../../Errors';
import { Args } from '../../Queue/Args'; import { Args } from '../../Queue/Args';
import { Task } from '../../Queue/TaskProvider';
import { import {
clickTrainButton, clickTrainButton,
fillTrainCount, fillTrainCount,
@ -12,6 +11,7 @@ import { Resources } from '../../Core/Resources';
import { randomInRange } from '../../Helpers/Random'; import { randomInRange } from '../../Helpers/Random';
import { aroundMinutes } from '../../Helpers/Time'; import { aroundMinutes } from '../../Helpers/Time';
import { registerAction } from '../ActionMap'; import { registerAction } from '../ActionMap';
import { Task } from '../../Queue/Task';
@registerAction @registerAction
export class TrainTrooperAction extends BaseAction { export class TrainTrooperAction extends BaseAction {

View File

@ -2,9 +2,9 @@ import { BaseAction } from './BaseAction';
import { GrabError, TryLaterError } from '../../Errors'; import { GrabError, TryLaterError } from '../../Errors';
import { clickUpgradeButton } from '../../Page/BuildingPage/BuildingPage'; import { clickUpgradeButton } from '../../Page/BuildingPage/BuildingPage';
import { Args } from '../../Queue/Args'; import { Args } from '../../Queue/Args';
import { Task } from '../../Queue/TaskProvider';
import { aroundMinutes } from '../../Helpers/Time'; import { aroundMinutes } from '../../Helpers/Time';
import { registerAction } from '../ActionMap'; import { registerAction } from '../ActionMap';
import { Task } from '../../Queue/Task';
@registerAction @registerAction
export class UpgradeBuildingAction extends BaseAction { export class UpgradeBuildingAction extends BaseAction {

View File

@ -3,11 +3,11 @@ import { ActionError, taskError, TryLaterError } from '../../Errors';
import { grabResourceSlots } from '../../Page/SlotBlock'; import { grabResourceSlots } from '../../Page/SlotBlock';
import { UpgradeBuildingTask } from '../Task/UpgradeBuildingTask'; import { UpgradeBuildingTask } from '../Task/UpgradeBuildingTask';
import { Args } from '../../Queue/Args'; import { Args } from '../../Queue/Args';
import { Task } from '../../Queue/TaskProvider';
import { ResourceSlot } from '../../Core/Slot'; import { ResourceSlot } from '../../Core/Slot';
import { getNumber } from '../../Helpers/Convert'; import { getNumber } from '../../Helpers/Convert';
import { aroundMinutes } from '../../Helpers/Time'; import { aroundMinutes } from '../../Helpers/Time';
import { registerAction } from '../ActionMap'; import { registerAction } from '../ActionMap';
import { Task } from '../../Queue/Task';
@registerAction @registerAction
export class UpgradeResourceToLevelAction extends BaseAction { export class UpgradeResourceToLevelAction extends BaseAction {

View File

@ -3,9 +3,9 @@ import { GoToPageAction } from '../Action/GoToPageAction';
import { CompleteTaskAction } from '../Action/CompleteTaskAction'; import { CompleteTaskAction } from '../Action/CompleteTaskAction';
import { BalanceHeroResourcesAction } from '../Action/BalanceHeroResourcesAction'; import { BalanceHeroResourcesAction } from '../Action/BalanceHeroResourcesAction';
import { GoToHeroVillageAction } from '../Action/GoToHeroVillageAction'; import { GoToHeroVillageAction } from '../Action/GoToHeroVillageAction';
import { Task } from '../../Queue/TaskProvider';
import { path } from '../../Helpers/Path'; import { path } from '../../Helpers/Path';
import { registerTask } from '../TaskMap'; import { registerTask } from '../TaskMap';
import { Task } from '../../Queue/Task';
@registerTask() @registerTask()
export class BalanceHeroResourcesTask extends BaseTask { export class BalanceHeroResourcesTask extends BaseTask {

View File

@ -1,9 +1,9 @@
import { Scheduler } from '../../Scheduler'; import { Scheduler } from '../../Scheduler';
import { CompleteTaskAction } from '../Action/CompleteTaskAction'; import { CompleteTaskAction } from '../Action/CompleteTaskAction';
import { Action } from '../../Queue/ActionQueue';
import { Args } from '../../Queue/Args'; import { Args } from '../../Queue/Args';
import { Task } from '../../Queue/TaskProvider';
import { VillageFactory } from '../../Village/VillageFactory'; import { VillageFactory } from '../../Village/VillageFactory';
import { Action } from '../../Queue/Action';
import { Task } from '../../Queue/Task';
export interface ActionDefinition { export interface ActionDefinition {
name: string; name: string;

View File

@ -1,12 +1,12 @@
import { BuildBuildingAction } from '../Action/BuildBuildingAction'; import { BuildBuildingAction } from '../Action/BuildBuildingAction';
import { GoToPageAction } from '../Action/GoToPageAction'; import { GoToPageAction } from '../Action/GoToPageAction';
import { ActionDefinition, BaseTask } from './BaseTask'; import { ActionDefinition, BaseTask } from './BaseTask';
import { Task } from '../../Queue/TaskProvider';
import { path } from '../../Helpers/Path'; import { path } from '../../Helpers/Path';
import { registerTask } from '../TaskMap'; import { registerTask } from '../TaskMap';
import { taskError } from '../../Errors'; import { taskError } from '../../Errors';
import { goToResourceViewPage } from '../ActionBundles'; import { goToResourceViewPage } from '../ActionBundles';
import { ProductionQueue } from '../../Core/ProductionQueue'; import { ProductionQueue } from '../../Core/ProductionQueue';
import { Task } from '../../Queue/Task';
@registerTask({ queue: ProductionQueue.Building }) @registerTask({ queue: ProductionQueue.Building })
export class BuildBuildingTask extends BaseTask { export class BuildBuildingTask extends BaseTask {

View File

@ -1,10 +1,10 @@
import { ActionDefinition, BaseTask } from './BaseTask'; import { ActionDefinition, BaseTask } from './BaseTask';
import { GoToPageAction } from '../Action/GoToPageAction'; import { GoToPageAction } from '../Action/GoToPageAction';
import { Task } from '../../Queue/TaskProvider';
import { path } from '../../Helpers/Path'; import { path } from '../../Helpers/Path';
import { CelebrationAction } from '../Action/CelebrationAction'; import { CelebrationAction } from '../Action/CelebrationAction';
import { registerTask } from '../TaskMap'; import { registerTask } from '../TaskMap';
import { ProductionQueue } from '../../Core/ProductionQueue'; import { ProductionQueue } from '../../Core/ProductionQueue';
import { Task } from '../../Queue/Task';
@registerTask({ queue: ProductionQueue.Celebration }) @registerTask({ queue: ProductionQueue.Celebration })
export class CelebrationTask extends BaseTask { export class CelebrationTask extends BaseTask {

View File

@ -1,10 +1,10 @@
import { ActionDefinition, BaseTask } from './BaseTask'; import { ActionDefinition, BaseTask } from './BaseTask';
import { GoToPageAction } from '../Action/GoToPageAction'; import { GoToPageAction } from '../Action/GoToPageAction';
import { Task } from '../../Queue/TaskProvider';
import { ForgeImprovementAction } from '../Action/ForgeImprovementAction'; import { ForgeImprovementAction } from '../Action/ForgeImprovementAction';
import { path } from '../../Helpers/Path'; import { path } from '../../Helpers/Path';
import { registerTask } from '../TaskMap'; import { registerTask } from '../TaskMap';
import { ProductionQueue } from '../../Core/ProductionQueue'; import { ProductionQueue } from '../../Core/ProductionQueue';
import { Task } from '../../Queue/Task';
@registerTask({ queue: ProductionQueue.UpgradeUnit }) @registerTask({ queue: ProductionQueue.UpgradeUnit })
export class ForgeImprovementTask extends BaseTask { export class ForgeImprovementTask extends BaseTask {

View File

@ -1,7 +1,7 @@
import { BaseTask, ActionDefinition } from './BaseTask'; import { BaseTask, ActionDefinition } from './BaseTask';
import { scanAllVillagesBundle } from '../ActionBundles'; import { scanAllVillagesBundle } from '../ActionBundles';
import { Task } from '../../Queue/TaskProvider';
import { registerTask } from '../TaskMap'; import { registerTask } from '../TaskMap';
import { Task } from '../../Queue/Task';
@registerTask() @registerTask()
export class GrabVillageStateTask extends BaseTask { export class GrabVillageStateTask extends BaseTask {

View File

@ -1,9 +1,9 @@
import { BaseTask, ActionDefinition } from './BaseTask'; import { BaseTask, ActionDefinition } from './BaseTask';
import { UpgradeResourceToLevelAction } from '../Action/UpgradeResourceToLevelAction'; import { UpgradeResourceToLevelAction } from '../Action/UpgradeResourceToLevelAction';
import { Task } from '../../Queue/TaskProvider';
import { registerTask } from '../TaskMap'; import { registerTask } from '../TaskMap';
import { goToResourceViewPage } from '../ActionBundles'; import { goToResourceViewPage } from '../ActionBundles';
import { taskError } from '../../Errors'; import { taskError } from '../../Errors';
import { Task } from '../../Queue/Task';
@registerTask() @registerTask()
export class ResourcesToLevelTask extends BaseTask { export class ResourcesToLevelTask extends BaseTask {

View File

@ -1,6 +1,6 @@
import { BaseTask, ActionDefinition } from './BaseTask'; import { BaseTask, ActionDefinition } from './BaseTask';
import { Task } from '../../Queue/TaskProvider';
import { registerTask } from '../TaskMap'; import { registerTask } from '../TaskMap';
import { Task } from '../../Queue/Task';
@registerTask() @registerTask()
export class RunVillageProductionTask extends BaseTask { export class RunVillageProductionTask extends BaseTask {

View File

@ -2,9 +2,9 @@ import { ActionDefinition, BaseTask } from './BaseTask';
import { GoToPageAction } from '../Action/GoToPageAction'; import { GoToPageAction } from '../Action/GoToPageAction';
import { SendOnAdventureAction } from '../Action/SendOnAdventureAction'; import { SendOnAdventureAction } from '../Action/SendOnAdventureAction';
import { ClickButtonAction } from '../Action/ClickButtonAction'; import { ClickButtonAction } from '../Action/ClickButtonAction';
import { Task } from '../../Queue/TaskProvider';
import { path } from '../../Helpers/Path'; import { path } from '../../Helpers/Path';
import { registerTask } from '../TaskMap'; import { registerTask } from '../TaskMap';
import { Task } from '../../Queue/Task';
@registerTask() @registerTask()
export class SendOnAdventureTask extends BaseTask { export class SendOnAdventureTask extends BaseTask {

View File

@ -2,9 +2,9 @@ import { BaseTask, ActionDefinition } from './BaseTask';
import { SendResourcesAction } from '../Action/SendResourcesAction'; import { SendResourcesAction } from '../Action/SendResourcesAction';
import { ClickButtonAction } from '../Action/ClickButtonAction'; import { ClickButtonAction } from '../Action/ClickButtonAction';
import { goToMarketSendResourcesPage, goToResourceViewPage } from '../ActionBundles'; import { goToMarketSendResourcesPage, goToResourceViewPage } from '../ActionBundles';
import { Task } from '../../Queue/TaskProvider';
import { registerTask } from '../TaskMap'; import { registerTask } from '../TaskMap';
import { FindSendResourcesPathAction } from '../Action/FindSendResourcesPathAction'; import { FindSendResourcesPathAction } from '../Action/FindSendResourcesPathAction';
import { Task } from '../../Queue/Task';
@registerTask() @registerTask()
export class SendResourcesTask extends BaseTask { export class SendResourcesTask extends BaseTask {

View File

@ -1,10 +1,10 @@
import { ActionDefinition, BaseTask } from './BaseTask'; import { ActionDefinition, BaseTask } from './BaseTask';
import { GoToPageAction } from '../Action/GoToPageAction'; import { GoToPageAction } from '../Action/GoToPageAction';
import { TrainTrooperAction } from '../Action/TrainTrooperAction'; import { TrainTrooperAction } from '../Action/TrainTrooperAction';
import { Task } from '../../Queue/TaskProvider';
import { path } from '../../Helpers/Path'; import { path } from '../../Helpers/Path';
import { registerTask } from '../TaskMap'; import { registerTask } from '../TaskMap';
import { ProductionQueue } from '../../Core/ProductionQueue'; import { ProductionQueue } from '../../Core/ProductionQueue';
import { Task } from '../../Queue/Task';
@registerTask({ queue: ProductionQueue.TrainUnit }) @registerTask({ queue: ProductionQueue.TrainUnit })
export class TrainTroopTask extends BaseTask { export class TrainTroopTask extends BaseTask {

View File

@ -1,10 +1,10 @@
import { ActionDefinition, BaseTask } from './BaseTask'; import { ActionDefinition, BaseTask } from './BaseTask';
import { GoToPageAction } from '../Action/GoToPageAction'; import { GoToPageAction } from '../Action/GoToPageAction';
import { UpgradeBuildingTask } from './UpgradeBuildingTask'; import { UpgradeBuildingTask } from './UpgradeBuildingTask';
import { ImmutableTaskList, Task } from '../../Queue/TaskProvider';
import { ForgeImprovementTask } from './ForgeImprovementTask'; import { ForgeImprovementTask } from './ForgeImprovementTask';
import { path, PathList, uniqPaths } from '../../Helpers/Path'; import { path, PathList, uniqPaths } from '../../Helpers/Path';
import { registerTask } from '../TaskMap'; import { registerTask } from '../TaskMap';
import { ImmutableTaskList, Task } from '../../Queue/Task';
@registerTask() @registerTask()
export class UpdateResourceContractsTask extends BaseTask { export class UpdateResourceContractsTask extends BaseTask {

View File

@ -1,12 +1,12 @@
import { UpgradeBuildingAction } from '../Action/UpgradeBuildingAction'; import { UpgradeBuildingAction } from '../Action/UpgradeBuildingAction';
import { BaseTask, ActionDefinition } from './BaseTask'; import { BaseTask, ActionDefinition } from './BaseTask';
import { GoToPageAction } from '../Action/GoToPageAction'; import { GoToPageAction } from '../Action/GoToPageAction';
import { Task } from '../../Queue/TaskProvider';
import { path } from '../../Helpers/Path'; import { path } from '../../Helpers/Path';
import { registerTask } from '../TaskMap'; import { registerTask } from '../TaskMap';
import { goToResourceViewPage } from '../ActionBundles'; import { goToResourceViewPage } from '../ActionBundles';
import { taskError } from '../../Errors'; import { taskError } from '../../Errors';
import { ProductionQueue } from '../../Core/ProductionQueue'; import { ProductionQueue } from '../../Core/ProductionQueue';
import { Task } from '../../Queue/Task';
@registerTask({ queue: ProductionQueue.Building }) @registerTask({ queue: ProductionQueue.Building })
export class UpgradeBuildingTask extends BaseTask { export class UpgradeBuildingTask extends BaseTask {

9
src/Queue/Action.ts Normal file
View 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>;

View File

@ -1,19 +1,10 @@
import { ConsoleLogger, Logger } from '../Logger'; import { ConsoleLogger, Logger } from '../Logger';
import { DataStorage } from '../Storage/DataStorage'; import { DataStorage } from '../Storage/DataStorage';
import { Args } from './Args'; import { Action, ActionList, ImmutableActionList } from './Action';
const NAMESPACE = 'actions.v1'; const NAMESPACE = 'actions.v1';
const QUEUE_NAME = 'queue'; const QUEUE_NAME = 'queue';
export interface Action {
name: string;
args: Args;
}
type ActionList = Array<Action>;
export type ImmutableActionList = ReadonlyArray<Action>;
export class ActionQueue { export class ActionQueue {
private storage: DataStorage; private storage: DataStorage;
private readonly logger: Logger; private readonly logger: Logger;

View File

@ -1,6 +1,6 @@
import { ResourcesInterface } from '../Core/Resources'; import { ResourcesInterface } from '../Core/Resources';
import { CoordinatesInterface } from '../Core/Village'; import { CoordinatesInterface } from '../Core/Village';
import { TaskId } from './TaskProvider'; import { TaskId } from './TaskId';
export interface Args { export interface Args {
taskId?: TaskId; taskId?: TaskId;

View File

@ -2,23 +2,7 @@ import { Args } from './Args';
import { ResourcesInterface } from '../Core/Resources'; import { ResourcesInterface } from '../Core/Resources';
import { ProductionQueue } from '../Core/ProductionQueue'; import { ProductionQueue } from '../Core/ProductionQueue';
import { getProductionQueue } from '../Handler/TaskMap'; import { getProductionQueue } from '../Handler/TaskMap';
import { uniqId } from '../Helpers/Identity'; import { TaskId } from './TaskId';
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('');
}
export interface TaskCore { export interface TaskCore {
readonly id: TaskId; readonly id: TaskId;
@ -43,11 +27,6 @@ export class Task implements TaskCore {
export type TaskList = Array<Task>; export type TaskList = Array<Task>;
export type ImmutableTaskList = ReadonlyArray<Task>; export type ImmutableTaskList = ReadonlyArray<Task>;
export interface TaskProvider {
getTasks(): TaskList;
setTasks(tasks: TaskList): void;
}
export interface TaskMatcher { export interface TaskMatcher {
(task: TaskCore): boolean; (task: TaskCore): boolean;
} }

17
src/Queue/TaskId.ts Normal file
View 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('');
}

View File

@ -1,4 +1,5 @@
import { TaskList, TaskProvider } from './TaskProvider'; import { TaskProvider } from './TaskProvider';
import { TaskList } from '../Task';
export class ArrayTaskProvider implements TaskProvider { export class ArrayTaskProvider implements TaskProvider {
private tasks: TaskList; private tasks: TaskList;

View File

@ -1,5 +1,7 @@
import { DataStorage } from '../Storage/DataStorage'; import { DataStorage } from '../../Storage/DataStorage';
import { Task, TaskList, TaskProvider, uniqTaskId } from './TaskProvider'; import { TaskProvider } from './TaskProvider';
import { Task, TaskList } from '../Task';
import { uniqTaskId } from '../TaskId';
const QUEUE_NAME = 'queue'; const QUEUE_NAME = 'queue';

View File

@ -0,0 +1,6 @@
import { TaskList } from '../Task';
export interface TaskProvider {
getTasks(): TaskList;
setTasks(tasks: TaskList): void;
}

View File

@ -1,5 +1,7 @@
import { Logger } from '../Logger'; 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 { export class TaskQueue {
private provider: TaskProvider; private provider: TaskProvider;

View File

@ -2,17 +2,19 @@ import { TaskQueue } from './Queue/TaskQueue';
import { BalanceHeroResourcesTask } from './Handler/Task/BalanceHeroResourcesTask'; import { BalanceHeroResourcesTask } from './Handler/Task/BalanceHeroResourcesTask';
import { Logger } from './Logger'; import { Logger } from './Logger';
import { GrabVillageStateTask } from './Handler/Task/GrabVillageStateTask'; 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 { UpdateResourceContractsTask } from './Handler/Task/UpdateResourceContractsTask';
import { SendResourcesTask } from './Handler/Task/SendResourcesTask'; import { SendResourcesTask } from './Handler/Task/SendResourcesTask';
import { Args } from './Queue/Args'; import { Args } from './Queue/Args';
import { ImmutableTaskList, Task, TaskId, uniqTaskId, withTime } from './Queue/TaskProvider';
import { VillageRepositoryInterface } from './Village/VillageRepository'; import { VillageRepositoryInterface } from './Village/VillageRepository';
import { VillageFactory } from './Village/VillageFactory'; import { VillageFactory } from './Village/VillageFactory';
import { RunVillageProductionTask } from './Handler/Task/RunVillageProductionTask'; import { RunVillageProductionTask } from './Handler/Task/RunVillageProductionTask';
import { isProductionTask } from './Handler/TaskMap'; import { isProductionTask } from './Handler/TaskMap';
import { around } from './Helpers/Random'; import { around } from './Helpers/Random';
import { timestamp } from './Helpers/Time'; 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 { interface NextExecution {
task?: Task; task?: Task;

View File

@ -4,7 +4,6 @@ import { ResourceStorage } from '../Core/ResourceStorage';
import { IncomingMerchant, MerchantsInfo } from '../Core/Market'; import { IncomingMerchant, MerchantsInfo } from '../Core/Market';
import { VillageSettings, VillageSettingsDefaults } from '../Core/Village'; import { VillageSettings, VillageSettingsDefaults } from '../Core/Village';
import { ProductionQueue } from '../Core/ProductionQueue'; import { ProductionQueue } from '../Core/ProductionQueue';
import { Task, uniqTaskId } from '../Queue/TaskProvider';
import { import {
BuildingSlot, BuildingSlot,
BuildingSlotDefaults, BuildingSlotDefaults,
@ -12,6 +11,8 @@ import {
ResourceSlotDefaults, ResourceSlotDefaults,
} from '../Core/Slot'; } from '../Core/Slot';
import { getNumber } from '../Helpers/Convert'; import { getNumber } from '../Helpers/Convert';
import { Task } from '../Queue/Task';
import { uniqTaskId } from '../Queue/TaskId';
const RESOURCES_KEY = 'resources'; const RESOURCES_KEY = 'resources';
const CAPACITY_KEY = 'capacity'; const CAPACITY_KEY = 'capacity';

View File

@ -1,6 +1,6 @@
import { ImmutableTaskList } from './Queue/TaskProvider';
import { uniqId } from './Helpers/Identity'; import { uniqId } from './Helpers/Identity';
import { formatDate } from './Helpers/Format'; import { formatDate } from './Helpers/Format';
import { ImmutableTaskList } from './Queue/Task';
const ID = uniqId(); const ID = uniqId();

View File

@ -1,5 +1,4 @@
import { VillageTaskCollection } from './VillageTaskCollection'; import { VillageTaskCollection } from './VillageTaskCollection';
import { isBuildingPlanned, TaskId } from '../Queue/TaskProvider';
import { Args } from '../Queue/Args'; import { Args } from '../Queue/Args';
import { TaskState, VillageState } from './VillageState'; import { TaskState, VillageState } from './VillageState';
import { Resources } from '../Core/Resources'; import { Resources } from '../Core/Resources';
@ -10,6 +9,8 @@ import { ResourceType } from '../Core/ResourceType';
import { UpgradeBuildingTask } from '../Handler/Task/UpgradeBuildingTask'; import { UpgradeBuildingTask } from '../Handler/Task/UpgradeBuildingTask';
import { GARNER_ID, WAREHOUSE_ID } from '../Core/Buildings'; import { GARNER_ID, WAREHOUSE_ID } from '../Core/Buildings';
import { first } from '../Helpers/Collection'; import { first } from '../Helpers/Collection';
import { isBuildingPlanned } from '../Queue/Task';
import { TaskId } from '../Queue/TaskId';
export class VillageController { export class VillageController {
private readonly villageId: number; private readonly villageId: number;

View File

@ -5,11 +5,12 @@ import { calcGatheringTimings, GatheringTime } from '../Core/GatheringTimings';
import { VillageRepositoryInterface } from './VillageRepository'; import { VillageRepositoryInterface } from './VillageRepository';
import { VillageNotFound } from '../Errors'; import { VillageNotFound } from '../Errors';
import { OrderedProductionQueues, ProductionQueue } from '../Core/ProductionQueue'; import { OrderedProductionQueues, ProductionQueue } from '../Core/ProductionQueue';
import { isInQueue, TaskCore, TaskId } from '../Queue/TaskProvider';
import { VillageTaskCollection } from './VillageTaskCollection'; import { VillageTaskCollection } from './VillageTaskCollection';
import { TrainTroopTask } from '../Handler/Task/TrainTroopTask'; import { TrainTroopTask } from '../Handler/Task/TrainTroopTask';
import { Args } from '../Queue/Args'; import { Args } from '../Queue/Args';
import { timestamp } from '../Helpers/Time'; import { timestamp } from '../Helpers/Time';
import { isInQueue, TaskCore } from '../Queue/Task';
import { TaskId } from '../Queue/TaskId';
export interface TaskState { export interface TaskState {
id: TaskId; id: TaskId;

View File

@ -1,5 +1,4 @@
import { VillageStorage } from '../Storage/VillageStorage'; import { VillageStorage } from '../Storage/VillageStorage';
import { Task, TaskId, uniqTaskId, withResources, withTime } from '../Queue/TaskProvider';
import { Args } from '../Queue/Args'; import { Args } from '../Queue/Args';
import { Resources } from '../Core/Resources'; import { Resources } from '../Core/Resources';
import { ContractAttributes, ContractType } from '../Core/Contract'; import { ContractAttributes, ContractType } from '../Core/Contract';
@ -7,6 +6,8 @@ import { UpgradeBuildingTask } from '../Handler/Task/UpgradeBuildingTask';
import { ForgeImprovementTask } from '../Handler/Task/ForgeImprovementTask'; import { ForgeImprovementTask } from '../Handler/Task/ForgeImprovementTask';
import { isProductionTask } from '../Handler/TaskMap'; import { isProductionTask } from '../Handler/TaskMap';
import { timestamp } from '../Helpers/Time'; import { timestamp } from '../Helpers/Time';
import { Task, withResources, withTime } from '../Queue/Task';
import { TaskId, uniqTaskId } from '../Queue/TaskId';
export class VillageTaskCollection { export class VillageTaskCollection {
private readonly storage: VillageStorage; private readonly storage: VillageStorage;

View File

@ -1,10 +1,10 @@
import { it, describe } from 'mocha'; import { it, describe } from 'mocha';
import { expect } from 'chai'; import { expect } from 'chai';
import { Task } from '../../src/Queue/TaskProvider';
import { TaskQueue } from '../../src/Queue/TaskQueue'; import { TaskQueue } from '../../src/Queue/TaskQueue';
import { NullLogger } from '../../src/Logger'; 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() { describe('Task Queue', function() {
it('Can get task from queue', function() { it('Can get task from queue', function() {