You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tomcat.apache.org by ma...@apache.org on 2013/02/20 22:51:57 UTC

svn commit: r1448432 - in /tomcat/trunk/java/org/apache/tomcat/websocket: WsRemoteEndpointBase.java WsSession.java WsWebSocketContainer.java server/WsProtocolHandler.java

Author: markt
Date: Wed Feb 20 21:51:56 2013
New Revision: 1448432

URL: http://svn.apache.org/r1448432
Log:
Make the list of encoders available where they are needed

Modified:
    tomcat/trunk/java/org/apache/tomcat/websocket/WsRemoteEndpointBase.java
    tomcat/trunk/java/org/apache/tomcat/websocket/WsSession.java
    tomcat/trunk/java/org/apache/tomcat/websocket/WsWebSocketContainer.java
    tomcat/trunk/java/org/apache/tomcat/websocket/server/WsProtocolHandler.java

Modified: tomcat/trunk/java/org/apache/tomcat/websocket/WsRemoteEndpointBase.java
URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/tomcat/websocket/WsRemoteEndpointBase.java?rev=1448432&r1=1448431&r2=1448432&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/tomcat/websocket/WsRemoteEndpointBase.java (original)
+++ tomcat/trunk/java/org/apache/tomcat/websocket/WsRemoteEndpointBase.java Wed Feb 20 21:51:56 2013
@@ -25,6 +25,8 @@ import java.nio.charset.Charset;
 import java.nio.charset.CharsetEncoder;
 import java.nio.charset.CoderResult;
 import java.util.ArrayDeque;
+import java.util.ArrayList;
+import java.util.List;
 import java.util.Queue;
 import java.util.concurrent.CountDownLatch;
 import java.util.concurrent.ExecutionException;
@@ -34,6 +36,7 @@ import java.util.concurrent.TimeoutExcep
 import java.util.concurrent.atomic.AtomicBoolean;
 
 import javax.websocket.EncodeException;
+import javax.websocket.Encoder;
 import javax.websocket.RemoteEndpoint;
 import javax.websocket.SendHandler;
 import javax.websocket.SendResult;
@@ -69,6 +72,7 @@ public abstract class WsRemoteEndpointBa
     private final AtomicBoolean batchingAllowed = new AtomicBoolean(false);
     private volatile long asyncSendTimeout = -1;
     private WsSession wsSession;
+    private List<EncoderEntry> encoderEntries = new ArrayList<>();
 
 
     @Override
@@ -447,6 +451,15 @@ public abstract class WsRemoteEndpointBa
     }
 
 
+    protected void setEncoders(List<Encoder> encoders) {
+        encoderEntries.clear();
+        for (Encoder encoder : encoders) {
+            EncoderEntry entry =
+                    new EncoderEntry(Util.getEncoderType(encoder), encoder);
+            encoderEntries.add(entry);
+        }
+    }
+
     protected abstract void doWrite(SendHandler handler, ByteBuffer... data);
     protected abstract boolean isMasked();
     protected abstract void close();
@@ -772,4 +785,24 @@ public abstract class WsRemoteEndpointBa
             buffer.clear();
         }
     }
+
+
+    private static class EncoderEntry {
+
+        private final Class<?> clazz;
+        private final Encoder encoder;
+
+        public EncoderEntry(Class<?> clazz, Encoder encoder) {
+            this.clazz = clazz;
+            this.encoder = encoder;
+        }
+
+        public Class<?> getClazz() {
+            return clazz;
+        }
+
+        public Encoder getEncoder() {
+            return encoder;
+        }
+    }
 }

Modified: tomcat/trunk/java/org/apache/tomcat/websocket/WsSession.java
URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/tomcat/websocket/WsSession.java?rev=1448432&r1=1448431&r2=1448432&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/tomcat/websocket/WsSession.java (original)
+++ tomcat/trunk/java/org/apache/tomcat/websocket/WsSession.java Wed Feb 20 21:51:56 2013
@@ -31,6 +31,7 @@ import java.util.concurrent.ConcurrentHa
 
 import javax.websocket.CloseReason;
 import javax.websocket.CloseReason.CloseCodes;
+import javax.websocket.Encoder;
 import javax.websocket.Endpoint;
 import javax.websocket.Extension;
 import javax.websocket.MessageHandler;
@@ -88,7 +89,7 @@ public class WsSession implements Sessio
             WsWebSocketContainer wsWebSocketContainer,
             WsRequest request, String subProtocol,
             Map<String,String> pathParameters,
-            boolean secure) {
+            boolean secure, List<Encoder> encoders) {
         this.localEndpoint = localEndpoint;
         this.wsRemoteEndpoint = wsRemoteEndpoint;
         this.wsRemoteEndpoint.setSession(this);
@@ -106,6 +107,7 @@ public class WsSession implements Sessio
         this.subProtocol = subProtocol;
         this.pathParameters = pathParameters;
         this.secure = secure;
+        this.wsRemoteEndpoint.setEncoders(encoders);
     }
 
 
@@ -387,6 +389,7 @@ public class WsSession implements Sessio
         lastActive = System.currentTimeMillis();
     }
 
+
     protected void expire() {
         long timeout = sessionIdleTimeout;
         if (timeout < 1) {

Modified: tomcat/trunk/java/org/apache/tomcat/websocket/WsWebSocketContainer.java
URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/tomcat/websocket/WsWebSocketContainer.java?rev=1448432&r1=1448431&r2=1448432&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/tomcat/websocket/WsWebSocketContainer.java (original)
+++ tomcat/trunk/java/org/apache/tomcat/websocket/WsWebSocketContainer.java Wed Feb 20 21:51:56 2013
@@ -173,7 +173,8 @@ public class WsWebSocketContainer
         }
 
         WsSession wsSession = new WsSession(endpoint, wsRemoteEndpointClient,
-                this, null, subProtocol, Collections.EMPTY_MAP, false);
+                this, null, subProtocol, Collections.EMPTY_MAP, false,
+                clientEndpointConfiguration.getEncoders());
         endpoint.onOpen(wsSession, clientEndpointConfiguration);
         registerSession(clazz, wsSession);
 

Modified: tomcat/trunk/java/org/apache/tomcat/websocket/server/WsProtocolHandler.java
URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/tomcat/websocket/server/WsProtocolHandler.java?rev=1448432&r1=1448431&r2=1448432&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/tomcat/websocket/server/WsProtocolHandler.java (original)
+++ tomcat/trunk/java/org/apache/tomcat/websocket/server/WsProtocolHandler.java Wed Feb 20 21:51:56 2013
@@ -96,7 +96,7 @@ public class WsProtocolHandler implement
                     new WsRemoteEndpointServer(sos, webSocketContainer);
             wsSession = new WsSession(ep, wsRemoteEndpointServer,
                     webSocketContainer, request, subProtocol, pathParameters,
-                    secure);
+                    secure, endpointConfig.getEncoders());
             WsFrameServer wsFrame = new WsFrameServer(
                     sis,
                     wsSession);



---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@tomcat.apache.org
For additional commands, e-mail: dev-help@tomcat.apache.org