Skip to content

Commit

Permalink
Merge pull request #57 from fahim-tazz/create-rtc-room
Browse files Browse the repository at this point in the history
Create rtc room
  • Loading branch information
brendantwh authored Oct 31, 2024
2 parents 410a7ab + bb51e5a commit 7d8205e
Show file tree
Hide file tree
Showing 9 changed files with 1,279 additions and 8 deletions.
12 changes: 8 additions & 4 deletions backend/matching-service/controllers/matchingController.js
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
// controllers/matchingController.js
const { Kafka } = require('kafkajs');
const EventEmitter = require('events');
const uuid = require("uuid");

const QUEUE_TIME = 30000;
const BATCH_INTERVAL = 10000;

Expand Down Expand Up @@ -55,15 +57,16 @@ const matchmakeUser = async (userId, userName, questions) => {
userName: userName,
questions: questions
}, false);
eventEmitter.once(`success-${userId}`, (peerUserId, peerUserName, question) => {
eventEmitter.once(`success-${userId}`, (peerUserId, peerUserName, question, roomName) => {

const success_res = {
event: "match-success",
userId: userId,
userName: userName,
peerUserId: peerUserId,
peerUserName: peerUserName,
agreedQuestion: question
agreedQuestion: question,
roomName: roomName
}
resolve(JSON.stringify(success_res));
// resolve(`User ${userId} matched with User ${peerUserId}.`)
Expand Down Expand Up @@ -177,8 +180,9 @@ const batchProcess = () => {
if (peerUserId && unmatchedUsers.has(peerUserId) && peerUserId !== user.userId) {
// Found match!!
const peerUserName = unmatchedUsers.get(peerUserId).userName;
eventEmitter.emit(`success-${user.userId}`, peerUserId, peerUserName, question)
eventEmitter.emit(`success-${peerUserId}`, user.userId, user.userName, question)
const roomName = uuid.v4();
eventEmitter.emit(`success-${user.userId}`, peerUserId, peerUserName, question, roomName)
eventEmitter.emit(`success-${peerUserId}`, user.userId, user.userName, question, roomName)
unmatchedUsers.delete(user.userId);
unmatchedUsers.delete(peerUserId);
userQueueMap.delete(user.userId);
Expand Down
2 changes: 0 additions & 2 deletions backend/matching-service/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,6 @@ const WebSocket = require("ws");
const wss = new WebSocket.Server({port: 3002});
const { matchmakeUser, runConsumer, dequeueUser} = require("./controllers/matchingController");

console.log("Started Websocket server!!!");

runConsumer().catch(console.error);

wss.on("connection", (ws) => {
Expand Down
14 changes: 14 additions & 0 deletions backend/matching-service/package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 1 addition & 0 deletions backend/matching-service/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@
"dependencies": {
"express": "^4.18.2",
"kafkajs": "^2.2.4",
"uuid": "^11.0.2",
"ws": "^8.18.0"
},
"keywords": [],
Expand Down
13 changes: 13 additions & 0 deletions backend/signaling-service/Dockerfile.dev
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
FROM node:22-alpine3.19 AS builder
WORKDIR /app

COPY package.json package-lock.json ./
RUN npm ci
COPY . .

ENV HOSTNAME="0.0.0.0"
ENV PORT=3003

EXPOSE 3003

CMD ["npm", "run", "dev"]
44 changes: 44 additions & 0 deletions backend/signaling-service/index.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
const WebSocket = require("ws");

const wss = new WebSocket.Server({port: 3003});

const rooms = new Map();

wss.on("connection", (ws) => {
console.log("New Peer connected!");
ws.send("Welcome to Signaling Service!")

let currentRoom;
ws.on("message", (message) => {
const parsedMessage = JSON.parse(message);
if (parsedMessage.type === 'join') {
// Assign the user to the specified room
currentRoom = parsedMessage.room;
if (!rooms.has(currentRoom)) {
rooms.set(currentRoom, []);
}
rooms.get(currentRoom).push(ws);
console.log(`User joined room: ${currentRoom}`);
} else {
// Relay the message to other clients in the same room
if (currentRoom && rooms.has(currentRoom)) {
rooms.get(currentRoom).forEach((client) => {
if (client !== ws && client.readyState === WebSocket.OPEN) {
client.send(message.toString()); // Forward the message
}
});
} else {
ws.send("Sorry, please join a room first.");
}
}
});
ws.on('close', () => {
if (currentRoom && rooms.has(currentRoom)) {
const newRoom = rooms.get(currentRoom).filter((client) => client !== ws);
if (newRoom.length === 0) {
rooms.delete(currentRoom);
}
console.log(`User left room: ${currentRoom}`);
}
});
})
Loading

0 comments on commit 7d8205e

Please sign in to comment.