changes
This commit is contained in:
parent
b3561bd155
commit
c1760f03a8
7
.babelrc
Normal file
7
.babelrc
Normal file
@ -0,0 +1,7 @@
|
||||
{
|
||||
"presets": [
|
||||
["@babel/preset-env", { "targets": { "node": "current" } }],
|
||||
"@babel/preset-typescript"
|
||||
],
|
||||
"plugins": ["@babel/plugin-transform-runtime"]
|
||||
}
|
4
.gitignore
vendored
4
.gitignore
vendored
@ -1,2 +1,2 @@
|
||||
/node_modules
|
||||
.env
|
||||
node_modules
|
||||
dist
|
19
package.json
19
package.json
@ -3,9 +3,11 @@
|
||||
"version": "1.0.0",
|
||||
"main": "index.js",
|
||||
"scripts": {
|
||||
"dev": "ts-node src/index.ts",
|
||||
"build": "tsc",
|
||||
"start": "node dist/index.js"
|
||||
"build": "babel src --out-dir dist --extensions \".ts,.js\"",
|
||||
"type-check": "tsc --noEmit",
|
||||
"start": "node dist/index.js",
|
||||
"dev": "nodemon --watch src --exec ts-node src/index.ts",
|
||||
"test": "jest"
|
||||
},
|
||||
"keywords": [],
|
||||
"author": "",
|
||||
@ -13,16 +15,21 @@
|
||||
"description": "",
|
||||
"dependencies": {
|
||||
"cors": "^2.8.5",
|
||||
"crypto-js": "^4.2.0",
|
||||
"dotenv": "^16.4.5",
|
||||
"express": "^4.21.1",
|
||||
"socket.io": "^4.8.0"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@types/crypto-js": "^4.2.2",
|
||||
"@babel/cli": "^7.25.9",
|
||||
"@babel/core": "^7.26.0",
|
||||
"@babel/node": "^7.26.0",
|
||||
"@babel/plugin-transform-runtime": "^7.25.9",
|
||||
"@babel/preset-env": "^7.26.0",
|
||||
"@babel/preset-typescript": "^7.26.0",
|
||||
"@babel/runtime": "^7.26.0",
|
||||
"@types/express": "^5.0.0",
|
||||
"@types/node": "^22.7.5",
|
||||
"@types/socket.io": "^3.0.2",
|
||||
"nodemon": "^3.1.7",
|
||||
"ts-node": "^10.9.2",
|
||||
"typescript": "^5.6.3"
|
||||
}
|
||||
|
129
src/index.ts
129
src/index.ts
@ -2,7 +2,6 @@ import express, { Request, Response } from "express";
|
||||
import { createServer, Server as HTTPServer } from "http";
|
||||
import { Server as SocketIOServer, Socket } from "socket.io";
|
||||
import cors from "cors";
|
||||
require("dotenv").config();
|
||||
|
||||
// Initialize Express
|
||||
const app = express();
|
||||
@ -10,10 +9,8 @@ const app = express();
|
||||
// Set up CORS middleware for Express
|
||||
app.use(
|
||||
cors({
|
||||
origin:
|
||||
process.env.NEXT_FRONTEND_URL || "https://realtime-voicecall.vercel.app", // Update this to the origin of your client
|
||||
origin: "http://localhost:4200", // Update this to the origin of your client
|
||||
methods: ["GET", "POST"],
|
||||
credentials: true, // Allow credentials (e.g., cookies) if needed
|
||||
})
|
||||
);
|
||||
|
||||
@ -24,10 +21,8 @@ const httpServer: HTTPServer = createServer(app);
|
||||
const io = new SocketIOServer(httpServer, {
|
||||
path: "/socket", // Define the WebSocket path
|
||||
cors: {
|
||||
origin:
|
||||
process.env.NEXT_FRONTEND_URL || "https://realtime-voicecall.vercel.app", // Update this to the origin of your client
|
||||
origin: "http://localhost:4200", // Update this to the origin of your client
|
||||
methods: ["GET", "POST"],
|
||||
credentials: true, // Allow credentials (e.g., cookies) if needed
|
||||
},
|
||||
});
|
||||
|
||||
@ -40,102 +35,60 @@ io.on("connection", (socket: Socket) => {
|
||||
|
||||
// Handle user-online event
|
||||
socket.on("user-online", (user: any) => {
|
||||
// console.log("User online:", user);
|
||||
// Check if the same user exists in the map
|
||||
for (const [key, value] of onlineUsers.entries()) {
|
||||
console.log("value", value);
|
||||
if (value.userId === user.userId) {
|
||||
// Assuming user object has an 'id' property
|
||||
onlineUsers.delete(key);
|
||||
break;
|
||||
}
|
||||
}
|
||||
// Now we store the socket ID along with the user details
|
||||
onlineUsers.set(socket.id, { ...user, socketId: socket.id });
|
||||
io.emit("online-users", Array.from(onlineUsers.values()));
|
||||
onlineUsers.set(user, { userId: user, socketId: socket.id });
|
||||
// io.emit("online-users", Array.from(onlineUsers.values()));
|
||||
});
|
||||
|
||||
// Handle user disconnect event
|
||||
socket.on("disconnect", () => {
|
||||
onlineUsers.delete(socket.id);
|
||||
io.emit("online-users", Array.from(onlineUsers.values()));
|
||||
io.emit("user-diconnected", socket.id);
|
||||
console.log("User Disconnected", socket.id);
|
||||
const userArr = Array.from(onlineUsers.values());
|
||||
const u = userArr.filter((item: any) => item.socketId == socket.id);
|
||||
onlineUsers.delete(u[0].userId);
|
||||
});
|
||||
|
||||
// Handle call-related events
|
||||
socket.on("ice-candidate", (data) => {
|
||||
const { candidate, to } = data;
|
||||
const calledTo = onlineUsers.get(to);
|
||||
if (calledTo) {
|
||||
// Emit to the recipient's socket ID
|
||||
socket.to(calledTo.socketId).emit("get-ice-candidate", candidate);
|
||||
}
|
||||
});
|
||||
|
||||
// // Handle call-related events
|
||||
socket.on("offer", (data) => {
|
||||
const { offer, to, sender } = data;
|
||||
const calledTo = onlineUsers.get(to);
|
||||
if (calledTo) {
|
||||
// Emit to the recipient's socket ID
|
||||
socket.to(calledTo.socketId).emit("get-offer", { offer, sender: sender });
|
||||
}
|
||||
});
|
||||
|
||||
socket.on("call-request", (data) => {
|
||||
console.log("Call request received on server:", data);
|
||||
const { answer, to } = data;
|
||||
const calledTo = onlineUsers.get(to);
|
||||
if (calledTo) {
|
||||
socket.to(calledTo.socketId).emit("get-answer", answer);
|
||||
}
|
||||
});
|
||||
|
||||
socket.on("call-accept", (data) => {
|
||||
const { to } = data;
|
||||
const caller = onlineUsers.get(socket.id);
|
||||
console.log("Caller:", caller);
|
||||
|
||||
if (caller) {
|
||||
// Emit to the recipient's socket ID
|
||||
io.to(to).emit("call-request", { caller });
|
||||
const calledTo = onlineUsers.get(to);
|
||||
if (calledTo) {
|
||||
socket.to(calledTo.socketId).emit("call-accepted");
|
||||
}
|
||||
});
|
||||
|
||||
socket.on("send-message", (message) => {
|
||||
const { recipentSocketId } = message;
|
||||
|
||||
// Emit message to the specific recipient
|
||||
const recipient = onlineUsers.get(recipentSocketId);
|
||||
console.log("recipientSocketId:", recipient, recipentSocketId, onlineUsers);
|
||||
if (recipient) {
|
||||
io.to(recipentSocketId).emit("receive-message", message);
|
||||
console.log("Message Received:", message);
|
||||
socket.on("call-reject", (data: { to: string }) => {
|
||||
const { to } = data;
|
||||
const calledTo = onlineUsers.get(to);
|
||||
if (calledTo) {
|
||||
socket.to(calledTo.socketId).emit("call-rejected");
|
||||
}
|
||||
});
|
||||
|
||||
socket.on("send-user-typing", (user) => {
|
||||
const { recipentSocketId } = user;
|
||||
|
||||
// Emit message to the specific recipient
|
||||
const recipient = onlineUsers.get(recipentSocketId);
|
||||
if (recipient) {
|
||||
io.to(recipentSocketId).emit("receive-user-typing");
|
||||
}
|
||||
});
|
||||
|
||||
socket.on("send-user-typing-end", (user) => {
|
||||
const { recipentSocketId } = user;
|
||||
|
||||
// Emit message to the specific recipient
|
||||
const recipient = onlineUsers.get(recipentSocketId);
|
||||
if (recipient) {
|
||||
io.to(recipentSocketId).emit("receive-user-typing-end");
|
||||
}
|
||||
});
|
||||
|
||||
socket.on("call-accepted", (data: { to: string }) => {
|
||||
const caller = onlineUsers.get(socket.id);
|
||||
socket.to(data.to).emit("call-accepted", { caller });
|
||||
});
|
||||
|
||||
socket.on("call-rejected", (data: { to: string }) => {
|
||||
socket.to(data.to).emit("call-rejected");
|
||||
});
|
||||
|
||||
socket.on("webrtc-offer", (data: { to: string; offer: any }) => {
|
||||
const caller = onlineUsers.get(socket.id);
|
||||
socket.to(data.to).emit("webrtc-offer", { data, caller });
|
||||
});
|
||||
|
||||
socket.on("webrtc-answer", (data: { to: string; answer: any }) => {
|
||||
console.log("webrtc-answer", data);
|
||||
socket.to(data.to).emit("webrtc-answer", data);
|
||||
});
|
||||
|
||||
socket.on("webrtc-ice-candidate", (data: { to: string; candidate: any }) => {
|
||||
socket.to(data.to).emit("webrtc-ice-candidate", data);
|
||||
});
|
||||
|
||||
// Handle call-ended event
|
||||
socket.on("call-ended", (data: { to: string }) => {
|
||||
socket.to(data.to).emit("call-ended");
|
||||
});
|
||||
});
|
||||
|
||||
// Define a basic route
|
||||
|
@ -1,13 +1,15 @@
|
||||
{
|
||||
"compilerOptions": {
|
||||
"target": "ES2020",
|
||||
"module": "commonjs",
|
||||
"strict": true,
|
||||
"esModuleInterop": true,
|
||||
"skipLibCheck": true,
|
||||
"target": "ESNext", // Handled by Babel
|
||||
"module": "CommonJS", // Node.js module system
|
||||
"strict": true, // Enable strict type-checking
|
||||
"esModuleInterop": true, // Allow default imports from CJS modules
|
||||
"skipLibCheck": true, // Skip type checking of declaration files
|
||||
"forceConsistentCasingInFileNames": true,
|
||||
"outDir": "./dist"
|
||||
"outDir": "./dist", // Output directory
|
||||
"rootDir": "./src", // Source directory
|
||||
"noEmit": true // No need to emit files, Babel does that
|
||||
},
|
||||
"include": ["src/**/*.ts"],
|
||||
"exclude": ["node_modules"]
|
||||
"include": ["src/**/*"],
|
||||
"exclude": ["node_modules", "dist"]
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user