| 
									
										
										
										
											2019-10-17 21:11:35 +02:00
										 |  |  | "use strict"; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | const ws = require('./ws.js'); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // taskId => TaskContext
 | 
					
						
							|  |  |  | const taskContexts = {}; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | class TaskContext { | 
					
						
							|  |  |  |     constructor(taskId, taskType, data) { | 
					
						
							|  |  |  |         this.taskId = taskId; | 
					
						
							|  |  |  |         this.taskType = taskType; | 
					
						
							|  |  |  |         this.data = data; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         // progressCount is meant to represent just some progress - to indicate the task is not stuck
 | 
					
						
							|  |  |  |         this.progressCount = 0; | 
					
						
							|  |  |  |         this.lastSentCountTs = Date.now(); | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     /** @return {TaskContext} */ | 
					
						
							| 
									
										
										
										
											2019-10-18 23:19:16 +02:00
										 |  |  |     static getInstance(taskId, taskType, data) { | 
					
						
							| 
									
										
										
										
											2019-10-17 21:11:35 +02:00
										 |  |  |         if (!taskContexts[taskId]) { | 
					
						
							| 
									
										
										
										
											2019-10-18 23:19:16 +02:00
										 |  |  |             taskContexts[taskId] = new TaskContext(taskId, taskType, data); | 
					
						
							| 
									
										
										
										
											2019-10-17 21:11:35 +02:00
										 |  |  |         } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         return taskContexts[taskId]; | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     async increaseProgressCount() { | 
					
						
							|  |  |  |         this.progressCount++; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         if (Date.now() - this.lastSentCountTs >= 300) { | 
					
						
							|  |  |  |             this.lastSentCountTs = Date.now(); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |             await ws.sendMessageToAllClients({ | 
					
						
							|  |  |  |                 type: 'task-progress-count', | 
					
						
							|  |  |  |                 taskId: this.taskId, | 
					
						
							|  |  |  |                 taskType: this.taskType, | 
					
						
							| 
									
										
										
										
											2019-10-19 09:58:18 +02:00
										 |  |  |                 data: this.data, | 
					
						
							| 
									
										
										
										
											2019-10-17 21:11:35 +02:00
										 |  |  |                 progressCount: this.progressCount | 
					
						
							|  |  |  |             }); | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     async reportError(message) { | 
					
						
							|  |  |  |         await ws.sendMessageToAllClients({ | 
					
						
							|  |  |  |             type: 'task-error', | 
					
						
							|  |  |  |             taskId: this.taskId, | 
					
						
							|  |  |  |             taskType: this.taskType, | 
					
						
							| 
									
										
										
										
											2019-10-19 09:58:18 +02:00
										 |  |  |             data: this.data, | 
					
						
							| 
									
										
										
										
											2019-10-17 21:11:35 +02:00
										 |  |  |             message: message | 
					
						
							|  |  |  |         }); | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-10-19 00:11:07 +02:00
										 |  |  |     async taskSucceeded(result) { | 
					
						
							| 
									
										
										
										
											2019-10-17 21:11:35 +02:00
										 |  |  |         await ws.sendMessageToAllClients({ | 
					
						
							|  |  |  |             type: 'task-succeeded', | 
					
						
							|  |  |  |             taskId: this.taskId, | 
					
						
							|  |  |  |             taskType: this.taskType, | 
					
						
							| 
									
										
										
										
											2019-10-19 09:58:18 +02:00
										 |  |  |             data: this.data, | 
					
						
							| 
									
										
										
										
											2019-10-19 00:11:07 +02:00
										 |  |  |             result: result | 
					
						
							| 
									
										
										
										
											2019-10-17 21:11:35 +02:00
										 |  |  |         }); | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | module.exports = TaskContext; |