script.js 2.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788
  1. const API_URL = "http://students.a-level.com.ua:10012"
  2. function jsonPost(url, data) {
  3. return fetch(url, {
  4. method: 'POST',
  5. headers: {
  6. 'Content-Type': 'application/json',
  7. },
  8. body: JSON.stringify(data),
  9. }).then((response) => {
  10. if (!response.ok) {
  11. throw Error(response.statusText);
  12. }
  13. return response.json();
  14. }).catch(function (error) {
  15. console.log(error);
  16. });
  17. }
  18. function delay(ms) {
  19. function executor(fulfill, reject) {
  20. setTimeout(() => fulfill(ms), ms);
  21. }
  22. return new Promise(executor);
  23. }
  24. let messagesContainer = document.getElementById('messages');
  25. let messageId = 0;
  26. async function getMessages(messageId) {
  27. jsonPost(API_URL, { func: 'getMessages', messageId }).then(response => {
  28. response.data.forEach(element => {
  29. let messageEl = document.createElement('div');
  30. messagesContainer.append(messageEl);
  31. messageEl.classList.add('message');
  32. let nickEl = document.createElement('div');
  33. nickEl.classList.add('nick');
  34. nickEl.innerText = element.nick;
  35. messageEl.append(nickEl);
  36. let timestampEl = document.createElement('div');
  37. timestampEl.classList.add('time');
  38. const date = new Date(element.timestamp);
  39. timestampEl.innerText = date.toLocaleDateString() + ' ' + date.toLocaleTimeString();
  40. messageEl.append(timestampEl);
  41. let messageTextEl = document.createElement('div');
  42. messageTextEl.innerText = element.message;
  43. messageTextEl.classList.add('text');
  44. messageEl.append(messageTextEl);
  45. });
  46. messagesContainer.scrollTop = messagesContainer.scrollHeight;
  47. messageId = response.nextMessageId;
  48. });
  49. }
  50. getMessages(messageId);
  51. async function checkLoop() {
  52. while (true) {
  53. await delay(2000);
  54. getMessages(messageId);
  55. }
  56. }
  57. checkLoop();
  58. async function sendMessage(nick, message) {
  59. const body = {
  60. func: 'addMessage',
  61. nick: nick || 'Anonymous',
  62. message: message,
  63. };
  64. return await jsonPost(API_URL, body);
  65. }
  66. async function sendAndCheck(nick, message) {
  67. const response = await sendMessage(nick, message);
  68. if (response.nextMessageId > messageId) {
  69. getMessages(messageId);
  70. }
  71. }
  72. let submitButton = document.getElementById('send');
  73. submitButton.addEventListener('click', () => {
  74. let nickEl = document.getElementById('nick');
  75. let messageEl = document.getElementById('message');
  76. sendAndCheck(nickEl.value, messageEl.value);
  77. nickEl.value = '';
  78. messageEl.value = '';
  79. });