Added room functionality

This commit is contained in:
2023-03-15 11:53:12 +01:00
parent 0b7b9b544a
commit 82626e06ad
3 changed files with 77 additions and 24 deletions

View File

@@ -2,12 +2,14 @@ import React from "react";
import {BrowserRouter, Route, Routes} from "react-router-dom"; import {BrowserRouter, Route, Routes} from "react-router-dom";
import Home from "../layout/pages/Home"; import Home from "../layout/pages/Home";
import NotFound from "../layout/pages/NotFound"; import NotFound from "../layout/pages/NotFound";
import Room from "../layout/pages/Room";
const Router = () => { const Router = () => {
return ( return (
<BrowserRouter> <BrowserRouter>
<Routes> <Routes>
<Route path="/" element={<Home/>}/> <Route path="/" element={<Home/>}/>
<Route path="room/:roomId" element={<Room/>}/>
<Route path="*" element={<NotFound/>}/> <Route path="*" element={<NotFound/>}/>
</Routes> </Routes>
</BrowserRouter> </BrowserRouter>

View File

@@ -1,42 +1,42 @@
import React from "react"; import React from "react";
import useWebSocket from 'react-use-websocket';
const WS_URL = "ws://localhost:5062/ws"; const ROOM_URL = 'http://localhost:5062/room';
const Home = () => { const Home = () => {
const [message, setMessage] = React.useState<string>(''); const [rooms, setRooms] = React.useState<string[]>([]);
const [messages, setMessages] = React.useState<string[]>([]);
const websocket = useWebSocket(WS_URL, { React.useEffect(() => {
onOpen: () => { fetch(ROOM_URL)
console.log('WebSocket connection established.'); .then((r) => {
}, console.log(r);
onMessage: (event) => { return r.json();
setMessages([...messages, event.data]); })
} .then((data) => {
console.log(data);
setRooms(data);
}); });
}, []);
const handleSend = () => { const handleCreateRoom = () => {
websocket.sendMessage(message); fetch(ROOM_URL, {
setMessage(''); method: 'POST',
}).then(r => r.json()).then(data => {
setRooms([...rooms, data]);
});
} }
const handleMessageChange = (event: React.ChangeEvent<HTMLInputElement>) => { const gotoRoom = (roomId: string) => {
setMessage(event.target.value); window.location.href = `/room/${roomId}`;
} }
return ( return (
<div> <div>
<form> <button onClick={handleCreateRoom}>Create Room</button>
<input type="text" name="message" placeholder="Send a message" value={message}
onChange={handleMessageChange}/>
<span onClick={handleSend}>Send</span>
</form>
<ul> <ul>
{ {
messages.map((message, index) => { rooms.map((room, index) => {
return <li key={index}>{message}</li> return <li key={index} onClick={() => gotoRoom(room)}>{room}</li>
}) })
} }
</ul> </ul>

51
src/layout/pages/Room.tsx Normal file
View File

@@ -0,0 +1,51 @@
import useWebSocket from "react-use-websocket";
import React from "react";
import {useParams} from "react-router";
const Room = () => {
const {roomId} = useParams();
const WS_URL = `ws://localhost:5062/room/${roomId}`;
const [message, setMessage] = React.useState<string>('');
const [messages, setMessages] = React.useState<string[]>([]);
const websocket = useWebSocket(WS_URL, {
onOpen: () => {
console.log('WebSocket connection established.');
},
onMessage: (event) => {
setMessages([...messages, event.data]);
}
});
const handleSend = () => {
websocket.sendMessage(message);
setMessage('');
}
const handleMessageChange = (event: React.ChangeEvent<HTMLInputElement>) => {
setMessage(event.target.value);
}
return (
<div>
<h1>Room {roomId}</h1>
<form>
<input type="text" name="message" placeholder="Send a message" value={message}
onChange={handleMessageChange}/>
<span onClick={handleSend}>Send</span>
</form>
<ul>
{
messages.map((message, index) => {
return <li key={index}>{message}</li>
})
}
</ul>
</div>
)
}
export default Room;