done chat

This commit is contained in:
2025-02-06 15:22:32 +03:00
parent 60e093f123
commit 37c170b265
9 changed files with 90 additions and 11 deletions

View File

@@ -4,21 +4,50 @@ function getCookie(name) {
if (parts.length === 2) return parts.pop().split(';').shift();
}
$(document).ready(() => {
//prod
// const socket = new WebSocket('wss://auth.foxarmy.org');
//dev
const socket = new WebSocket('ws://localhost:3000');
$(document).ready(async () => {
const wsConnectionString = (await fetch(`/api/websocketConnection`)).text()
const socket = new WebSocket(wsConnectionString);
let lastMessageNumber = 0;
let page = 20;
const fetchMoreMessages = async () => {
if (lastMessageNumber < 0 ) return [];
let messages = await (await fetch(`/api/getChatMessages/${lastMessageNumber}/${page}`)).json();
lastMessageNumber = messages.length < page? -1 : lastMessageNumber + messages.length
return messages
}
const appendMessageToChat = (author, content) => {
const messageDiv = document.createElement('div')//`<div class="chat-message" ><${message.author}> ${message.content}</div><br/>`
const messageDiv = document.createElement('div')
messageDiv.className = "chat-message"
messageDiv.textContent = `<${author}> ${content}`
document.getElementsByClassName("messages-container")[0].appendChild(messageDiv)
}
socket.onmessage = message => {
const prependMessageToChat = (author, content) => {
const messageDiv = document.createElement('div')
messageDiv.className = "chat-message"
messageDiv.textContent = `<${author}> ${content}`
const messageContainer = document.getElementsByClassName("messages-container")[0]
messageContainer.firstChild.insertAdjacentElement('afterend', messageDiv)
}
const onFetchMessageButtonClick = async () => {
let messages = await fetchMoreMessages(lastMessageNumber, page);
if (messages.length == 0) return;
messages.forEach(message => {
prependMessageToChat(message.author, message.content);
});
}
$("#fetch-messages-button").click(onFetchMessageButtonClick);
await onFetchMessageButtonClick();
socket.onmessage = message => {
try {
message = JSON.parse(message.data)
} catch(e) {
@@ -40,6 +69,8 @@ $(document).ready(() => {
socket.send(JSON.stringify(message));
appendMessageToChat(message.author, message.content)
$("#chat-input").val("")
let messageContainer = $(".messages-container")
messageContainer.animate({ scrollTop: messageContainer.prop("scrollHeight")}, 1000);
}
$("#send-message-button").click(sendData);