chatclient.html Example File

chatclient-html/chatclient.html

  <!DOCTYPE html>
  <html>
  <head>
      <title>ChatClient</title>

      <meta name="viewport" content="width=device-width, initial-scale=1" />

      <link rel="stylesheet" href="http://code.jquery.com/mobile/1.4.2/jquery.mobile-1.4.2.css" />
      <link rel="stylesheet" type="text/css" href="http://www.jeasyui.com/easyui/themes/default/easyui.css" />
      <link rel="stylesheet" type="text/css" href="http://www.jeasyui.com/easyui/themes/icon.css" />
      <link rel="stylesheet" type="text/css" href="http://www.jeasyui.com/easyui/demo/demo.css" />
      <script src="http://code.jquery.com/jquery-1.9.1.js"></script>
      <script type="text/javascript" src="http://www.jeasyui.com/easyui/jquery.easyui.min.js"></script>
      <script type="text/javascript" src="qwebchannel.js"></script>

      <script>
          'use strict';
          var wsUri = "ws://localhost:12345";
          window.loggedin = false;

          window.onload = function() {
              var socket = new WebSocket(wsUri);

              socket.onclose = function()
              {
                  console.error("web channel closed");
              };
              socket.onerror = function(error)
              {
                  console.error("web channel error: " + error);
              };
              socket.onopen = function()
              {
                  window.channel = new QWebChannel(socket, function(channel) {
                      //connect to the changed signal of a property
                      channel.objects.chatserver.userListChanged.connect(function() {
                          $('#userlist').empty();
                          //access the property
                          channel.objects.chatserver.userList.forEach(function(user) {
                              $('#userlist').append(user + '<br>');
                          });
                      });
                      //connect to a signal
                      channel.objects.chatserver.newMessage.connect(function(time, user, message) {
                          $('#chat').append("[" + time + "] " + user + ": " +  message + '<br>');
                      });
                      //connect to a signal
                      channel.objects.chatserver.keepAlive.connect(function(args) {
                          if(window.loggedin) {
                              //call a method
                              channel.objects.chatserver.keepAliveResponse($('#loginname').val())
                              console.log("sent alive");
                          }
                      });

                  });
              }
          }
      </script>
  </head>
  <body>

  <div id="loginDialog" class="easyui-dialog" title="Chat Login" data-options="iconCls:'icon-save'" style="width:400px;height:200px;padding:10px">
      <form id="loginForm" method="post">
          <table cellpadding="5">
          <tr><td>Name:</td><td><input class="easyui-validatebox" type="text" id="loginname" name="name" data-options="required:true"></input></td></tr>
          </table>
      </form>
      <div style="text-align:center;padding:5px">
          <a href="javascript:void(0)" class="easyui-linkbutton" onclick="submitForm()">Login</a>
      </div>
      <div style="text-align:center;padding:5px" id="loginError">
          Username already in use.
      </div>
      <script>
      $('#loginForm').submit(submitForm);
      function submitForm(event) {
          console.log("DEBUG login: " + channel);
          channel.objects.chatserver.login($('#loginname').val(), function(arg) {
              console.log("DEBUG login response: " + arg);
              if(arg === true) {
                  $('#loginError').hide();
                  $('#loginDialog').dialog('close');
                  window.loggedin = true;
              } else {
                  $('#loginError').show();
              }
          });
          console.log($('#loginname').val());
          if(event !== undefined)
              event.preventDefault();
          return false;

      }
      </script>
  </div>

  <div class="easyui-layout" style="width:500px;height:300px;">
      <div data-options="region:'east',split:true" title="Users" id="userlist" style="width:100px;">

      </div>
      <div data-options="region:'south',split:true" style="height:50px;">
          <form id="messageForm">
              <input class="easyui-validatebox" type="text" id="message" name="name" style="width: 97%"></input>
          </form>
      </div>
      <div data-options="region:'center'" id="chat">

      </div>
      <script>
      $('#messageForm').submit(submitMessage);
      function submitMessage(event) {
          channel.objects.chatserver.sendMessage($('#loginname').val(), $('#message').val());
          $('#message').val('');
          if(event !== undefined)
              event.preventDefault();
          return false;
      }
      </script>
  </div>

  <script type="text/javascript">
  $(document).ready(function(){
      $('#loginError').hide();
  });
  </script>

  </body>
  </html>