LenDoc 2 years ago
parent
commit
0cf37ed17b
3 changed files with 142 additions and 0 deletions
  1. 23 0
      js/14/index.html
  2. 43 0
      js/14/main.css
  3. 76 0
      js/14/main.js

+ 23 - 0
js/14/index.html

@@ -0,0 +1,23 @@
+<!DOCTYPE html>
+<html lang="en">
+
+<head>
+    <meta charset="UTF-8">
+    <meta http-equiv="X-UA-Compatible" content="IE=edge">
+    <meta name="viewport" content="width=device-width, initial-scale=1.0">
+    <title> CHATik </title>
+    <link rel="stylesheet" href="main.css">
+</head>
+
+<body>
+    <div id='formContainer'>
+    </div>
+    <input type="text" name="nick" placeholder="nick" id="nick">
+    <input type="text" name="message" placeholder="message" id="message">
+    <button id="send"> SEND </button>
+    </div>
+    <div id="chat"></div>
+    <script src="main.js"></script>
+</body>
+
+</html>

+ 43 - 0
js/14/main.css

@@ -0,0 +1,43 @@
+body {
+    font-size: medium;
+    font-family: Verdana;
+    margin: 10px;
+    padding: 10px;
+}
+
+div {
+    color: rgb(6, 58, 55);
+    background-color: white;
+    width: 400px;
+}
+
+input {
+    border: 2px solid rgb(9, 52, 71);
+    border-radius: 4px;
+    height: 50px;
+    width: 300px;
+    font-size: medium;
+    font-family: Verdana;
+}
+
+input[type=text]:focus {
+    background-color: rgb(220, 235, 240);
+}
+
+button {
+    border-radius: 12px;
+    cursor: pointer;
+    border-radius: 5px;
+    text-align: center;
+    background-color: #e7e7e7;
+    color: black;
+    /* Gray */
+    height: 50px;
+    width: 100px;
+    font-size: 20px;
+    font-family: Verdana;
+}
+
+button:hover {
+    box-shadow: 0 12px 16px 0 rgba(124, 108, 108, 0.24), 0 17px 50px 0 rgba(0, 0, 0, 0.19);
+}

+ 76 - 0
js/14/main.js

@@ -0,0 +1,76 @@
+var inputNick = document.getElementById('nick')
+var inputMessage = document.getElementById('message')
+var sendBtn = document.getElementById('send')
+const divChat = document.getElementById('chat')
+async function sendMessage(sendNick, sendMessage) {
+
+    await jsonPost("http://students.a-level.com.ua:10012", { func: 'addMessage', nick: sendNick, message: sendMessage })
+}
+sendBtn.onclick = async function sendAndCheck() {
+    sendMessage(inputNick.value, inputMessage.value)
+    getMessages()
+}
+let nextMessageId = 0
+async function getMessages() {
+    let resMessageId;
+    await jsonPost("http://students.a-level.com.ua:10012", { func: 'getMessages', messageId: nextMessageId }).then(res => {
+        res.data.forEach(element => {
+            var div = document.createElement("div");
+
+            div.innerHTML = ("<br> <b> nick : " + (element.nick ? element.nick : "Anon") + "<br> </b> message : " +
+                (element.message ? element.message : "Empty message") + ("<br> time : " + new Date((element.timestamp)).toLocaleString()))
+            divChat.prepend(div)
+        })
+        resMessageId = res.nextMessageId
+    });
+    //console.log("nextMes перед проверкой", nextMessageIdFirst)
+    if (resMessageId > nextMessageId) {
+        nextMessageId = resMessageId
+    }
+    // console.log("nextMess после проверки", nextMessageIdFirst)
+
+}
+const delay = ms => {
+    return new Promise(resolve => setTimeout(() => resolve(), ms))
+}
+async function checkLoop() {
+    await getMessages().then(() => delay(2000)).then(checkLoop)
+}
+
+checkLoop()
+
+// function jsonPost(url, data) {
+//     return new Promise((resolve, reject) => {
+//         var x = new XMLHttpRequest();
+//         x.onerror = () => reject(new Error('jsonPost failed'))
+//             //x.setRequestHeader('Content-Type', 'application/json');
+//         x.open("POST", url, true);
+//         x.send(JSON.stringify(data))
+
+//         x.onreadystatechange = () => {
+//             if (x.readyState == XMLHttpRequest.DONE && x.status == 200) {
+//                 resolve(JSON.parse(x.responseText))
+//             } else if (x.status != 200) {
+//                 reject(new Error('status is not 200'))
+//             }
+//         }
+//     })
+// }
+
+//Прогуглить и разобраться с fetch и заменить внутренности jsonPost на код, использующий fetch вместо XMLHttpRequest
+
+async function jsonPost(url, data) {
+    try {
+        const response = await fetch(url, {
+            method: 'POST',
+            body: JSON.stringify(data)
+        })
+        if (response.ok) {
+            const postJson = await response.json()
+            return postJson
+        }
+
+    } catch (error) {
+        throw new Error('Error: ', error)
+    }
+}