snort/packages/webrtc-server/index.js

57 lines
1.5 KiB
JavaScript
Raw Normal View History

2023-12-21 09:56:49 +00:00
const PORT = process.env.PORT || 3000;
2023-12-21 17:59:56 +00:00
const io = require("socket.io")(PORT, {
2023-12-21 09:56:49 +00:00
cors: {
origin: "*",
2023-12-21 17:59:56 +00:00
methods: ["GET", "POST"],
},
2023-12-21 09:56:49 +00:00
});
const peerSocketMap = new Map();
const socketPeerMap = new Map();
2023-12-21 17:59:56 +00:00
io.on("connection", socket => {
2023-12-21 09:56:49 +00:00
console.log(`New client connected, socket ID: ${socket.id}`);
const emitToTarget = (eventType, data, recipient) => {
const targetSocketId = peerSocketMap.get(recipient);
const sender = socketPeerMap.get(socket.id);
if (sender && targetSocketId) {
2023-12-21 17:59:56 +00:00
io.to(targetSocketId).emit(eventType, { ...data, sender });
2023-12-21 09:56:49 +00:00
}
};
2023-12-21 17:59:56 +00:00
socket.on("offer", data => emitToTarget("offer", data, data.recipient));
socket.on("answer", data => emitToTarget("answer", data, data.recipient));
socket.on("candidate", data => emitToTarget("candidate", data, data.recipient));
2023-12-21 09:56:49 +00:00
2023-12-21 17:59:56 +00:00
socket.on("hello", peerId => {
2023-12-21 09:56:49 +00:00
console.log(`Received hello from ${peerId}`);
peerSocketMap.set(peerId, socket.id);
socketPeerMap.set(socket.id, peerId);
2023-12-21 17:59:56 +00:00
socket.broadcast.emit("hello", peerId);
2023-12-21 09:56:49 +00:00
});
2023-12-21 17:59:56 +00:00
socket.on("disconnect", () => {
2023-12-21 09:56:49 +00:00
peerSocketMap.delete(socketPeerMap.get(socket.id));
socketPeerMap.delete(socket.id);
console.log(`Client disconnected, socket ID: ${socket.id}`);
});
});
console.log(`Signaling server running on port ${PORT}`);
const Ministun = require("ministun");
const stunConfig = {
2023-12-21 17:59:56 +00:00
udp4: true,
udp6: true,
port: 3478,
log: console.log,
err: console.err,
sw: true,
2023-12-21 09:56:49 +00:00
};
const server = new Ministun(stunConfig);
2023-12-21 17:59:56 +00:00
console.log(`STUN server running on port ${stunConfig.port}`);