Browse Source

changes

tipoff-server
Ramprasad 2 months ago
parent
commit
c1760f03a8
5 changed files with 67 additions and 98 deletions
  1. +7
    -0
      .babelrc
  2. +2
    -2
      .gitignore
  3. +13
    -6
      package.json
  4. +35
    -82
      src/index.ts
  5. +10
    -8
      tsconfig.json

+ 7
- 0
.babelrc View File

@ -0,0 +1,7 @@
{
"presets": [
["@babel/preset-env", { "targets": { "node": "current" } }],
"@babel/preset-typescript"
],
"plugins": ["@babel/plugin-transform-runtime"]
}

+ 2
- 2
.gitignore View File

@ -1,2 +1,2 @@
/node_modules
.env
node_modules
dist

+ 13
- 6
package.json View File

@ -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"
}


+ 35
- 82
src/index.ts View File

@ -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,101 +35,59 @@ 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("call-request", (data) => {
console.log("Call request received on server:", data);
const { to } = data;
const caller = onlineUsers.get(socket.id);
console.log("Caller:", caller);
if (caller) {
socket.on("ice-candidate", (data) => {
const { candidate, to } = data;
const calledTo = onlineUsers.get(to);
if (calledTo) {
// Emit to the recipient's socket ID
io.to(to).emit("call-request", { caller });
socket.to(calledTo.socketId).emit("get-ice-candidate", candidate);
}
});
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);
// // 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("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("call-request", (data) => {
const { answer, to } = data;
const calledTo = onlineUsers.get(to);
if (calledTo) {
socket.to(calledTo.socketId).emit("get-answer", answer);
}
});
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-accept", (data) => {
const { to } = data;
const calledTo = onlineUsers.get(to);
if (calledTo) {
socket.to(calledTo.socketId).emit("call-accepted");
}
});
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");
socket.on("call-reject", (data: { to: string }) => {
const { to } = data;
const calledTo = onlineUsers.get(to);
if (calledTo) {
socket.to(calledTo.socketId).emit("call-rejected");
}
});
});


+ 10
- 8
tsconfig.json View File

@ -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…
Cancel
Save