Skip to content

Commit 45cfef6

Browse files
committed
Integrate web socket
1 parent 40b6b3e commit 45cfef6

File tree

1 file changed

+47
-29
lines changed

1 file changed

+47
-29
lines changed

app/voyager/random_chat/page.tsx

Lines changed: 47 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -1,53 +1,71 @@
1-
"use client";
1+
"use client"
22

3-
import { useState } from "react";
3+
import { useState, useEffect } from "react";
44
import Sidebar from "@/app/components/random_chat_components/Sidebar";
5-
import Image from "next/image";
65

76
const RandomChat = () => {
8-
const [message, setMessage] = useState<string>("");
7+
const [inputMessage, setInputMessage] = useState<string>("");
8+
const [chatMessages, setChatMessages] = useState<string[]>([]);
9+
const [socket, setSocket] = useState<WebSocket | null>(null);
10+
11+
useEffect(() => {
12+
const newSocket = new WebSocket(
13+
"ws://3.131.171.245:8181/v1.0/voyager_web_socket/ws"
14+
);
15+
16+
newSocket.onopen = () => {
17+
setSocket(newSocket);
18+
};
19+
20+
newSocket.onmessage = (event) => {
21+
const message = JSON.parse(event.data);
22+
setChatMessages((prevMessages) => [...prevMessages, message.content]);
23+
};
24+
25+
return () => {
26+
newSocket.close();
27+
};
28+
}, []); // Only runs once when the component mounts
29+
30+
function sendMessage(event: React.KeyboardEvent<HTMLInputElement>) {
31+
if (
32+
event.key === "Enter" &&
33+
socket &&
34+
socket.readyState === WebSocket.OPEN
35+
) {
36+
// Send the message
37+
socket.send(JSON.stringify({ content: inputMessage }));
38+
setInputMessage(""); // Clear input field after sending message
39+
} else {
40+
console.error("WebSocket connection is not open.");
41+
}
42+
}
943

1044
const handleMessageChange = (event: React.ChangeEvent<HTMLInputElement>) => {
11-
setMessage(event.target.value);
12-
console.log("Message: ", event.target.value);
45+
setInputMessage(event.target.value);
1346
};
1447

1548
return (
1649
<div className="flex w-full h-full">
1750
<Sidebar />
1851
<div className="flex h-[100vh] w-full ml-[25%] bg-[#393E46]">
52+
<div className="bg-blue text-white p-2">
53+
{chatMessages.map((message, index) => (
54+
<div key={index}>{message}</div>
55+
))}
56+
</div>
57+
1958
<div className="w-[90%] self-end mx-auto mb-5">
2059
<input
2160
type="text"
2261
id="default-input"
2362
className="text-gray-50 text-sm rounded-lg block p-2.5 w-full bg-gray-500 outline-none"
2463
placeholder="Enter text here..."
25-
value={message}
64+
value={inputMessage}
2665
onChange={handleMessageChange}
66+
onKeyDown={sendMessage}
2767
/>
2868
</div>
29-
<div className="absolute flex flex-col bg-white rounded p-4">
30-
<div className="flex justify-around">
31-
<Image
32-
src="/female.png"
33-
height={20}
34-
width={20}
35-
alt="profile-picture"
36-
/>
37-
<Image
38-
src="/male.png"
39-
height={20}
40-
width={20}
41-
alt="profile-picture"
42-
/>
43-
<Image
44-
src="/unknown_gender.png"
45-
height={20}
46-
width={20}
47-
alt="profile-picture"
48-
/>
49-
</div>
50-
</div>
5169
</div>
5270
</div>
5371
);

0 commit comments

Comments
 (0)