Garloon

chat

Jan 10th, 2020
582
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. var token;
  2. var username;
  3. var roomId;
  4. const connection = new signalR.HubConnectionBuilder()
  5.     .withUrl("/chat", { accessTokenFactory: () => token })
  6.     .build();
  7.  
  8. document.getElementById('rooms').addEventListener('click', function (e) {
  9.     if (roomId != e.target.id) {
  10.         roomId = e.target.id;
  11.         console.log("click " + roomId);
  12.     }
  13. });
  14.  
  15. connection.on("AddToGroupList", function (roomname) {
  16.     var a = document.createElement("a");
  17.     a.setAttribute('class', 'nav-link');
  18.     a.setAttribute('id', roomname);
  19.     a.setAttribute('data-toggle', 'pill');
  20.     a.setAttribute('href', '#' + roomname + '-tab');
  21.     a.setAttribute('role', 'tab');
  22.     a.setAttribute('aria-controls', roomname);
  23.     a.setAttribute('aria-selected', 'true');
  24.     a.innerHTML = roomname;
  25.     document.getElementById("rooms").appendChild(a);
  26.  
  27.     var cr = document.createElement('div');
  28.     cr.setAttribute('class', 'tab-pane fade');
  29.     cr.setAttribute('id', roomname + '-tab');
  30.     cr.setAttribute('role', 'tabpanel');
  31.     cr.setAttribute('aria-labelledby', 'v-pills-' + roomname + '-tab');
  32.     document.getElementById("v-pills-tabContent").appendChild(cr);
  33.  
  34.     var crCard = document.createElement('div');
  35.     crCard.setAttribute('class', 'card');
  36.     cr.appendChild(crCard);
  37.  
  38.     var crH = document.createElement('div');
  39.     crH.setAttribute('class', 'card-header msg_head');
  40.     crH.innerText = roomname;
  41.     crCard.appendChild(crH);
  42.  
  43.     var crB = document.createElement('div');
  44.     crB.setAttribute('class', 'card-body msg_card_body');
  45.     crCard.appendChild(crB);
  46.  
  47.     var crBR = document.createElement('div');
  48.     crBR.setAttribute('id', 'chatroom-' + roomname);
  49.     crB.appendChild(crBR);
  50.  
  51.     var crF = document.createElement('div');
  52.     crF.setAttribute('class', 'card-footer');
  53.     crCard.appendChild(crF);
  54.  
  55.     var crFInp = document.createElement('div');
  56.     crFInp.setAttribute('class', 'input-group-append');
  57.     crF.appendChild(crFInp);
  58.  
  59.     var crFTA = document.createElement('textarea');
  60.     crFTA.setAttribute('class', 'form-control type_msg');
  61.     crFTA.setAttribute('id', 'message-text-' + roomname);
  62.     crFTA.setAttribute('placeholder', 'Введите сообщение...');
  63.     crFInp.appendChild(crFTA);
  64.  
  65.     var crFS = document.createElement('span');
  66.     crFS.setAttribute('class', 'input-group-text send_btn');
  67.     crFS.setAttribute('id', 'msg-' + roomname);
  68.     crFS.setAttribute('style', 'display:block');
  69.     crFInp.appendChild(crFS);
  70.  
  71.     var crFSI = document.createElement('i');
  72.     crFSI.setAttribute('class', 'fa fa-location-arrow');
  73.     crFS.appendChild(crFSI);
  74. });
  75.  
  76. connection.on("Send", function (message) {
  77.     var p = document.createElement("p");
  78.     p.textContent = message;
  79.     document.getElementById("chatroom-" + roomId).appendChild(p);
  80. });
  81.  
  82. document.getElementById("msg-" + roomId).addEventListener("click", async (event) => {
  83.     var msg = document.getElementById("message-text-" + roomId).value;
  84.     try {
  85.         await connection.invoke("SendMessageToGroup", roomId, msg);
  86.     }
  87.     catch (e) {
  88.         console.error(e.toString());
  89.     }
  90.     event.preventDefault();
  91. });
  92.  
  93. document.getElementById("loginBtn").addEventListener("click", function (e) {
  94.     var request = new XMLHttpRequest();
  95.     // посылаем запрос на адрес "/token", в ответ получим токен и имя пользователя
  96.     request.open("POST", "/token", true);
  97.     request.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
  98.     request.addEventListener("load", function () {
  99.  
  100.         if (request.status < 400) { // если запрос успешный
  101.  
  102.             let data = JSON.parse(request.response);   // парсим ответ  
  103.             token = data.access_token;
  104.             username = data.username;
  105.  
  106.             document.getElementById("authForm").style.display = "none";
  107.             document.getElementById("sendMessageBlock").style.display = "block";
  108.  
  109.             (async () => {
  110.                 try {
  111.                     await connection.start();
  112.                     var userLogin = document.getElementById("userName").value;
  113.                     var userPassword = document.getElementById("userPassword").value;
  114.                     connection.invoke('Login', userLogin, userPassword);
  115.                 }
  116.                 catch (e) {
  117.                     console.error(e.toString());
  118.                 }
  119.             })();
  120.         }
  121.     });
  122.     // отправляем запрос на аутентификацию
  123.     request.send("username=" + document.getElementById("userName").value +
  124.         "&password=" + document.getElementById("userPassword").value);
  125. });
  126.  
  127. document.getElementById("regBtn").addEventListener("click", function (e) {
  128.  
  129.     userName = document.getElementById("rUserName").value;
  130.     userLogin = document.getElementById("rUserLogin").value;
  131.     userPassword = document.getElementById("rUserPassword").value;
  132.  
  133.     document.getElementById("authForm").style.display = "block";
  134.     document.getElementById("regForm").style.display = "none";
  135.     document.getElementById("sendMessageBlock").style.display = "none";
  136.  
  137.     connection.invoke('Register', userName, userLogin, userPassword);
  138.  
  139.     connection.stop();
  140. });
  141.  
  142. document.getElementById("qweBtn").addEventListener("click", function (e) {
  143.     document.getElementById("authForm").style.display = "none";
  144.     document.getElementById("regForm").style.display = "block";
  145.     document.getElementById("sendMessageBlock").style.display = "none";
  146.  
  147.     connection.start()       // начинаем соединение с хабом
  148.         .catch(err => {
  149.             console.error(err.toString());
  150.         });
  151. });
Advertisement
Add Comment
Please, Sign In to add comment