Skip to content

Commit

Permalink
update
Browse files Browse the repository at this point in the history
  • Loading branch information
sankhadip-roy committed Jul 28, 2024
1 parent 1d56d78 commit 33303d9
Show file tree
Hide file tree
Showing 4 changed files with 47 additions and 34 deletions.
35 changes: 22 additions & 13 deletions backend/server.js
Original file line number Diff line number Diff line change
@@ -1,11 +1,10 @@
const express = require('express')
const http = require("http");
const cors = require('cors');
const express = require('express')
const mongoose = require("mongoose")
const { Server } = require("socket.io");
const { log } = require('console');
const userModel = require("./model/userDb")

const mongoose = require("mongoose")

const app = express();
app.use(express.json())
Expand All @@ -15,28 +14,40 @@ mongoose.connect("mongodb+srv://sankhadiproy23:[email protected]

const server = http.createServer(app);
const io = new Server(server, {
pingTimeout: 60000,
cors: {
origin: 'http://localhost:5173',
origin: (origin, callback) => {
const allowedOrigins = [
'https://0dab-2405-201-8011-60aa-b7c8-583e-3cf9-4ba2.ngrok-free.app',
'http://localhost:5173'
];
if (allowedOrigins.indexOf(origin) !== -1 || !origin) {
callback(null, true);
} else {
callback(new Error('Not allowed by CORS'));
}
},

methods: ['GET', 'POST'],
},
});

const onlineUsers = new Set()
const onlineUsers = new Set();

io.on("connection", (socket) => {
console.log(`User connected ${socket.id}`);
onlineUsers.add(socket.id);
const userList = Array.from(onlineUsers);
io.emit('online-users', userList);
const usersList = Array.from(onlineUsers);
console.log(`✔ ${socket.id} :` + usersList); //log
io.emit('online-users', usersList);
socket.on('send_message', (data) => {
console.log("Data:", data);
// console.log("Data:", data); //log
io.emit('recive_message', data);
});

socket.on('disconnect', () => {
console.log('User disconnected');
onlineUsers.delete(socket.id);
const usersList = Array.from(onlineUsers);
console.log(`✘ ${socket.id} :` + usersList) //log
io.emit('online-users', usersList);
});
});
Expand All @@ -63,6 +74,4 @@ app.post("/register", (req, res) => {
.catch(err => res.json(err))
})

server.listen(3001, () => {
console.log(`Example app listening on port 3001`);
});
server.listen(3001, () => console.log('Server is running on port 3001'));
6 changes: 6 additions & 0 deletions frontend/src/atom/onlineUsersAtom.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
import { atom } from 'recoil';

export const onlineUsersData = atom({
key: 'onlineUsersList1',
default: [],
})
21 changes: 8 additions & 13 deletions frontend/src/components/Login.jsx
Original file line number Diff line number Diff line change
@@ -1,33 +1,29 @@
import React, { useState, useMemo } from "react";
import { Link } from "react-router-dom";
import axios from 'axios'
import { useNavigate } from "react-router-dom";

import React, { useState } from "react";
import { Link, useNavigate } from "react-router-dom";
import axios from 'axios';
import { useRecoilState } from 'recoil';

import { userloggedin } from '../atom/userAtom'

import { userloggedin } from '../atom/userAtom';


const Login = React.memo(() => {
export default function Login() {

const [email, setEmail] = useState()
const [password, setPassword] = useState()

const [user, setUser] = useRecoilState(userloggedin)


const navigate = useNavigate()

const handleSubmit = (e) => {
e.preventDefault()
axios.post("http://localhost:3001/login", { email, password })
.then(result => {
// console.log(result)
// console.log(result) //log
if (result.data.stat === "Success") {
setUser(result.data.user);
navigate("/")
// console.log(user);
// console.log(user); //log
alert('login successful: ' + result.data.user) //using result.data.user instead of user because useRecoilState is a asyncronous function taking time in updating the user variable
} else {
navigate("/register")
Expand Down Expand Up @@ -84,5 +80,4 @@ const Login = React.memo(() => {
</div>
</div>
);
});
export default Login;
};
19 changes: 11 additions & 8 deletions frontend/src/components/OnlineUsers.jsx
Original file line number Diff line number Diff line change
@@ -1,32 +1,35 @@
import { io } from "socket.io-client";
import React, { useState, useEffect, useMemo } from 'react';
import React, { useEffect, useMemo } from 'react';
import { useRecoilState } from "recoil";
import { onlineUsersData } from "../atom/onlineUsersAtom";

const socket = io.connect("http://localhost:3001");

const OnlineUsers = React.memo(() => {
const [onlineUsers, setOnlineUsers] = useState([]);
const [onlineUsersList, setOnlineUsersList] = useRecoilState(onlineUsersData);

useEffect(() => {
socket.on("online-users", (data) => {
setOnlineUsers(data);
setOnlineUsersList(data);
});
return () => {
socket.off("online-users");
socket.off("online-users"); //run before component removed from the ui
};
}, []);
}, [onlineUsersList]); //tracking onlineUsers array

const memoizedUsers = useMemo(() => {
return onlineUsers.map((user, index) => (
return onlineUsersList.map((user, index) => (
<div key={index} className="">
{index + 1}.&nbsp;
<span>{user}</span>
</div>
));
}, [onlineUsers]);
}, [onlineUsersList]);

return (
<>
<div className="p-3 w-72">
<h3 className="font-bold pb-2">Online Users Socket Id [{onlineUsers.length}]</h3>
<h3 className="font-bold pb-2">Online Users Socket Id [{Math.floor(onlineUsersList.length / 2)}]</h3>
<div className="rounded-md overflow-y-auto max-h-64" style={{
border: '1px solid black',
padding: '10px'
Expand Down

0 comments on commit 33303d9

Please sign in to comment.