50 lines
1.1 KiB
JavaScript
50 lines
1.1 KiB
JavaScript
const WebSocket = require('ws');
|
|
|
|
const PORT = process.env.PORT || 9090;
|
|
const wss = new WebSocket.Server({ port: PORT });
|
|
|
|
const peers = new Map();
|
|
|
|
wss.on('connection', (ws) => {
|
|
let peerId = null;
|
|
|
|
ws.on('message', (raw) => {
|
|
let msg;
|
|
try {
|
|
msg = JSON.parse(raw);
|
|
} catch {
|
|
return;
|
|
}
|
|
|
|
switch (msg.type) {
|
|
case 'register': {
|
|
peerId = msg.peerId;
|
|
peers.set(peerId, ws);
|
|
console.log(`[+] ${peerId} registriert (${peers.size} Peers online)`);
|
|
ws.send(JSON.stringify({ type: 'registered', peerId }));
|
|
break;
|
|
}
|
|
|
|
case 'offer':
|
|
case 'answer':
|
|
case 'ice-candidate':
|
|
case 'control': {
|
|
const target = peers.get(msg.target);
|
|
if (target && target.readyState === WebSocket.OPEN) {
|
|
target.send(JSON.stringify({ ...msg, from: peerId }));
|
|
}
|
|
break;
|
|
}
|
|
}
|
|
});
|
|
|
|
ws.on('close', () => {
|
|
if (peerId) {
|
|
peers.delete(peerId);
|
|
console.log(`[-] ${peerId} getrennt (${peers.size} Peers online)`);
|
|
}
|
|
});
|
|
});
|
|
|
|
console.log(`Signal-Server laeuft auf ws://0.0.0.0:${PORT}`);
|