main.js 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106
  1. // // Chat Homework
  2. // function jsonPost(url, data) {
  3. // return new Promise((resolve, reject) => {
  4. // var x = new XMLHttpRequest();
  5. // x.onerror = () => reject(new Error('jsonPost failed'))
  6. // //x.setRequestHeader('Content-Type', 'application/json')
  7. // x.open("POST", url, true);
  8. // x.send(JSON.stringify(data))
  9. // x.onreadystatechange = () => {
  10. // if (x.readyState == XMLHttpRequest.DONE && x.status == 200) {
  11. // resolve(JSON.parse(x.responseText))
  12. // }
  13. // else if (x.status != 200){
  14. // reject(new Error('status is not 200'))
  15. // }
  16. // }
  17. // })
  18. // }
  19. // // Stage 0
  20. // jsonPost("http://students.a-level.com.ua:10012", {func: 'addMessage', nick: 'Anon', message: 'Я не умею копипастить в консоль, зато умею жать красную кнопку.'})
  21. // Stage 1-4
  22. let btn = document.querySelector('#buttonBox')
  23. btn.innerText = 'Send'
  24. let nick = document.querySelector('#nicknameBox')
  25. let msg = document.querySelector('#messageBox')
  26. btn.onclick = function sendMessage() {
  27. let nick = document.querySelector('#nicknameBox').value
  28. let msg = document.querySelector('#messageBox').value
  29. jsonPost("http://students.a-level.com.ua:10012", {func: 'addMessage', nick: nick, message: msg})
  30. document.querySelector('#nicknameBox').value = ''
  31. document.querySelector('#messageBox').value = ''
  32. }
  33. function addMessage() {
  34. setInterval(function() {
  35. jsonPost("http://students.a-level.com.ua:10012", {func: 'getMessages', messageId: 0})
  36. .then (post => {console.log(post.data)
  37. for(messageId in post.data) {
  38. let chat = document.querySelector('#chatBox')
  39. let div = document.createElement('div')
  40. let p = document.createElement('p')
  41. p.innerHTML = post.data[messageId].nick + ':' + ' ' + post.data[messageId].message
  42. let t = document.createElement('time')
  43. t.innerHTML = `${new Date(post.data[messageId].timestamp).toLocaleString()}`
  44. chat.prepend(div)
  45. div.append(p)
  46. div.append(t)
  47. }
  48. messageId = post.nextMessageId})
  49. },3000)
  50. }
  51. addMessage()
  52. // Stage 5
  53. async function sendMessage(nick, msg) {
  54. jsonPost('http://students.a-level.com.ua:10012', {func: 'addMessage', nick: nick, message: msg})
  55. document.querySelector('#nicknameBox').value = ''
  56. document.querySelector('#messageBox').value = ''
  57. }
  58. async function getMessages() {
  59. jsonPost("http://students.a-level.com.ua:10012", {func: 'getMessages', messageId: 0})
  60. .then (post => {console.log(post.data)
  61. for(messageId in post.data) {
  62. let chat = document.querySelector('#chatBox')
  63. let div = document.createElement('div')
  64. let p = document.createElement('p')
  65. p.innerHTML = post.data[messageId].nick + ':' + ' ' + post.data[messageId].message
  66. let t = document.createElement('time')
  67. t.innerHTML = `${new Date(post.data[messageId].timestamp).toLocaleString()}`
  68. chat.prepend(div)
  69. div.append(p)
  70. div.append(t)
  71. }
  72. })
  73. }
  74. async function sendAndCheck() {
  75. await sendMessage(nick.value, msg.value)
  76. await getMessages()
  77. }
  78. btn.onclick = () => sendAndCheck()
  79. async function checkLoop() {
  80. getMessages()
  81. }
  82. checkLoop()
  83. // Stage 6
  84. async function jsonPost(url, data) {
  85. let response = await fetch(url, {method: 'POST', body: JSON.stringify(data)})
  86. return await response.json()
  87. }
  88. let delay = ms => new Promise(ok => {setTimeout(() => ok(ms), ms)})