97 lines
2.8 KiB
HTML
97 lines
2.8 KiB
HTML
|
<!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>
|