stage5.js 1.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061
  1. function jsonPost(url, data) {
  2. return new Promise((resolve, reject) => {
  3. const x = new XMLHttpRequest();
  4. x.onerror = () => reject(new Error('jsonPost failed'))
  5. //x.setRequestHeader('Content-Type', 'application/json');
  6. x.open("POST", url, true);
  7. x.send(JSON.stringify(data))
  8. x.onreadystatechange = () => {
  9. if (x.readyState === XMLHttpRequest.DONE && x.status === 200){
  10. resolve(JSON.parse(x.responseText))
  11. } else if (x.status !== 200){
  12. reject(new Error('status is not 200'))
  13. }
  14. }
  15. });
  16. }
  17. //Stage 0 && Stage 1
  18. const url = "http://students.a-level.com.ua:10012";
  19. let nextId = 0;
  20. const delay = ms => new Promise(ok => setTimeout(() => ok(ms), ms));
  21. const addZero = data => data < 10 ? `0${data}` : data;
  22. const buildDate = date => `${date.getDate()}/${date.getMonth()+1}/${date.getFullYear()} ${addZero(date.getHours())}:${addZero(date.getMinutes())}:${addZero(date.getSeconds())}`;
  23. const buildMessage = (nick, message, time) => {
  24. return `<p>nick - ${nick}, message - ${message}, date - ${buildDate(new Date(time))}</p>`;
  25. }
  26. const sendMessage = async (nick, message) => {
  27. await jsonPost(url, {func: 'addMessage', nick: nick, message: message});
  28. }
  29. const getMessages = async () => {
  30. let messagesArray = await jsonPost(url, {func: 'getMessages', messageId: nextId});
  31. for (const message of messagesArray.data) {
  32. chatMessages.insertAdjacentHTML('afterbegin', buildMessage(message.nick, message.message, message.timestamp));
  33. }
  34. nextId = messagesArray.nextMessageId;
  35. }
  36. const sendAndCheck = async (nick, message) => {
  37. await Promise.all([sendMessage(nick, message), getMessages()]);
  38. }
  39. const checkLoop = async () => {
  40. while (true) {
  41. await Promise.all([delay(5000), getMessages()]);
  42. }
  43. }
  44. sendButton.addEventListener('click', () => {
  45. let nickValue = nickInput.value;
  46. let messageValue = messageInput.value;
  47. sendAndCheck(nickValue, messageValue);
  48. });
  49. checkLoop();