stage5.js 1.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162
  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 sendMessage(nick, message);
  38. getMessages();
  39. }
  40. const checkLoop = async () => {
  41. await delay(5000);
  42. getMessages();
  43. checkLoop();
  44. }
  45. sendButton.addEventListener('click', () => {
  46. let nickValue = nickInput.value;
  47. let messageValue = messageInput.value;
  48. sendAndCheck(nickValue, messageValue);
  49. });
  50. checkLoop();