forked from feross/simple-peer
/
peer_server.js
93 lines (81 loc) · 2.62 KB
/
peer_server.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
var port = 8888;
var WebSocketServer = require('websocket').server;
var http = require('http');
var g_offers = {};
var server = http.createServer(function(request, response) {
response.end('This is a WebSocket server.');
});
server.listen(port, function() {
console.log('Server running at http://localhost:' + port);
});
// create the server
wsServer = new WebSocketServer({
httpServer: server
});
var g_offer_connections = {};
var g_next_id = 1;
wsServer.on('request', function(request) {
var connection = request.accept('peer-protocol', request.origin);
connection.id = g_next_id++;
console.log('connect id:', connection.id);
connection.on('error', function (error) {
console.error('error: ', connection.id, error);
});
connection.on('open', function () {
console.error('open: ', connection.id);
});
connection.on('close', function(con) {
console.log('closed: ', connection.id);
Object.keys(g_offer_connections).forEach(function(offer) {
var other_con = g_offer_connections[offer];
if (other_con == connection) {
delete g_offer_connections[offer];
delete g_offers[offer];
}
});
});
connection.on('message', function(message) {
if (message.type === 'utf8') {
var data = JSON.parse(message.utf8Data);
console.log('CALLING:', data.type);
switch (data.type) {
case 'set_offer':
var offer = data.offer;
//console.info('offer:', offer);
g_offers[offer] = 1;
g_offer_connections[offer] = connection;
break;
case 'get_offers':
//console.info(JSON.stringify(g_offers));
var msg = JSON.stringify({ type:'get_offers', offers: Object.keys(g_offers) });
console.info(msg);
connection.sendUTF(msg);
break;
case 'set_answer':
// Save the answer for this offer
var answer = data.answer;
var offer = data.offer;
//console.info(answer);
g_offers[offer] = answer;
// Send the offers' connection the answer
var offer_con = g_offer_connections[offer];
var msg = JSON.stringify({ type:'get_answer', answer: answer });
offer_con.sendUTF(msg);
break;
/*
case 'get_answer':
var offer = data.offer;
var answer = g_offers[offer];
//console.info('offer:', offer);
//console.info('answer:', answer);
var msg = JSON.stringify({ type:'get_answer', answer: answer });
connection.sendUTF(msg);
break;
*/
default:
console.error('Unknown message type.');
console.error(data.type);
}
}
});
});