'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; }