stage4.js 1.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950
  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 addZero = data => data < 10 ? `0${data}` : data;
  21. const buildDate = date => `${date.getDate()}/${date.getMonth()+1}/${date.getFullYear()} ${addZero(date.getHours())}:${addZero(date.getMinutes())}:${addZero(date.getSeconds())}`;
  22. const buildMessage = (nick, message, time) => {
  23. return `<p>nick - ${nick}, message - ${message}, date - ${buildDate(new Date(time))}</p>`;
  24. }
  25. const getMessages = () => {
  26. let messagesArray = jsonPost(url, {func: 'getMessages', messageId: nextId});
  27. messagesArray.then(messages => {
  28. for (const message of messages.data) {
  29. chatMessages.insertAdjacentHTML('afterbegin', buildMessage(message.nick, message.message, message.timestamp));
  30. }
  31. nextId = messages.nextMessageId;
  32. });
  33. }
  34. const sendMessage = (nick, message) => jsonPost(url, {func: 'addMessage', nick: nick, message: message});
  35. sendButton.addEventListener('click', () => {
  36. let nickValue = nickInput.value;
  37. let messageValue = messageInput.value;
  38. sendMessage(nickValue, messageValue);
  39. getMessages();
  40. });
  41. setInterval(getMessages, 5000);