-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathruntime.js
More file actions
60 lines (47 loc) · 1.28 KB
/
runtime.js
File metadata and controls
60 lines (47 loc) · 1.28 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
var EventEmitter = require('events').EventEmitter;
var Switch = require('./switch.js').Switch;
var logger = require('./log.js').logger;
var net = require('net');
var async = require('async');
/*
* Runtime system of JOX.
*
* Sets up the application and uses callbacks
* to notify application about ongoing events.
*/
var Runtime = function(){
var self = this;
var switches = [];
var server = null;
var swid = 0;
var queue = null;
this.run = function(app){
server = net.createServer(self.new_connection);
server.listen(6633, function(){
logger.info("Initiating JOX runtime system.");
});
queue = async.queue(function(task,callback){
app(task);
callback();
}, 1);
}
this.new_switch = function(sw){
switches.push(sw);
sw.id(swid++);
return self;
}
this.new_connection = function(c){
self.new_switch(new Switch(self,c));
return self;
}
this.delete_switch = function(sw){
switches = switches.reduce(function(pv,cv){if(cv != sw){pv.push(cv);} return pv;},[]);
return self;
}
this.push = function(sw,message) {
queue.push({switch: sw, message: message});
}
return this;
}
Runtime.prototype.__proto__ = EventEmitter.prototype;
exports.Runtime = new Runtime()