You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tomcat.apache.org by kp...@apache.org on 2013/10/10 16:21:24 UTC
svn commit: r1530989 -
/tomcat/trunk/webapps/examples/websocket/drawboard.xhtml
Author: kpreisser
Date: Thu Oct 10 14:21:24 2013
New Revision: 1530989
URL: http://svn.apache.org/r1530989
Log:
Rather than only be able to pause websocket message, pause entire calls to event handler so that we can also pause the socket.onclose event handler.
Modified:
tomcat/trunk/webapps/examples/websocket/drawboard.xhtml
Modified: tomcat/trunk/webapps/examples/websocket/drawboard.xhtml
URL: http://svn.apache.org/viewvc/tomcat/trunk/webapps/examples/websocket/drawboard.xhtml?rev=1530989&r1=1530988&r2=1530989&view=diff
==============================================================================
--- tomcat/trunk/webapps/examples/websocket/drawboard.xhtml (original)
+++ tomcat/trunk/webapps/examples/websocket/drawboard.xhtml Thu Oct 10 14:21:24 2013
@@ -106,49 +106,44 @@
function Room(drawContainer) {
- /* A pausable message handler that can be used for
- * the WebSocket's onmessage event (e.g. when we need to wait
+ /* A pausable event forwarder that can be used to pause and
+ * resume handling of events (e.g. when we need to wait
* for a Image's load event before we can process further
* WebSocket messages).
- * The object's handleMessageInternal(message) method
- * should be called from socket.onmessage.
- * The object's messageHandler should be set to the
- * function which is actually processing the message.
- * Call pauseMessageProcessing() to pause processing and
- * resumeMessageProcessing() to resume it.
+ * The object's callFunction(func) should be called from an
+ * event handler and give the function to handle the event as
+ * argument.
+ * Call pauseProcessing() to suspend event forwarding and
+ * resumeProcessing() to resume it.
*/
- function PausableMessageHandler() {
+ function PausableEventForwarder() {
- var pauseMessageProcessing = false;
- // Queue for buffering incoming messages until they
- // can be processed.
- var messageQueue = [];
+ var pauseProcessing = false;
+ // Queue for buffering functions to be called.
+ var functionQueue = [];
-
- this.messageHandler = function(message) { };
-
- this.handleMessageInternal = function(message) {
+ this.callFunction = function(func) {
// If message processing is paused, we push it
// into the queue - otherwise we process it directly.
- if (pauseMessageProcessing) {
- messageQueue.push(message);
+ if (pauseProcessing) {
+ functionQueue.push(func);
} else {
- this.messageHandler(message);
+ func();
}
};
- this.pauseMessageProcessing = function() {
- pauseMessageProcessing = true;
+ this.pauseProcessing = function() {
+ pauseProcessing = true;
};
- this.resumeMessageProcessing = function() {
- pauseMessageProcessing = false;
+ this.resumeProcessing = function() {
+ pauseProcessing = false;
- // Process all queued messages until some handler calls
- // pauseMessageProcessing() again.
- while (messageQueue.length > 0 && !pauseMessageProcessing) {
- var msg = messageQueue.pop();
- this.messageHandler(msg);
+ // Process all queued functions until some handler calls
+ // pauseProcessing() again.
+ while (functionQueue.length > 0 && !pauseProcessing) {
+ var func = functionQueue.pop();
+ func();
}
};
}
@@ -254,16 +249,16 @@
+ "/examples/websocket/drawboard";
socket = new WebSocket(host);
- /* If processing of messages should be paused.
+ /* Use a pausable event forwarder.
* This is needed when we load an Image object with data
* from a previous message, because we must wait until the
* Image's load event it raised before we can use it (and
* in the meantime the socket.message event could be
* raised).
- * Therefore we need to use a pausable message handler
- * to handle the incoming messages.
+ * Therefore we need this pausable event handler to handle
+ * e.g. socket.onmessage and socket.onclose.
*/
- var messageHandler = new PausableMessageHandler();
+ var eventForwarder = new PausableEventForwarder();
socket.onopen = function () {
// Socket has opened. Now wait for the server to
@@ -274,17 +269,20 @@
pingTimerId = window.setInterval(function() {
socket.send("0");
}, 30000);
- }
+ };
socket.onclose = function () {
- Console.log("WebSocket connection closed.");
- disableControls();
-
- // Disable pong timer.
- window.clearInterval(pingTimerId);
- }
+ eventForwarder.callFunction(function() {
+ Console.log("WebSocket connection closed.");
+ disableControls();
+
+ // Disable pong timer.
+ window.clearInterval(pingTimerId);
+ });
+ };
- messageHandler.messageHandler = function(message) {
+ // Handles an incoming Websocket message.
+ var handleOnMessage = function(message) {
// Split joined message and process them
// invidividually.
@@ -317,10 +315,10 @@
// message containing the room images
// as PNG. Therefore we temporarily swap
// the message handler.
- var originalHandler = messageHandler.messageHandler;
- messageHandler.messageHandler = function(message) {
+ var originalHandler = handleOnMessage;
+ handleOnMessage = function(message) {
// First, we restore the original handler.
- messageHandler.messageHandler = originalHandler;
+ handleOnMessage = originalHandler;
// Read the image.
var blob = message.data;
@@ -334,9 +332,9 @@
// We must wait until the onload event is
// raised until we can draw the image onto
// the canvas.
- // Therefore we need to pause the message
- // handler until the image is loaded.
- messageHandler.pauseMessageProcessing();
+ // Therefore we need to pause the event
+ // forwarder until the image is loaded.
+ eventForwarder.pauseProcessing();
img.onload = function() {
@@ -366,8 +364,8 @@
startControls();
- // Finally, resume the message handler.
- messageHandler.resumeMessageProcessing();
+ // Finally, resume the event forwarder.
+ eventForwarder.resumeProcessing();
};
img.src = url;
@@ -434,7 +432,9 @@
};
socket.onmessage = function(message) {
- messageHandler.handleMessageInternal(message);
+ eventForwarder.callFunction(function() {
+ handleOnMessage(message);
+ });
};
}
---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@tomcat.apache.org
For additional commands, e-mail: dev-help@tomcat.apache.org