| <!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> |