1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126
|
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<meta charset="UTF-8" />
<link href="data:image/x-icon;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQEAYAAABPYyMiAAAABmJLR0T///////8JWPfcAAAACXBIWXMAAABIAAAASABGyWs+AAAAF0lEQVRIx2NgGAWjYBSMglEwCkbBSAcACBAAAeaR9cIAAAAASUVORK5CYII=" rel="icon" type="image/x-icon" />
<script type="text/javascript" src="lib/sockjs.js"></script>
<script type="text/javascript" src="static/jquery.min.js"></script>
<script type="text/javascript" src="config.js"></script>
</head>
<body>
<form>
<select id="transport">
<option value="">- any - </option>
<option value="websocket">websocket</option>
<option value="xdr-streaming">xdr-streaming</option>
<option value="xhr-streaming">xhr-streaming</option>
<option value="eventsource">eventsource</option>
<option value="iframe-eventsource">iframe-eventsource</option>
<option value="htmlfile">htmlfile</option>
<option value="iframe-htmlfile">iframe-htmlfile</option>
<option value="xdr-polling">xdr-polling</option>
<option value="xhr-polling">xhr-polling</option>
<option value="iframe-xhr-polling">iframe-xhr-polling</option>
<option value="jsonp-polling">jsonp-polling</option>
</select>
<input type="checkbox" id="sameOrigin" checked>Same Origin?
<input type="button" value="Connect" id="connect">
<input type="button" value="Disconnect" id="disconnect" disabled="yes">
</form>
Latency: <code id="latency"></code><br>
<code id="logs" style="height:200px; overflow:auto; display: block; border: 1px gray solid;">
</code>
<script>
/* global $, clientOptions */
'use strict';
function log(a) {
if ('console' in window && 'log' in window.console) {
console.log(a);
}
$('#logs').append($('<code>').text(a));
$('#logs').append($('<br>'));
$('#logs').scrollTop($('#logs').scrollTop() + 10000);
}
var worker;
function send() {
worker.postMessage(JSON.stringify({ type: 'message', data: JSON.stringify({ t: (new Date()).getTime()}) }));
}
function onopen() {
log('connected');
$('#sameOrigin').attr('disabled', true);
send();
}
function onclose(code, reason) {
log('disconnected ' + code + ', ' + reason);
$('#connect').each(function(_,e){
e.disabled = '';
});
$('#disconnect').attr('disabled', true);
$('#sameOrigin').attr('disabled', false);
}
var i = 0;
function xonmessage(e) {
var msg = JSON.parse(e);
var td = (new Date()).getTime() - msg.t;
$('#latency').text('' + i + ' ' + td + ' ms');
i += 1;
send();
}
$('#connect').click(function() {
$('#connect').attr('disabled', true);
$('#disconnect').each(function(_,e){
e.disabled = '';
});
var transport = $('#transport').val() || undefined;
log('[connecting] ' + transport);
var url;
if ($('#sameOrigin').prop('checked')) {
if (window.location.origin) {
url = window.location.origin;
} else {
url = window.location.protocol + '//' + window.location.hostname +
(window.location.port ? ':' + window.location.port : '');
}
} else {
url = clientOptions.url;
}
worker = new Worker('lib/worker.js');
worker.onmessage = function (e) {
var msg = JSON.parse(e.data);
switch (msg.type) {
case 'message':
xonmessage(msg.data);
break;
case 'open':
onopen();
break;
case 'close':
onclose(msg.code, msg.reason);
break;
case 'error':
console.error(msg.data);
break;
default:
console.error('unknown type: ' + msg.type);
}
};
worker.postMessage(JSON.stringify({ type: 'open', url: url + '/echo', transports: transport }));
});
$('#disconnect').click(function() {
$('#disconnect').attr('disabled', true);
log('[disconnecting]');
worker.postMessage(JSON.stringify({ type: 'close' }));
});
</script>
</body>
</html>
|