| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596 | <!doctype html><html><head>    <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js"></script>    <script src="http://cdn.jsdelivr.net/sockjs/1.0.1/sockjs.min.js"></script>    <script src="http://cdn.sockjs.org/websocket-multiplex-0.1.js"></script>    <style>      .box {          width: 300px;          float: left;          margin: 0 20px 0 20px;      }      .box div, .box input {          border: 1px solid;          -moz-border-radius: 4px;          border-radius: 4px;          width: 100%;          padding: 0px;          margin: 5px;      }      .box div {          border-color: grey;          height: 300px;          overflow: auto;      }      .box input {          height: 30px;      }      h1 {          margin-left: 75px;      }      body {          background-color: #F0F0F0;          font-family: "Arial";      }    </style></head><body lang="en">    <h1>SockJS Multiplex example</h1>    <div id="first" class="box">      <div></div>      <form><input autocomplete="off" value="Type here..."></input></form>    </div>    <div id="second" class="box">      <div></div>      <form><input autocomplete="off"></input></form>    </div>    <div id="third" class="box">      <div></div>      <form><input autocomplete="off"></input></form>    </div>    <script>        // Pipe - convenience wrapper to present data received from an        // object supporting WebSocket API in an html element. And the other        // direction: data typed into an input box shall be sent back.        var pipe = function(ws, el_name) {            var div  = $(el_name + ' div');            var inp  = $(el_name + ' input');            var form = $(el_name + ' form');            var print = function(m, p) {                p = (p === undefined) ? '' : JSON.stringify(p);                div.append($("<code>").text(m + ' ' + p));                div.append($("<br>"));                div.scrollTop(div.scrollTop() + 10000);            };            ws.onopen    = function()  {print('[*] open', ws.protocol);};            ws.onmessage = function(e) {print('[.] message', e.data);};            ws.onclose   = function()  {print('[*] close');};            form.submit(function() {                print('[ ] sending', inp.val());                ws.send(inp.val());                inp.val('');                return false;            });        };        var sockjs_url = '/multiplex';        var sockjs = new SockJS(sockjs_url);        var multiplexer = new WebSocketMultiplex(sockjs);        var ann  = multiplexer.channel('ann');        var bob  = multiplexer.channel('bob');        var carl = multiplexer.channel('carl');        pipe(ann,  '#first');        pipe(bob,  '#second');        pipe(carl, '#third');        $('#first input').focus();    </script></body></html>
 |