diff --git a/Chat-App/app.js b/Chat-App/app.js index 89af2d331..70320287b 100644 --- a/Chat-App/app.js +++ b/Chat-App/app.js @@ -1,37 +1,110 @@ -const { log } = require('console'); -const express = require('express'); -const path=require('path'); -const app = express(); -const PORT = process.env.port || 3000; -const server=app.listen(PORT, () => { - console.log(`Server is running on port ${PORT}.`); -} -) -const io=require('socket.io')(server); +import { useState, useEffect, useRef } from 'react'; +import io from 'socket.io-client'; +import moment from 'moment'; + +const socket = io('http://localhost:3000'); // Ensure this URL is correct for your server + +function App() { + const [name, setName] = useState('anonymous'); + const [totalClients, setTotalClients] = useState(0); + const [messages, setMessages] = useState([]); + const [messageInput, setMessageInput] = useState(''); + const [feedback, setFeedback] = useState(''); + + const messageTone = useRef(new Audio('/iphone_text_message.mp3')); + const messageContainerRef = useRef(null); + + useEffect(() => { + if (messageContainerRef.current) { + messageContainerRef.current.scrollTo(0, messageContainerRef.current.scrollHeight); + } + }, [messages, feedback]); + + useEffect(() => { + socket.on('clients-total', (data) => setTotalClients(data)); + socket.on('chat-message', (data) => { + messageTone.current.play(); + setMessages((prev) => [...prev, { ...data, type: 'incoming' }]); + }); + socket.on('feedback', (data) => setFeedback(data.feedback)); -app.use(express.static(path.join(__dirname, 'public'))); + return () => { + socket.off('clients-total'); + socket.off('chat-message'); + socket.off('feedback'); + }; + }, []); -let socketsConnected=new Set(); + const sendMessage = (e) => { + e.preventDefault(); + if (messageInput.trim() === '') return; + const data = { name, message: messageInput, dateTime: new Date() }; + socket.emit('message', data); + setMessages((prev) => [...prev, { ...data, type: 'outgoing' }]); + setMessageInput(''); + socket.emit('feedback', { feedback: '' }); // Clear feedback on send + }; -io.on('connection', onConnected); - + const handleTyping = () => socket.emit('feedback', { feedback: `✍🏻 ${name} is typing...` }); + const handleBlur = () => socket.emit('feedback', { feedback: '' }); -function onConnected(socket){ - socketsConnected.add(socket.id); - io.emit("clients-total", socketsConnected.size); - socket.on('disconnect', () => { - console.log("Socket disconnected: " + socket.id); - socketsConnected.delete(socket.id); - io.emit("clients-total", socketsConnected.size); - }) + return ( +
👥 {totalClients} Online
+{msg.message}
++ {msg.name} ● {moment(msg.dateTime).fromNow()} +
+{feedback}
} +