-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathlarc-client.js
102 lines (93 loc) · 2.84 KB
/
larc-client.js
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
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
var net = require('net');
var dgram = require('dgram');
const LARC_SERVER = 'larc.inf.furb.br';
var clients = [];
module.exports = {
sendTCP: function sendTCP(id, req, res, handler, callback, enqueued, queue) {
var client = null;
if (clients[id]) {
client = clients[id];
if (!enqueued) {
enqueueRequest(id, req, res, handler, callback, client);
}
if (client.queue.length == 1) {
initClient(client, req, res, handler);
console.log('Client already connected: ' + id);
callback(client);
}
} else {
client = new net.Socket();
client.queue = [];
if (queue == undefined) {
client.firstAttempt = true;
enqueueRequest(id, req, res, handler, callback, client);
} else {
client.firstAttempt = false;
client.queue = queue;
}
clients[id] = client;
initClient(client, req, res, handler);
client.on('data', function (data) {
client.handleResponse(data, client);
if (!client.repeating) {
client.queue = client.queue.slice(1);
if (client.queue.length > 0) {
var request = client.queue[0];
sendTCP(request.id, request.req, request.res, request.handler, request.callback, true);
}
}
});
client.on('error', function (data) {
if (!client.firstAttempt) {
client.handleResponse(data, client, true);
client.queue = client.queue.slice(1);
if (client.queue.length > 0) {
var request = client.queue[0];
sendTCP(request.id, request.req, request.res, request.handler, request.callback, true);
}
clients[id] = null;
} else {
clients[id] = null;
var request = client.queue[0];
sendTCP(request.id, request.req, request.res, request.handler, request.callback, false, client.queue);
}
});
console.log('Conenctando-se ao LARC...');
client.connect(1012, LARC_SERVER, function () {
console.log('Client connected: ' + id);
callback(client);
});
};
},
sendUDP: function (id, req, res, handler, message) {
var client = dgram.createSocket('udp4');
initClient(client, req, res, handler);
console.log('Requisição enviada ao LARC: ' + message);
client.send(message, 0, message.length, 1011, LARC_SERVER, function(err, bytes) {
if (err) {
throw err;
};
client.handleResponse(bytes, client);
client.close();
});
},
repeatRequest: function (client) {
console.log('Repeat request');
client.repeating = true;
client.queue[0].callback(client);
}
};
function initClient(client, req, res, handler) {
client.req = req;
client.res = res;
client.handleResponse = handler;
};
function enqueueRequest(id, req, res, handler, callback, client) {
var requestQueued = {};
requestQueued.id = id;
requestQueued.req = req;
requestQueued.res = res;
requestQueued.handler = handler;
requestQueued.callback = callback;
client.queue.push(requestQueued);
};