fix: fixed websockets

This commit is contained in:
Lukian 2025-04-09 11:49:26 +02:00
parent edc6f34733
commit 1fee32f1d2
5 changed files with 14 additions and 53 deletions

View file

@ -10,16 +10,21 @@ import Register from './pages/Register'
import CreateChannel from './pages/CreateChannel' import CreateChannel from './pages/CreateChannel'
import ChannelsPage from './pages/ChannelsPage' import ChannelsPage from './pages/ChannelsPage'
const socket = new WebSocket("/api/ws");
setInterval(() => {
socket.send("ping");
}, 30 * 1000);
createRoot(document.getElementById('root')!).render( createRoot(document.getElementById('root')!).render(
<BrowserRouter> <BrowserRouter>
<Routes> <Routes>
<Route path="/" element={<Home />} /> <Route path="/" element={<Home socket={socket} />} />
<Route path="/c/:name" element={<ChannelPage />} /> <Route path="/c/:name" element={<ChannelPage socket={socket} />} />
<Route path="/u/:username" element={<UserPage />} /> <Route path="/u/:username" element={<UserPage socket={socket} />} />
<Route path="/login" element={<Login />} /> <Route path="/login" element={<Login />} />
<Route path="/register" element={<Register />} /> <Route path="/register" element={<Register />} />
<Route path="/create-channel" element={<CreateChannel />} /> <Route path="/create-channel" element={<CreateChannel />} />
<Route path="/channels" element={<ChannelsPage />} /> <Route path="/channels" element={<ChannelsPage socket={socket} />} />
</Routes> </Routes>
</BrowserRouter> </BrowserRouter>
) )

View file

@ -7,7 +7,7 @@ import axios from "axios";
import "../styles/ChannelPage.css"; import "../styles/ChannelPage.css";
export default function ChannelPage() { export default function ChannelPage({socket}: {socket: WebSocket}) {
const { name } = useParams(); const { name } = useParams();
const [channel, setChannel] = useState<Channel>(); const [channel, setChannel] = useState<Channel>();
const [messages, setMessages] = useState<Messages>(); const [messages, setMessages] = useState<Messages>();
@ -71,12 +71,6 @@ export default function ChannelPage() {
}, [name]); }, [name]);
useEffect(() => { useEffect(() => {
const socket = new WebSocket(`/api/ws`);
const id = setInterval(() => {
socket.send(JSON.stringify("ping"));
}, 10000);
socket.addEventListener('message', function (event) { socket.addEventListener('message', function (event) {
const data = JSON.parse(event.data); const data = JSON.parse(event.data);
if ((data.type === "new_message" || data.type === "delete_message") && data.channel_id === channel?.id) { if ((data.type === "new_message" || data.type === "delete_message") && data.channel_id === channel?.id) {
@ -86,11 +80,6 @@ export default function ChannelPage() {
}) })
} }
}); });
return () => {
clearInterval(id);
socket.close();
}
}, [channel]) }, [channel])
useEffect(() => { useEffect(() => {

View file

@ -6,7 +6,7 @@ import TopBar from "../components/TopBar"
import "../styles/ChannelsPage.css" import "../styles/ChannelsPage.css"
export default function ChannelsPage() { export default function ChannelsPage({socket}: {socket: WebSocket}) {
const [channels, setChannels] = useState<Channels>(); const [channels, setChannels] = useState<Channels>();
const [search, setSearch] = useState<string>(""); const [search, setSearch] = useState<string>("");
const [user, setUser] = useState<User>(); const [user, setUser] = useState<User>();
@ -34,12 +34,6 @@ export default function ChannelsPage() {
}, []) }, [])
useEffect(() => { useEffect(() => {
const socket = new WebSocket("/api/ws");
const id = setInterval(() => {
socket.send(JSON.stringify("ping"));
}, 10000);
socket.addEventListener('message', function (event) { socket.addEventListener('message', function (event) {
const data = JSON.parse(event.data); const data = JSON.parse(event.data);
if (data.type === "new_channel") { if (data.type === "new_channel") {
@ -53,11 +47,6 @@ export default function ChannelsPage() {
}) })
} }
}); });
return () => {
clearInterval(id);
socket.close();
}
}, []) }, [])
if (!channels) { if (!channels) {

View file

@ -7,7 +7,7 @@ import axios from "axios"
import "../styles/Home.css" import "../styles/Home.css"
export default function Home() { export default function Home({socket}: {socket: WebSocket}) {
const [user, setUser] = useState<User>(); const [user, setUser] = useState<User>();
const [channels, setChannels] = useState<RecentChannels>(); const [channels, setChannels] = useState<RecentChannels>();
const [messages , setMessages] = useState<Messages>(); const [messages , setMessages] = useState<Messages>();
@ -59,12 +59,6 @@ export default function Home() {
}, []) }, [])
useEffect(() => { useEffect(() => {
const socket = new WebSocket("/api/ws");
const id = setInterval(() => {
socket.send(JSON.stringify("ping"));
}, 10000);
socket.addEventListener('message', function (event) socket.addEventListener('message', function (event)
{ {
const data = JSON.parse(event.data); const data = JSON.parse(event.data);
@ -106,11 +100,6 @@ export default function Home() {
}) })
} }
}); });
return () => {
clearInterval(id);
socket.close();
}
}, []) }, [])
useEffect(() => { useEffect(() => {

View file

@ -7,7 +7,7 @@ import axios from "axios";
import "../styles/UserPage.css"; import "../styles/UserPage.css";
export default function UserPage() { export default function UserPage({socket}: {socket: WebSocket}) {
const { username } = useParams(); const { username } = useParams();
const [pageUser, setPageUser] = useState<User>(); const [pageUser, setPageUser] = useState<User>();
const [messages, setMessages] = useState<Messages>(); const [messages, setMessages] = useState<Messages>();
@ -45,12 +45,6 @@ export default function UserPage() {
}, [username]); }, [username]);
useEffect(() => { useEffect(() => {
const socket = new WebSocket("/api/ws");
const id = setInterval(() => {
socket.send(JSON.stringify("ping"));
}, 10000);
socket.addEventListener('message', function (event) { socket.addEventListener('message', function (event) {
const data = JSON.parse(event.data); const data = JSON.parse(event.data);
if ((data.type === "new_message" || data.type === "delete_message") && data.user_id === pageUser?.id) { if ((data.type === "new_message" || data.type === "delete_message") && data.user_id === pageUser?.id) {
@ -65,11 +59,6 @@ export default function UserPage() {
}); });
} }
}); });
return () => {
clearInterval(id);
socket.close();
};
}, [pageUser]); }, [pageUser]);
if (!pageUser) { if (!pageUser) {