|
|
- 'use strict';
-
- if (typeof window === 'undefined') {
- var eve = require('evejs');
- }
-
- function GenericAgent(id, type) {
- // execute super constructor
- eve.Agent.call(this, id);
-
- this.id = id;
- this.rpc = this.loadModule('rpc', this.rpcFunctions);
- this.connect(eve.system.transports.getAll());
- this.type = type;
- this.jobs = new JobManager(this);
- this.timelineDataset = timelineItems;
-
- timelineGroups.add({id:id, content:type + ": " + id, className: 'timelineGroup ' + type});
-
- this.availableSubgroups = [0,1,2,3,4,5,6,7,8,9,10];
- this.freeSubgroups = {};
- for (var i = 0; i < this.availableSubgroups.length; i++) {
- this.freeSubgroups[this.availableSubgroups[i]] = true;
- }
- this.usedSubgroups = {};
- }
-
- // extend the eve.Agent prototype
- GenericAgent.prototype = Object.create(eve.Agent.prototype);
- GenericAgent.prototype.constructor = GenericAgent;
-
- // define RPC functions, preferably in a separated object to clearly distinct
- // exposed functions from local functions.
- GenericAgent.prototype.rpcFunctions = {};
-
- GenericAgent.prototype.allocateSubgroup = function(type) {
- for (var i = 0; i < this.availableSubgroups.length; i++) {
- if (this.freeSubgroups[this.availableSubgroups[i]] == true) {
- this.usedSubgroups[type] = i;
- this.freeSubgroups[this.availableSubgroups[i]] = false;
- break;
- }
- }
- };
-
- GenericAgent.prototype.freeSubgroup = function(type) {
- this.freeSubgroups[this.usedSubgroups[type]] = true;
- delete this.usedSubgroups[type];
- };
-
- GenericAgent.prototype.newAssignment = function(id, type, time, prerequisites) {
- this.allocateSubgroup(type);
- this.jobs.add(id, type, time, prerequisites);
- };
-
- /**
- * @param id
- * @param time
- * @param type
- */
- GenericAgent.prototype.finishAssignment = function(id, type, time) {
- this.jobs.finish(id, type, time);
- };
-
-
- GenericAgent.prototype.updateAssignment = function(id, type, time, operation) {
- this.jobs.update(id, type, time, operation);
- };
-
- GenericAgent.prototype.rpcFunctions.newEvent = function(params) {
- // handle events
- if (params.operation == 'start') {
- this.newAssignment(params.jobId, params.assignment, params.time, params.prerequisites)
- }
- else if (params.operation == 'finish') {
- this.finishAssignment(params.jobId, params.assignment, params.time);
- }
- else if (params.operation == 'pause' || params.operation == 'resume') {
- this.updateAssignment(params.jobId,params.assignment,params.time, params.operation);
- }
- };
-
- if (typeof window === 'undefined') {
- module.exports = GenericAgent;
- }
|