Skip to content

Instantly share code, notes, and snippets.

@mgechev
Last active February 11, 2017 20:34
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 2 You must be signed in to fork a gist
  • Save mgechev/61d779255eb0de225d5ecafac9c7074e to your computer and use it in GitHub Desktop.
Save mgechev/61d779255eb0de225d5ecafac9c7074e to your computer and use it in GitHub Desktop.
var fs = require('fs');
var express = require('express');
var app = express();
var peers = {};
var server = require('http').createServer(cb);
var WebSocketServer = require('ws').Server;
var wss = new WebSocketServer({
server: server
});
var port = 5552;
server.listen(port);
console.log('Listening on port', port);
app.use(function(req, res, next) {
res.header('Access-Control-Allow-Origin', '*');
next();
});
wss.on('connection', function connection(ws) {
var id;
ws.on('message', function incoming (message) {
var original = message;
try {
message = JSON.parse(message);
} catch (e) {
console.error('Invalid JSON message');
}
switch (message.type) {
case 'init':
console.log('Init Message from', message.source);
id = message.source;
peers[message.source] = ws;
ws.send(JSON.stringify({
type: 'init',
target: id
}));
break;
default:
console.log('Message from', message.source, 'to', message.target);
if (peers[message.target]) {
peers[message.target].send(original);
} else {
ws.send(JSON.stringify({
type: 'error',
target: id,
error: 'There\'s no connection established with ' + message.target
}));
}
}
});
ws.on('close', function close() {
console.log('delete peer with id: ', id);
delete peers[id];
});
});
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment