<html>
<head>
    <title>Web Sockets Demo</title>

    <script src="libs/jquery-2.1.1.min.js"></script>

    <script type='text/javascript'>
        if (!window.WebSocket)
            alert("WebSocket not supported by this browser");

        var server = {
            connect : function() {
                var location = document.location.toString().replace('http://',
                        'ws://').replace('https://', 'wss://').replace('ws.html','ws/topology');
                this.ws = new WebSocket(location);

                this.ws.onopen = function() {
                    server._send("Hi there!");
                };

                this.ws.onmessage = function(m) {
                    if (m.data) {
                        $('#log').append(m.data).append($('<br/>'));
                    }
                };

                this.ws.onclose = function(m) {
                    this.ws = null;
                };
            },

            _send : function(message) {
                if (this.ws) {
                    this.ws.send(message);
                }
            },

            send : function(text) {
                if (text != null && text.length > 0) {
                    server._send(text);
                }
            }
        };
    </script>
</head>
<body>
<pre id='log'></pre>

<script type='text/javascript'>
    server.connect();
</script>

</body>
</html>
