300 lines
10 KiB
HTML
300 lines
10 KiB
HTML
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
|
|
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
|
|
<html xmlns="http://www.w3.org/1999/xhtml">
|
|
<head>
|
|
<link type="text/css" rel="stylesheet" media="all" href="screen.css" />
|
|
<script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js"></script>
|
|
<script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/swfobject/2.2/swfobject.js"></script>
|
|
<script type="text/javascript" src="forge/util.js"></script>
|
|
<script type="text/javascript" src="forge/socket.js"></script>
|
|
<script type="text/javascript" src="forge/log.js"></script>
|
|
|
|
<script type="text/javascript">
|
|
//<![CDATA[
|
|
// logging category
|
|
var cat = 'forge.tests.socketPool';
|
|
|
|
// feedback types
|
|
var ERROR = '';
|
|
var USER = 'user';
|
|
var SOCKETPOOL = 'socketpool'
|
|
var SOCKET = 'socket'
|
|
|
|
function addFeedback(type, text)
|
|
{
|
|
var row = $('<tr/>')
|
|
.append($('<td/>').html(' '))
|
|
.append($('<td/>').html(' '))
|
|
.append($('<td/>').html(' '));
|
|
switch(type)
|
|
{
|
|
case USER:
|
|
row.children().eq(0).html(text);
|
|
break;
|
|
case SOCKETPOOL:
|
|
row.children().eq(1).html(text);
|
|
break;
|
|
case SOCKET:
|
|
row.children().eq(2).html(text);
|
|
break;
|
|
default:
|
|
var msg = 'ERROR: bad feedback type:' + type;
|
|
row.children().eq(1).html(msg);
|
|
forge.log.error(cat, msg);
|
|
}
|
|
$('#feedback').append(row);
|
|
forge.log.debug(cat, '[' + type + ']', text);
|
|
};
|
|
|
|
function _setState(stateSel)
|
|
{
|
|
$('.sp-control').filter(stateSel).removeAttr('disabled');
|
|
$('.sp-control').filter(':not(' + stateSel + ')').attr('disabled', 'disabled');
|
|
$('.sp-state').filter(stateSel).addClass('sp-state-on');
|
|
$('.sp-state').filter(':not(' + stateSel + ')').removeClass('sp-state-on');
|
|
};
|
|
|
|
function setState(state)
|
|
{
|
|
switch(state)
|
|
{
|
|
case 'ready':
|
|
_setState('.sp-ready');
|
|
break;
|
|
case 'initialized':
|
|
_setState('.sp-ready,.sp-initialized');
|
|
break;
|
|
case 'created':
|
|
_setState('.sp-ready,.sp-initialized,.sp-created');
|
|
break;
|
|
case 'connected':
|
|
_setState('.sp-ready,.sp-initialized,.sp-created,.sp-connected');
|
|
break;
|
|
default:
|
|
addFeedback(ERROR, 'ERROR: bad state: ' + state);
|
|
};
|
|
};
|
|
|
|
window.forge.socketPool =
|
|
{
|
|
ready: function()
|
|
{
|
|
$(document).ready(function() {
|
|
addFeedback(SOCKETPOOL, 'Ready');
|
|
setState('ready');
|
|
});
|
|
}
|
|
};
|
|
|
|
swfobject.embedSWF(
|
|
"forge/SocketPool.swf", "socketPool", "0", "0", "9.0.0",
|
|
false, {}, {allowscriptaccess: 'always'}, {});
|
|
|
|
// local alias
|
|
var net = window.forge.net;
|
|
|
|
// socket to use
|
|
var socket;
|
|
|
|
$(document).ready(function() {
|
|
addFeedback(USER, 'Ready');
|
|
$('#host').val(window.location.hostname);
|
|
$('#port').val(window.location.port);
|
|
});
|
|
|
|
function sp_init()
|
|
{
|
|
net.createSocketPool({
|
|
flashId: 'socketPool',
|
|
policyPort: parseInt($('#policyPort').val()),
|
|
msie: false
|
|
});
|
|
addFeedback(SOCKETPOOL, 'Initialized');
|
|
setState('initialized');
|
|
return false;
|
|
};
|
|
|
|
function sp_cleanup()
|
|
{
|
|
net.destroySocketPool({flashId: 'socketPool'});
|
|
addFeedback(SOCKETPOOL, 'Cleaned up');
|
|
setState('ready');
|
|
return false;
|
|
};
|
|
|
|
function sp_create()
|
|
{
|
|
socket = net.createSocket({
|
|
flashId: 'socketPool',
|
|
connected: function(e)
|
|
{
|
|
forge.log.debug(cat, 'connected', e);
|
|
addFeedback(SOCKET, 'Connected');
|
|
},
|
|
closed: function(e)
|
|
{
|
|
forge.log.debug(cat, 'closed', e);
|
|
addFeedback(SOCKET, 'Closed. Type: ' + e.type);
|
|
setState('created');
|
|
},
|
|
data: function(e)
|
|
{
|
|
forge.log.debug(cat, 'data received', e);
|
|
forge.log.debug(cat, 'bytes available', socket.bytesAvailable());
|
|
addFeedback(SOCKET,
|
|
'Data available: ' +
|
|
socket.bytesAvailable() +' bytes');
|
|
var bytes = socket.receive(e.bytesAvailable);
|
|
forge.log.debug(cat, 'bytes received', bytes);
|
|
},
|
|
error: function(e)
|
|
{
|
|
forge.log.error(cat, 'error', e);
|
|
addFeedback(SOCKET, 'Error: ' + e);
|
|
}
|
|
});
|
|
addFeedback(SOCKETPOOL, 'Created socket');
|
|
setState('created');
|
|
return false;
|
|
};
|
|
|
|
function sp_destroy()
|
|
{
|
|
socket.destroy();
|
|
addFeedback(USER, 'Request socket destroy');
|
|
setState('initialized');
|
|
return false;
|
|
};
|
|
|
|
function sp_connect()
|
|
{
|
|
socket.connect({
|
|
host: $('#host').val(),
|
|
port: parseInt($('#port').val()),
|
|
policyPort: parseInt($('#policyPort').val())
|
|
});
|
|
addFeedback(USER, 'Request socket connect');
|
|
setState('connected');
|
|
};
|
|
|
|
function sp_isConnected()
|
|
{
|
|
var connected = socket.isConnected();
|
|
addFeedback(USER, 'Socket connected check: ' + connected);
|
|
};
|
|
|
|
function sp_send()
|
|
{
|
|
socket.send('GET ' + $('#path').val() + ' HTTP/1.0\r\n\r\n');
|
|
addFeedback(USER, 'Send GET request');
|
|
};
|
|
|
|
function sp_close()
|
|
{
|
|
socket.close();
|
|
addFeedback(USER, 'Requst socket close');
|
|
setState('created');
|
|
};
|
|
//]]>
|
|
</script>
|
|
</head>
|
|
<body>
|
|
<div class="nav"><a href="index.html">Forge Tests</a> / SocketPool</div>
|
|
|
|
<div class="header">
|
|
<h1>SocketPool Test</h1>
|
|
</div>
|
|
|
|
<div class="content">
|
|
<!-- div used to hold the flash socket pool implemenation -->
|
|
<div id="socketPool">
|
|
<p>Could not load the flash SocketPool.</p>
|
|
</div>
|
|
|
|
<fieldset class="section">
|
|
<ul>
|
|
<li>This page tests a single socket connection to the local test server.</li>
|
|
<li>Note that the selected server must serve a Flash cross-domain policy file on the selected policy port.</li>
|
|
<li>Additional output available in the JavaScript console.</li>
|
|
</ul>
|
|
</fieldset>
|
|
|
|
<fieldset class="section">
|
|
<legend>State</legend>
|
|
<p>State:
|
|
<span class="sp-state sp-ready">Ready</span> »
|
|
<span class="sp-state sp-initialized">Initialized</span> »
|
|
<span class="sp-state sp-created">Created</span> »
|
|
<span class="sp-state sp-connected">Connected</span>
|
|
</p>
|
|
</fieldset>
|
|
|
|
<fieldset class="section">
|
|
<legend>Controls</legend>
|
|
<div id="controls">
|
|
<table>
|
|
<tr><th>Action</th><th>Description</th></tr>
|
|
<tr>
|
|
<td><button id="init" disabled="disabled" class="sp-control sp-ready"
|
|
onclick="javascript:return sp_init();">init</button></td>
|
|
<td>Initialize SocketPool system.</td>
|
|
</tr>
|
|
<tr>
|
|
<td><button id="cleanup" disabled="disabled" class="sp-control sp-initialized"
|
|
onclick="javascript:return sp_cleanup();">cleanup</button></td>
|
|
<td>Cleanup SocketPool system.</td>
|
|
</tr>
|
|
<tr>
|
|
<td><button id="create" disabled="disabled" class="sp-control sp-initialized"
|
|
onclick="javascript:return sp_create();">create socket</button></td>
|
|
<td>Create a new test socket.</td>
|
|
</tr>
|
|
<tr>
|
|
<td><button id="destroy" disabled="disabled" class="sp-control sp-created"
|
|
onclick="javascript:return sp_destroy();">destroy socket</button></td>
|
|
<td>Destroy the test socket.</td>
|
|
</tr>
|
|
<tr>
|
|
<td><button id="connect" disabled="disabled" class="sp-control sp-created"
|
|
onclick="javascript:return sp_connect();">connect</button></td>
|
|
<td>Connect the socket to
|
|
host: <input id="host"/>
|
|
port: <input id="port"/>
|
|
policy port: <input id="policyPort" value="19945"/>
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td><button id="isConnected" disabled="disabled" class="sp-control sp-created"
|
|
onclick="javascript:return sp_isConnected();">is connected</button></td>
|
|
<td>Check if socket is connected.</td>
|
|
</tr>
|
|
<tr>
|
|
<td><button id="send" disabled="disabled" class="sp-control sp-connected"
|
|
onclick="javascript:return sp_send();">send</button></td>
|
|
<td>Send a GET request for
|
|
path: <input id="path" value="/"/>
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td><button id="close" disabled="disabled" class="sp-control sp-connected"
|
|
onclick="javascript:return sp_close();">close</button></td>
|
|
<td>Close the test socket.</td>
|
|
</tr>
|
|
</table>
|
|
</div>
|
|
</fieldset>
|
|
|
|
<fieldset class="section">
|
|
<legend>Feedback</legend>
|
|
<table id="feedback">
|
|
<tr>
|
|
<th>User</th>
|
|
<th>SocketPool</th>
|
|
<th>Socket</th>
|
|
</tr>
|
|
</table>
|
|
</fieldset>
|
|
</div>
|
|
</body>
|
|
</html>
|