Chatting Time
Chatting Time
com/
https://voca.ro/18ELVH5I7b3l
// utils/db.js
let client;
let clientPromise;
if (!process.env.MONGODB_URI) {
throw new Error('Please add your Mongo URI to .env.local');
}
export { clientPromise };
.......app/utils/db
// utils/db.js
import { MongoClient } from 'mongodb';
let client;
........
// pages/api/messages.js
import { connectToDatabase } from '../../utils/db';
.....
// socketServer.js
if (!user) {
return next(new Error('User not found'));
}
socket.on('disconnect', () => {
console.log('Client disconnected');
});
});
}
res.end();
};
export default ioHandler;
....
// src/pages/index.tsx
interface Message {
id: string;
content: string;
sender: string;
timestamp: string;
}
useEffect(() => {
// Fetch messages from the API
axios.get('/api/messages')
.then((response) => {
const fetchedMessages = response.data.map((msg: any) => ({
id: msg._id,
content: msg.content,
sender: msg.sender,
timestamp: msg.timestamp
}));
setMessages(fetchedMessages as Message[]);
})
.catch((error) => {
console.error('Error fetching messages:', error);
});
// Initialize socket.io
const socket: Socket = io();
socketRef.current = socket;
return () => {
socket.disconnect();
};
}, []);
const handleSendMessage = (content: string) => {
const newMessage: Message = {
id: 'temp-id', // Generate or replace with actual id logic
sender: 'Current User', // Replace with actual user logic
content,
timestamp: new Date().toISOString(),
};
axios.post('/api/messages', {
sender: newMessage.sender,
content: newMessage.content,
})
.then((response) => {
const savedMessage = response.data;
setMessages((prevMessages) => [
...prevMessages,
{
id: savedMessage._id,
content: savedMessage.content,
sender: savedMessage.sender,
timestamp: savedMessage.timestamp,
},
]);
})
.catch((error) => {
console.error('Error sending message:', error);
});
if (socketRef.current) {
socketRef.current.emit('send_message', newMessage);
}
};
return (
<div>
<Navbar />
<main className="flex flex-col items-center justify-between p-24">
<Chat user={{ username: 'Current User' }}>
<ChatWindow>
<MessageList messages={messages} />
<MessageInput onSendMessage={handleSendMessage} />
</ChatWindow>
</Chat>
</main>
</div>
);
};