initial commit
This commit is contained in:
@@ -0,0 +1,60 @@
|
||||
import { useState, useEffect } from 'react';
|
||||
import io from 'socket.io-client';
|
||||
|
||||
const socket = io('http://chat.viensonjette.fr'); // Ton URL de reverse proxy
|
||||
|
||||
function App() {
|
||||
const [user, setUser] = useState(null);
|
||||
const [form, setForm] = useState({ pseudo: '', age: '', city: '', rooms: ['general'] });
|
||||
|
||||
const joinChat = () => {
|
||||
if (form.pseudo) {
|
||||
setUser(form);
|
||||
socket.emit('join_system', form);
|
||||
}
|
||||
};
|
||||
|
||||
if (!user) {
|
||||
return (
|
||||
<div className="bg-black text-green-500 min-h-screen font-mono p-10">
|
||||
<h1 className="text-2xl mb-4 uppercase">{">"} Authentification_</h1>
|
||||
<input placeholder="PSEUDO" className="bg-transparent border-b block mb-4"
|
||||
onChange={(e) => setForm({...form, pseudo: e.target.value})} />
|
||||
<input placeholder="AGE" type="number" className="bg-transparent border-b block mb-4"
|
||||
onChange={(e) => setForm({...form, age: e.target.value})} />
|
||||
<button onClick={joinChat} className="border border-green-500 px-4 py-2 hover:bg-green-500 hover:text-black">
|
||||
INITIALIZE_SESSION
|
||||
</button>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
|
||||
return <ChatScreen user={user} />;
|
||||
}
|
||||
|
||||
// Composant simplifié pour le Chat
|
||||
function ChatScreen({ user }) {
|
||||
const [msg, setMsg] = useState("");
|
||||
const [list, setList] = useState([]);
|
||||
|
||||
useEffect(() => {
|
||||
socket.on('receive_msg', (data) => setList((prev) => [...prev, data]));
|
||||
}, []);
|
||||
|
||||
const send = () => {
|
||||
socket.emit('send_msg', { text: msg, room: 'general', pseudo: user.pseudo });
|
||||
setMsg("");
|
||||
};
|
||||
|
||||
return (
|
||||
<div className="bg-black text-green-400 min-h-screen p-4 font-mono">
|
||||
<div className="h-64 overflow-y-auto border border-green-900 mb-4 p-2">
|
||||
{list.map((m, i) => <p key={i}>[{m.pseudo}]: {m.text}</p>)}
|
||||
</div>
|
||||
<input value={msg} onChange={(e) => setMsg(e.target.value)} className="bg-gray-900 w-full p-2" />
|
||||
<button onClick={send} className="mt-2 text-xs">[ ENVOYER ]</button>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
|
||||
export default App;
|
||||
@@ -0,0 +1,13 @@
|
||||
const io = require('socket.io')(3001, { cors: { origin: "*" } });
|
||||
|
||||
io.on('connection', (socket) => {
|
||||
socket.on('join_system', (data) => {
|
||||
socket.join(data.rooms); // On rejoint les salons choisis
|
||||
console.log(`${data.pseudo} est entré dans: ${data.rooms}`);
|
||||
});
|
||||
|
||||
socket.on('send_msg', (data) => {
|
||||
// On envoie le message à tout le monde dans le salon spécifié
|
||||
io.to(data.room).emit('receive_msg', data);
|
||||
});
|
||||
});
|
||||
Reference in New Issue
Block a user