Add state grabbers
This commit is contained in:
		| @@ -1,16 +1,12 @@ | |||||||
| import { ActionController, registerAction } from './ActionController'; | import { ActionController, registerAction } from './ActionController'; | ||||||
| import { Args } from '../Common'; | import { Args } from '../Common'; | ||||||
| import { Task } from '../Storage/TaskQueue'; | import { Task } from '../Storage/TaskQueue'; | ||||||
| import { grabResources } from '../Page/ResourcesBlock'; | import { StateGrabberManager } from '../State/StateGrabberManager'; | ||||||
| import { grabActiveVillageId } from '../Page/VillageBlock'; |  | ||||||
| import { VillageState } from '../Storage/VillageState'; |  | ||||||
|  |  | ||||||
| @registerAction | @registerAction | ||||||
| export class StoreVillageState extends ActionController { | export class StoreVillageState extends ActionController { | ||||||
|     async run(args: Args, task: Task): Promise<any> { |     async run(args: Args, task: Task): Promise<any> { | ||||||
|         const villageId = grabActiveVillageId(); |         const manager = new StateGrabberManager(); | ||||||
|         const resources = grabResources(); |         manager.grab(); | ||||||
|         const state = new VillageState(villageId); |  | ||||||
|         state.storeResources(resources); |  | ||||||
|     } |     } | ||||||
| } | } | ||||||
|   | |||||||
| @@ -1,5 +1,5 @@ | |||||||
| import * as URLParse from 'url-parse'; | import * as URLParse from 'url-parse'; | ||||||
| import { getNumber, toNumber, uniqId, waitForLoad } from '../utils'; | import { getNumber, uniqId, waitForLoad } from '../utils'; | ||||||
| import { Scheduler } from '../Scheduler'; | import { Scheduler } from '../Scheduler'; | ||||||
| import { BuildPage } from '../Page/BuildPage'; | import { BuildPage } from '../Page/BuildPage'; | ||||||
| import { UpgradeBuildingTask } from '../Task/UpgradeBuildingTask'; | import { UpgradeBuildingTask } from '../Task/UpgradeBuildingTask'; | ||||||
| @@ -15,7 +15,8 @@ import DashboardApp from './Components/DashboardApp.vue'; | |||||||
| import { ResourcesToLevel } from '../Task/ResourcesToLevel'; | import { ResourcesToLevel } from '../Task/ResourcesToLevel'; | ||||||
| import { Logger } from '../Logger'; | import { Logger } from '../Logger'; | ||||||
| import { Resources } from '../Game'; | import { Resources } from '../Game'; | ||||||
| import { VillageState } from '../Storage/VillageState'; | import { VillageState } from '../State/VillageState'; | ||||||
|  | import { StateGrabberManager } from '../State/StateGrabberManager'; | ||||||
|  |  | ||||||
| interface QuickAction { | interface QuickAction { | ||||||
|     label: string; |     label: string; | ||||||
| @@ -26,10 +27,12 @@ export class Dashboard { | |||||||
|     private readonly version: string; |     private readonly version: string; | ||||||
|     private scheduler: Scheduler; |     private scheduler: Scheduler; | ||||||
|     private readonly logger; |     private readonly logger; | ||||||
|  |     private grabbers: StateGrabberManager; | ||||||
|  |  | ||||||
|     constructor(version: string, scheduler: Scheduler) { |     constructor(version: string, scheduler: Scheduler) { | ||||||
|         this.version = version; |         this.version = version; | ||||||
|         this.scheduler = scheduler; |         this.scheduler = scheduler; | ||||||
|  |         this.grabbers = new StateGrabberManager(); | ||||||
|         this.logger = new Logger(this.constructor.name); |         this.logger = new Logger(this.constructor.name); | ||||||
|     } |     } | ||||||
|  |  | ||||||
| @@ -41,6 +44,8 @@ export class Dashboard { | |||||||
|  |  | ||||||
|         const villageId = grabActiveVillageId(); |         const villageId = grabActiveVillageId(); | ||||||
|  |  | ||||||
|  |         this.grabbers.grab(); | ||||||
|  |  | ||||||
|         const scheduler = this.scheduler; |         const scheduler = this.scheduler; | ||||||
|         const quickActions: QuickAction[] = []; |         const quickActions: QuickAction[] = []; | ||||||
|  |  | ||||||
|   | |||||||
| @@ -12,17 +12,20 @@ import { BalanceHeroResourcesTask } from './Task/BalanceHeroResourcesTask'; | |||||||
| import { Logger } from './Logger'; | import { Logger } from './Logger'; | ||||||
| import { BuildBuildingTask } from './Task/BuildBuildingTask'; | import { BuildBuildingTask } from './Task/BuildBuildingTask'; | ||||||
| import { GrabVillageState } from './Task/GrabVillageState'; | import { GrabVillageState } from './Task/GrabVillageState'; | ||||||
|  | import { StateGrabberManager } from './State/StateGrabberManager'; | ||||||
|  |  | ||||||
| export class Scheduler { | export class Scheduler { | ||||||
|     private readonly version: string; |     private readonly version: string; | ||||||
|     private taskQueue: TaskQueue; |     private taskQueue: TaskQueue; | ||||||
|     private actionQueue: ActionQueue; |     private actionQueue: ActionQueue; | ||||||
|  |     private grabbers: StateGrabberManager; | ||||||
|     private logger: Logger; |     private logger: Logger; | ||||||
|  |  | ||||||
|     constructor(version: string) { |     constructor(version: string) { | ||||||
|         this.version = version; |         this.version = version; | ||||||
|         this.taskQueue = new TaskQueue(); |         this.taskQueue = new TaskQueue(); | ||||||
|         this.actionQueue = new ActionQueue(); |         this.actionQueue = new ActionQueue(); | ||||||
|  |         this.grabbers = new StateGrabberManager(); | ||||||
|         this.logger = new Logger(this.constructor.name); |         this.logger = new Logger(this.constructor.name); | ||||||
|     } |     } | ||||||
|  |  | ||||||
| @@ -89,6 +92,7 @@ export class Scheduler { | |||||||
|     } |     } | ||||||
|  |  | ||||||
|     private async processActionCommand(cmd: Command, task: Task) { |     private async processActionCommand(cmd: Command, task: Task) { | ||||||
|  |         this.runGrabbers(); | ||||||
|         const actionController = createAction(cmd.name, this); |         const actionController = createAction(cmd.name, this); | ||||||
|         this.logger.log('PROCESS ACTION', cmd.name, actionController); |         this.logger.log('PROCESS ACTION', cmd.name, actionController); | ||||||
|         if (actionController) { |         if (actionController) { | ||||||
| @@ -146,6 +150,15 @@ export class Scheduler { | |||||||
|         throw err; |         throw err; | ||||||
|     } |     } | ||||||
|  |  | ||||||
|  |     private runGrabbers() { | ||||||
|  |         try { | ||||||
|  |             this.logger.log('Rug grabbers'); | ||||||
|  |             this.grabbers.grab(); | ||||||
|  |         } catch (e) { | ||||||
|  |             this.logger.warn('Grabbers fails with', e.message); | ||||||
|  |         } | ||||||
|  |     } | ||||||
|  |  | ||||||
|     getTaskItems(): TaskList { |     getTaskItems(): TaskList { | ||||||
|         return this.taskQueue.seeItems(); |         return this.taskQueue.seeItems(); | ||||||
|     } |     } | ||||||
|   | |||||||
							
								
								
									
										13
									
								
								src/State/ResourceGrabber.ts
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										13
									
								
								src/State/ResourceGrabber.ts
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,13 @@ | |||||||
|  | import { StateGrabber } from './StateGrabber'; | ||||||
|  | import { grabActiveVillageId } from '../Page/VillageBlock'; | ||||||
|  | import { grabResources } from '../Page/ResourcesBlock'; | ||||||
|  | import { VillageState } from './VillageState'; | ||||||
|  |  | ||||||
|  | export class ResourceGrabber extends StateGrabber { | ||||||
|  |     grab(): void { | ||||||
|  |         const villageId = grabActiveVillageId(); | ||||||
|  |         const resources = grabResources(); | ||||||
|  |         const state = new VillageState(villageId); | ||||||
|  |         state.storeResources(resources); | ||||||
|  |     } | ||||||
|  | } | ||||||
							
								
								
									
										3
									
								
								src/State/StateGrabber.ts
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										3
									
								
								src/State/StateGrabber.ts
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,3 @@ | |||||||
|  | export abstract class StateGrabber { | ||||||
|  |     abstract grab(): void; | ||||||
|  | } | ||||||
							
								
								
									
										17
									
								
								src/State/StateGrabberManager.ts
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										17
									
								
								src/State/StateGrabberManager.ts
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,17 @@ | |||||||
|  | import { StateGrabber } from './StateGrabber'; | ||||||
|  | import { ResourceGrabber } from './ResourceGrabber'; | ||||||
|  |  | ||||||
|  | export class StateGrabberManager { | ||||||
|  |     private grabbers: Array<StateGrabber> = []; | ||||||
|  |  | ||||||
|  |     constructor() { | ||||||
|  |         this.grabbers = []; | ||||||
|  |         this.grabbers.push(new ResourceGrabber()); | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     grab() { | ||||||
|  |         for (let grabber of this.grabbers) { | ||||||
|  |             grabber.grab(); | ||||||
|  |         } | ||||||
|  |     } | ||||||
|  | } | ||||||
| @@ -1,4 +1,4 @@ | |||||||
| import { DataStorage } from './DataStorage'; | import { DataStorage } from '../Storage/DataStorage'; | ||||||
| import { Resources } from '../Game'; | import { Resources } from '../Game'; | ||||||
| 
 | 
 | ||||||
| export class VillageState { | export class VillageState { | ||||||
		Reference in New Issue
	
	Block a user