chatclient.html 范例文件

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>