Skip to content

Commit 145be18

Browse files
committed
useWebsocket, useHotlineClient, cleanups
1 parent f687dd6 commit 145be18

File tree

6 files changed

+64
-52
lines changed

6 files changed

+64
-52
lines changed

frontend/src/App.js

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,20 @@
11
import React, { useRef, useEffect } from "react";
22

3-
import useHotline, { messageTypes } from "./useHotline";
3+
import { messageTypes } from "./consts";
4+
import useHotlineClient from "./useHotlineClient";
45
import useChatInput from "./useChatInput";
6+
import useWebsocket from "./useWebsocket";
7+
58
import Admin from "./admin/Admin";
69

710
import "./App.css";
811

9-
const ENDPOINT = "ws://localhost:2015/ws";
12+
const CLIENT_ENDPOINT = "ws://localhost:2015/ws";
1013

1114
function App() {
12-
const { opened, messages, sendMessage } = useHotline(ENDPOINT);
15+
const { ws: clientWs, open: clientWsOpen } = useWebsocket(CLIENT_ENDPOINT);
16+
const { messages, sendMessage } = useHotlineClient(clientWs);
17+
1318
const { input, onInputChange, onInputKeyPress } = useChatInput(sendMessage);
1419

1520
const lastMessage = useRef();
@@ -38,7 +43,7 @@ function App() {
3843
</div>
3944
<input
4045
className="ChatInput"
41-
disabled={!opened}
46+
disabled={!clientWsOpen}
4247
value={input}
4348
onChange={onInputChange}
4449
onKeyPress={onInputKeyPress}

frontend/src/consts.js

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
export const messageTypes = Object.freeze({
2+
sent: "SENT",
3+
received: "RECEIVED",
4+
});

frontend/src/useHotline.js

Lines changed: 0 additions & 48 deletions
This file was deleted.

frontend/src/useHotlineAdmin.js

Whitespace-only changes.

frontend/src/useHotlineClient.js

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
import { useState, useEffect } from "react";
2+
3+
import { messageTypes } from "./consts";
4+
5+
let messageId = 0;
6+
7+
export default function useHotlineClient(ws) {
8+
const [messages, setMessages] = useState([]);
9+
10+
const appendMessage = (message, type) => {
11+
messageId++;
12+
setMessages((prev) => [...prev, { key: messageId, message, type }]);
13+
};
14+
15+
const sendMessage = (message) => {
16+
if (ws?.readyState === WebSocket.OPEN) {
17+
ws.send(message);
18+
appendMessage(message, messageTypes.sent);
19+
}
20+
};
21+
22+
useEffect(() => {
23+
if (ws !== null) {
24+
window.__hotlineClient = ws;
25+
ws.onmessage = (message) => {
26+
appendMessage(message, messageTypes.received);
27+
};
28+
}
29+
}, [ws]);
30+
31+
return {
32+
messages,
33+
sendMessage,
34+
};
35+
}

frontend/src/useWebsocket.js

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
import { useEffect, useState } from "react";
2+
3+
export default function useWebsocket(endpoint) {
4+
const [ws, setWs] = useState(null);
5+
const [open, setOpen] = useState(null);
6+
7+
useEffect(() => {
8+
const wsInner = new WebSocket(endpoint);
9+
wsInner.onopen = () => setOpen(true);
10+
wsInner.onclose = () => setOpen(false);
11+
setWs(wsInner);
12+
return () => wsInner.close();
13+
}, [endpoint]);
14+
15+
return { ws, open };
16+
}

0 commit comments

Comments
 (0)