const express = require("express"); const cors = require("cors"); const cookieParser = require("cookie-parser"); const { Server } = require("socket.io"); const { createServer } = require("http"); const userRoute = require("./Routes/user.routes.js"); const { checkAuthenticated } = require("./Middlewares/authentication.js"); const dotenv = require("dotenv"); dotenv.config({ path: "./.env", }); const app = express(); const corsOptions = { origin: process.env.FRONTEND_URI, methods: "GET,HEAD,PUT,PATCH,POST,DELETE", credentials: true, }; const server = createServer(app); const io = new Server(server, { cors: { origin: process.env.FRONTEND_URI, methods: ["GET", "PUT", "POST", "PATCH", "DELETE"], credentials: true, }, }); app.use(cors(corsOptions)); app.use(express.json({ limit: "16kb" })); app.use(express.urlencoded({ extended: true, limit: "16kb" })); app.use(express.static("public")); app.use(cookieParser()); app.get("/", (req, res) => { return res.send("Hiddskpkpk..."); }); app.use("/api/v1", userRoute); const emailToSocketIdMap = new Map(); const socketidToEmailMap = new Map(); io.on("connection", (socket) => { // console.log(`Socket Connected`, socket.id); socket.on("room:join", (data) => { const { email, room } = data; emailToSocketIdMap.set(email, socket.id); socketidToEmailMap.set(socket.id, email); io.to(room).emit("user:joined", { email, id: socket.id }); socket.join(room); io.to(socket.id).emit("room:join", data); }); socket.on("message", ({ message, room }) => { // console.log(message); // console.log("Message is : ", message, "Room is : ", room); //for sending the message all the users that are connected < --- > io.emit("receive-message", message); //for sending the message for all the user except us <----> socket.broadcast.emit("receive-message", message); socket.join(room); io.to(room).emit("receive-message", message); // For sending the message for perticular room or user }); socket.on("user:call", ({ to, offer }) => { io.to(to).emit("incomming:call", { from: socket.id, offer }); }); socket.on("call:accepted", ({ to, ans }) => { io.to(to).emit("call:accepted", { from: socket.id, ans }); }); socket.on("peer:nego:needed", ({ to, offer }) => { //console.log("peer:nego:needed", offer); io.to(to).emit("peer:nego:needed", { from: socket.id, offer }); }); socket.on("peer:nego:done", ({ to, ans }) => { // console.log("peer:nego:done", ans); io.to(to).emit("peer:nego:final", { from: socket.id, ans }); }); }); module.exports = server;