Author: markt
Date: Tue Jan  8 20:44:30 2013
New Revision: 1430508

URL: http://svn.apache.org/viewvc?rev=1430508&view=rev
Log:
Fix https://issues.apache.org/bugzilla/show_bug.cgi?id=54381
Add support for receiving pong messages.

Modified:
    tomcat/trunk/java/org/apache/catalina/websocket/StreamHandler.java

Modified: tomcat/trunk/java/org/apache/catalina/websocket/StreamHandler.java
URL: 
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/catalina/websocket/StreamHandler.java?rev=1430508&r1=1430507&r2=1430508&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/catalina/websocket/StreamHandler.java 
(original)
+++ tomcat/trunk/java/org/apache/catalina/websocket/StreamHandler.java Tue Jan  
8 20:44:30 2013
@@ -98,7 +98,7 @@ public abstract class StreamHandler impl
                 } else if (opCode == Constants.OPCODE_PING) {
                     getWsOutbound().pong(frame.getPayLoad());
                 } else if (opCode == Constants.OPCODE_PONG) {
-                    // NO-OP
+                    doOnPong(frame.getPayLoad());
                 } else {
                     // Unknown OpCode
                     closeOutboundConnection(
@@ -190,6 +190,18 @@ public abstract class StreamHandler impl
         }
     }
 
+    private void doOnPong(ByteBuffer payload) {
+        // Need to call onPong using the web application's class loader
+        Thread t = Thread.currentThread();
+        ClassLoader cl = t.getContextClassLoader();
+        t.setContextClassLoader(applicationClassLoader);
+        try {
+            onPong(payload);
+        } finally {
+            t.setContextClassLoader(cl);
+        }
+    }
+
     @Override
     public final void init(WebConnection webConnection) {
 
@@ -238,6 +250,15 @@ public abstract class StreamHandler impl
         // NO-OP
     }
 
+    /**
+     * Intended to be overridden by sub-classes that wish to be notified
+     * when a pong is received. The default implementation is a NO-OP.
+     *
+     * @param payload   The payload included in the pong.
+     */
+    protected void onPong(ByteBuffer payload) {
+        // NO-OP
+    }
 
     /**
      * This method is called when there is a binary WebSocket message available



---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to