-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathWebSocketClient.kt
More file actions
95 lines (75 loc) · 2.71 KB
/
Copy pathWebSocketClient.kt
File metadata and controls
95 lines (75 loc) · 2.71 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
// ============================================
// TrojanChat — Web Client (WebSocket Version)
// ============================================
const API_HOST = window.location.hostname || "localhost";
const WS_URL = `ws://${API_HOST}:8000/ws/chat`;
const HTTP_URL = `http://${API_HOST}:8000`;
const messagesDiv = document.getElementById("messages");
const messageInput = document.getElementById("message");
const usernameInput = document.getElementById("username");
const sendButton = document.getElementById("sendBtn");
let socket;
function connectWebSocket() {
socket = new WebSocket(WS_URL);
socket.onmessage = function (event) {
const msg = JSON.parse(event.data);
appendMessage(msg);
};
socket.onclose = () => {
console.warn("WebSocket interface disconnected. Retrying connection context...");
setTimeout(connectWebSocket, 1000);
};
socket.onerror = (err) => {
console.error("WebSocket socket anomaly tracked:", err);
socket.close();
};
}
// Initialize active connection channel
connectWebSocket();
function appendMessage(msg) {
const div = document.createElement("div");
div.classList.add("message");
const rawTime = msg.timestamp || new Date().toISOString();
const time = rawTime.replace("T", " ").split(".")[0];
div.innerHTML = `
<div class="message-username">${msg.username}</div>
<div class="message-text">${msg.content}</div>
<div class="message-time" style="font-size: 10px; color: #777; margin-top: 4px;">
${time}
</div>
`;
messagesDiv.appendChild(div);
messagesDiv.scrollTop = messagesDiv.scrollHeight;
}
async function loadHistory() {
try {
const res = await fetch(`${HTTP_URL}/chat/history?limit=50`);
if (!res.ok) throw new Error(`HTTP status mismatch: ${res.status}`);
const data = await res.json();
messagesDiv.innerHTML = "";
data.forEach(appendMessage);
} catch (err) {
console.error("Could not fetch historical telemetry records from database:", err);
}
}
loadHistory();
function sendMessage() {
const username = usernameInput.value.trim();
const content = messageInput.value.trim();
if (!username || !content) return;
if (socket.readyState !== WebSocket.OPEN) {
console.error("Transmission blocked: Client state socket connection remains inactive.");
return;
}
const msg = {
username,
content,
timestamp: new Date().toISOString()
};
socket.send(JSON.stringify(msg));
messageInput.value = "";
}
sendButton.addEventListener("click", sendMessage);
messageInput.addEventListener("keypress", (e) => {
if (e.key === "Enter") sendMessage();
});