123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687 |
- let chatMessageTemplate = document.querySelector("#chat__message-template").content.querySelector(".chat__message-wrap");
- let chatMessageBox = document.querySelector(".chat__messages-box");
- let chatInputNick = document.querySelector(".chat__input--nick");
- let chatInputMessage = document.querySelector(".chat__input--message");
- let chatSendButton = document.querySelector(".chat__send-button");
- let messageId = 0;
- async function jsonPost(url, data) {
- const res = await fetch(url, {
- method: "POST",
- body: JSON.stringify(data)
- });
- return await res.json();
- };
- let delay = function(ms) {
- return new Promise((resolve, reject) => {
- setTimeout(() => resolve(ms), ms);
- });
- };
- let drawAllMessage = async function() { // Отрисовка всех сообщений, функция вызывается один раз и после не используется
- let data = await jsonPost("http://students.a-level.com.ua:10012", {func: "getMessages", messageId: 0});
- messageId = data["nextMessageId"]; // Получаю id последнего сообщения
- for(let item of data["data"]) { // Рисую все сообщения
- let chatMessage = chatMessageTemplate.cloneNode(true);
- let timespan = new Date(item["timestamp"]);
- chatMessage.querySelector(".chat__user-nick").textContent = item["nick"];
- chatMessage.querySelector(".chat__user-message").textContent = item["message"];
- chatMessage.querySelector(".chat__timespan").textContent = `${timespan.getHours()}:${timespan.getMinutes()}`;
- chatMessageBox.appendChild(chatMessage);
- chatMessageBox.scrollTo(0, chatMessageBox.scrollHeight);
- }
- }
- drawAllMessage();
- async function sendMessage(nick, message) {
- let nextMessageId = await jsonPost("http://students.a-level.com.ua:10012", {func: 'addMessage', nick: nick, message: message});
- messageId = nextMessageId["nextMessageId"]; // После отправки сообщения переприсваиваю новый id
- chatInputMessage.value = ""; // Удаляю все что написал пользователь из поля сообщения после нажатия "Отправить"
- }
- async function getMessages(data) { // Отрисовка одного последнего сообщения
- let chatMessage = chatMessageTemplate.cloneNode(true); // Копирую уже заверстаный в HTML шаблон сообщения в переменную chatMessage
- let timespan = new Date(data["data"][0]["timestamp"]);
- chatMessage.querySelector(".chat__user-nick").textContent = data["data"][0]["nick"];
- chatMessage.querySelector(".chat__user-message").textContent = data["data"][0]["message"];
- chatMessage.querySelector(".chat__timespan").textContent = `${timespan.getHours()}:${timespan.getMinutes()}`;
- chatMessageBox.appendChild(chatMessage);
- chatMessageBox.scrollTo(0, chatMessageBox.scrollHeight); // Скрол в самый низ
- }
- async function sendAndCheck() {
- await sendMessage(chatInputNick.value, chatInputMessage.value);
- let data = await jsonPost("http://students.a-level.com.ua:10012", {func: "getMessages", messageId: messageId - 1});
- await getMessages(data);
- }
- async function checkLoop() {
- while(true) {
- await delay(3000);
- let data = await jsonPost("http://students.a-level.com.ua:10012", {func: "getMessages", messageId: messageId});
- if(messageId != data["nextMessageId"]) { // Если id не совпадают то было написано новое сообщение
- messageId = data["nextMessageId"];
- getMessages(data);
- }
- }
- }
- checkLoop();
- chatSendButton.addEventListener("click", sendAndCheck);
|