<!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>