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-unsubscr...@tomcat.apache.org For additional commands, e-mail: dev-h...@tomcat.apache.org