main.js 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990
  1. let $nickname = document.querySelector('#nick')
  2. let sendBtn = document.querySelector('#sendButton');
  3. let $msg = document.querySelector('#msg')
  4. let msgHolder = document.querySelector('#msgHolder')
  5. function jsonPost(url, data) {
  6. return new Promise((resolve, reject) => {
  7. var x = new XMLHttpRequest();
  8. x.onerror = () => reject(new Error('jsonPost failed'))
  9. x.open("POST", url, true);
  10. x.send(JSON.stringify(data))
  11. x.onreadystatechange = () => {
  12. if (x.readyState === XMLHttpRequest.DONE && x.status === 200){
  13. resolve(JSON.parse(x.responseText))
  14. }
  15. else if (x.status !== 200){
  16. reject(new Error('status is not 200'))
  17. }
  18. }
  19. })
  20. }
  21. function messageDataCreator(message) {
  22. return {
  23. func: 'addMessage',
  24. nick: $nickname.value,
  25. message: message,
  26. }
  27. }
  28. function showMessagesList(arr) {
  29. let $container = document.createElement('div')
  30. for(let msg of arr) {
  31. let $div = document.createElement('div')
  32. $div.className = 'msg'
  33. let $p1 = document.createElement('p')
  34. let $p2 = document.createElement('p')
  35. $p1.innerHTML = msg.nick + ':'
  36. $p2.innerHTML = msg.message
  37. $div.append($p1, $p2)
  38. $container.append($div)
  39. }
  40. msgHolder.prepend($container)
  41. }
  42. async function fetchData() {
  43. let id = 0;
  44. let resp = await jsonPost("http://students.a-level.com.ua:10012", {func: "getMessages", messageId: id})
  45. let {data} = await resp
  46. id = resp.nextMessageId
  47. let list = data.slice(data.length - 50).reverse()
  48. showMessagesList(list)
  49. async function updMessages() {
  50. let resp = await jsonPost("http://students.a-level.com.ua:10012", {func: "getMessages", messageId: id})
  51. let res = await resp
  52. if(res.nextMessageId > id) {
  53. id = res.nextMessageId
  54. showMessagesList(res.data)
  55. }
  56. }
  57. let interval = setInterval(async () => {
  58. await updMessages()
  59. }, 3000)
  60. sendBtn.onclick = async () => {
  61. let resp = await jsonPost("http://students.a-level.com.ua:10012",
  62. messageDataCreator($msg.value)
  63. )
  64. $msg.value = ''
  65. }
  66. return list
  67. }
  68. function getSomeData(data) {
  69. let currentData = data
  70. return function (){
  71. return currentData
  72. }
  73. }
  74. async function chatMaker() {
  75. showMessagesList(await fetchData())
  76. }
  77. chatMaker()