57 lines
1.5 KiB
JavaScript
57 lines
1.5 KiB
JavaScript
const PORT = process.env.PORT || 3000;
|
|
const io = require("socket.io")(PORT, {
|
|
cors: {
|
|
origin: "*",
|
|
methods: ["GET", "POST"],
|
|
},
|
|
});
|
|
|
|
const peerSocketMap = new Map();
|
|
const socketPeerMap = new Map();
|
|
|
|
io.on("connection", socket => {
|
|
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) {
|
|
io.to(targetSocketId).emit(eventType, { ...data, sender });
|
|
}
|
|
};
|
|
|
|
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));
|
|
|
|
socket.on("hello", peerId => {
|
|
console.log(`Received hello from ${peerId}`);
|
|
peerSocketMap.set(peerId, socket.id);
|
|
socketPeerMap.set(socket.id, peerId);
|
|
socket.broadcast.emit("hello", peerId);
|
|
});
|
|
|
|
socket.on("disconnect", () => {
|
|
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 = {
|
|
udp4: true,
|
|
udp6: true,
|
|
port: 3478,
|
|
log: console.log,
|
|
err: console.err,
|
|
sw: true,
|
|
};
|
|
|
|
const server = new Ministun(stunConfig);
|
|
|
|
console.log(`STUN server running on port ${stunConfig.port}`);
|