NihalGazi's picture
Update static/chat.js
1c177a3 verified
(() => {
const params = new URLSearchParams(window.location.search);
const room = params.get("room");
const socket = io();
const chatBox = document.getElementById("chat");
const msgInput = document.getElementById("msg");
const sendBtn = document.getElementById("send");
const leaveBtn = document.getElementById("leave");
const chatroomTitle = document.getElementById("chatroom-title");
let mySid = null;
let partnerSid = null;
let currentRoom = null;
// On connect, store my SID
socket.on("connect", () => {
mySid = socket.id;
});
socket.on("matched", data => {
currentRoom = data.room;
const sid1 = data.sid1;
const sid2 = data.sid2;
partnerSid = (mySid === sid1) ? sid2 : sid1;
chatroomTitle.textContent = `Chatroom of ${sid1} and ${sid2}`;
appendSystemMsg("Matched! Start chatting.");
});
socket.on("chat", data => {
const cls = data.sid === mySid ? "me" : "other";
appendChat(data.sid + ": " + data.msg, cls);
});
sendBtn.onclick = () => {
const txt = msgInput.value.trim();
if (!txt || !currentRoom) return;
socket.emit("chat", { room: currentRoom, msg: txt, sid: mySid });
msgInput.value = "";
};
function appendChat(msg, cls) {
const div = document.createElement("div");
div.textContent = msg;
div.classList.add(cls);
chatBox.append(div);
chatBox.scrollTop = chatBox.scrollHeight;
}
function appendSystemMsg(msg) {
appendChat(msg, "status");
}
socket.on("status", data => {
const s = document.createElement("div");
s.style.fontStyle = "italic";
s.textContent = data.msg;
chatDiv.append(s);
chatDiv.scrollTop = chatDiv.scrollHeight;
});
leaveBtn.onclick = () => {
if (confirm("Leave chat?")) {
socket.emit("leave", { room });
}
};
socket.on("left", () => {
window.location = "/";
});
socket.on("matched", data => {
// If you ever get matched here, you can handle it, but in this flow
// matching happens before navigation.
});
})();