Author: markt Date: Mon Jan 21 09:46:18 2013 New Revision: 1436239 URL: http://svn.apache.org/viewvc?rev=1436239&view=rev Log: Remove remaining reference to Servlet classes to server web socket package
Added: tomcat/trunk/java/org/apache/tomcat/websocket/WsFrameBase.java - copied, changed from r1436225, tomcat/trunk/java/org/apache/tomcat/websocket/WsFrame.java tomcat/trunk/java/org/apache/tomcat/websocket/server/WsFrameServer.java (with props) Removed: tomcat/trunk/java/org/apache/tomcat/websocket/WsFrame.java Modified: tomcat/trunk/java/org/apache/tomcat/websocket/server/WsProtocolHandler.java tomcat/trunk/test/org/apache/tomcat/websocket/TestWsFrame.java Copied: tomcat/trunk/java/org/apache/tomcat/websocket/WsFrameBase.java (from r1436225, tomcat/trunk/java/org/apache/tomcat/websocket/WsFrame.java) URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/tomcat/websocket/WsFrameBase.java?p2=tomcat/trunk/java/org/apache/tomcat/websocket/WsFrameBase.java&p1=tomcat/trunk/java/org/apache/tomcat/websocket/WsFrame.java&r1=1436225&r2=1436239&rev=1436239&view=diff ============================================================================== --- tomcat/trunk/java/org/apache/tomcat/websocket/WsFrame.java (original) +++ tomcat/trunk/java/org/apache/tomcat/websocket/WsFrameBase.java Mon Jan 21 09:46:18 2013 @@ -24,7 +24,6 @@ import java.nio.charset.CharsetDecoder; import java.nio.charset.CoderResult; import java.nio.charset.CodingErrorAction; -import javax.servlet.ServletInputStream; import javax.websocket.CloseReason; import javax.websocket.CloseReason.CloseCodes; import javax.websocket.MessageHandler; @@ -37,13 +36,13 @@ import org.apache.tomcat.util.res.String * extracts the messages. WebSocket Pings received will be responded to * automatically without any action required by the application. */ -public class WsFrame { +public abstract class WsFrameBase { private static final StringManager sm = StringManager.getManager(Constants.PACKAGE_NAME); // Connection level attributes - private final ServletInputStream sis; + private final Object connectionReadLock = new Object(); private final WsSession wsSession; private final byte[] inputBuffer; @@ -79,8 +78,7 @@ public class WsFrame { private int readPos = 0; private int writePos = 0; - public WsFrame(ServletInputStream sis, WsSession wsSession) { - this.sis = sis; + public WsFrameBase(WsSession wsSession) { this.wsSession = wsSession; // TODO This needs to work for client and server side code @@ -101,11 +99,10 @@ public class WsFrame { * Called when there is data in the ServletInputStream to process. */ public void onDataAvailable() throws IOException { - synchronized (sis) { - while (sis.isReady()) { + synchronized (connectionReadLock) { + while (isDataAvailable()) { // Fill up the input buffer with as much data as we can - int read = sis.read(inputBuffer, writePos, - inputBuffer.length - writePos); + int read = fillInputBuffer(inputBuffer, writePos); if (read == 0) { return; } @@ -136,6 +133,27 @@ public class WsFrame { /** + * Allows sub-classes to control whether the read loop in + * {@link #onDataAvailable()} should continue or terminate. + * + * @return <code>true</code> if the data source is ready to be read + */ + protected abstract boolean isDataAvailable(); + + + /** + * Fill as much of the input buffer as possible (i.e. to the end of the + * supplied buffer). + * + * @param inputBuffer The input buffer + * @param start The start point + * @return The number of bytes (possibly zero) added to the buffer + */ + protected abstract int fillInputBuffer(byte[] inputBuffer, int start) + throws IOException; + + + /** * @return <code>true</code> if sufficient data was present to process all * of the initial header */ Added: tomcat/trunk/java/org/apache/tomcat/websocket/server/WsFrameServer.java URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/tomcat/websocket/server/WsFrameServer.java?rev=1436239&view=auto ============================================================================== --- tomcat/trunk/java/org/apache/tomcat/websocket/server/WsFrameServer.java (added) +++ tomcat/trunk/java/org/apache/tomcat/websocket/server/WsFrameServer.java Mon Jan 21 09:46:18 2013 @@ -0,0 +1,46 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.tomcat.websocket.server; + +import java.io.IOException; + +import javax.servlet.ServletInputStream; + +import org.apache.tomcat.websocket.WsFrameBase; +import org.apache.tomcat.websocket.WsSession; + +public class WsFrameServer extends WsFrameBase { + + private final ServletInputStream sis; + + public WsFrameServer(ServletInputStream sis, WsSession wsSession) { + super(wsSession); + this.sis = sis; + } + + @Override + protected boolean isDataAvailable() { + return sis.isReady(); + } + + @Override + protected int fillInputBuffer(byte[] inputBuffer, int start) + throws IOException { + return sis.read(inputBuffer, start, + inputBuffer.length - start); + } +} Propchange: tomcat/trunk/java/org/apache/tomcat/websocket/server/WsFrameServer.java ------------------------------------------------------------------------------ svn:eol-style = native 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=1436239&r1=1436238&r2=1436239&view=diff ============================================================================== --- tomcat/trunk/java/org/apache/tomcat/websocket/server/WsProtocolHandler.java (original) +++ tomcat/trunk/java/org/apache/tomcat/websocket/server/WsProtocolHandler.java Mon Jan 21 09:46:18 2013 @@ -30,7 +30,7 @@ import javax.websocket.CloseReason.Close import javax.websocket.Endpoint; import javax.websocket.EndpointConfiguration; -import org.apache.tomcat.websocket.WsFrame; +import org.apache.tomcat.websocket.WsFrameBase; import org.apache.tomcat.websocket.WsIOException; import org.apache.tomcat.websocket.WsSession; @@ -71,7 +71,7 @@ public class WsProtocolHandler implement ClassLoader cl = t.getContextClassLoader(); t.setContextClassLoader(applicationClassLoader); try { - WsFrame wsFrame = new WsFrame(sis, wsSession); + WsFrameBase wsFrame = new WsFrameServer(sis, wsSession); sis.setReadListener(new WsReadListener(this, wsFrame, wsSession)); WsRemoteEndpointServer wsRemoteEndpointServer = new WsRemoteEndpointServer(wsSession, sos); @@ -100,12 +100,12 @@ public class WsProtocolHandler implement private static class WsReadListener implements ReadListener { private final WsProtocolHandler wsProtocolHandler; - private final WsFrame wsFrame; + private final WsFrameBase wsFrame; private final WsSession wsSession; private WsReadListener(WsProtocolHandler wsProtocolHandler, - WsFrame wsFrame, WsSession wsSession) { + WsFrameBase wsFrame, WsSession wsSession) { this.wsProtocolHandler = wsProtocolHandler; this.wsFrame = wsFrame; this.wsSession = wsSession; Modified: tomcat/trunk/test/org/apache/tomcat/websocket/TestWsFrame.java URL: http://svn.apache.org/viewvc/tomcat/trunk/test/org/apache/tomcat/websocket/TestWsFrame.java?rev=1436239&r1=1436238&r2=1436239&view=diff ============================================================================== --- tomcat/trunk/test/org/apache/tomcat/websocket/TestWsFrame.java (original) +++ tomcat/trunk/test/org/apache/tomcat/websocket/TestWsFrame.java Mon Jan 21 09:46:18 2013 @@ -25,25 +25,25 @@ public class TestWsFrame { @Test public void testByteArrayToLong() throws IOException { - Assert.assertEquals(0L, WsFrame.byteArrayToLong(new byte[] { 0 }, 0, 1)); - Assert.assertEquals(1L, WsFrame.byteArrayToLong(new byte[] { 1 }, 0, 1)); - Assert.assertEquals(0xFF, WsFrame.byteArrayToLong(new byte[] { -1 }, 0, 1)); + Assert.assertEquals(0L, WsFrameBase.byteArrayToLong(new byte[] { 0 }, 0, 1)); + Assert.assertEquals(1L, WsFrameBase.byteArrayToLong(new byte[] { 1 }, 0, 1)); + Assert.assertEquals(0xFF, WsFrameBase.byteArrayToLong(new byte[] { -1 }, 0, 1)); Assert.assertEquals(0xFFFF, - WsFrame.byteArrayToLong(new byte[] { -1, -1 }, 0, 2)); + WsFrameBase.byteArrayToLong(new byte[] { -1, -1 }, 0, 2)); Assert.assertEquals(0xFFFFFF, - WsFrame.byteArrayToLong(new byte[] { -1, -1, -1 }, 0, 3)); + WsFrameBase.byteArrayToLong(new byte[] { -1, -1, -1 }, 0, 3)); } @Test public void testByteArrayToLongOffset() throws IOException { - Assert.assertEquals(0L, WsFrame.byteArrayToLong(new byte[] { 20, 0 }, 1, 1)); - Assert.assertEquals(1L, WsFrame.byteArrayToLong(new byte[] { 20, 1 }, 1, 1)); - Assert.assertEquals(0xFF, WsFrame.byteArrayToLong(new byte[] { 20, -1 }, 1, 1)); + Assert.assertEquals(0L, WsFrameBase.byteArrayToLong(new byte[] { 20, 0 }, 1, 1)); + Assert.assertEquals(1L, WsFrameBase.byteArrayToLong(new byte[] { 20, 1 }, 1, 1)); + Assert.assertEquals(0xFF, WsFrameBase.byteArrayToLong(new byte[] { 20, -1 }, 1, 1)); Assert.assertEquals(0xFFFF, - WsFrame.byteArrayToLong(new byte[] { 20, -1, -1 }, 1, 2)); + WsFrameBase.byteArrayToLong(new byte[] { 20, -1, -1 }, 1, 2)); Assert.assertEquals(0xFFFFFF, - WsFrame.byteArrayToLong(new byte[] { 20, -1, -1, -1 }, 1, 3)); + WsFrameBase.byteArrayToLong(new byte[] { 20, -1, -1, -1 }, 1, 3)); } } --------------------------------------------------------------------- To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org For additional commands, e-mail: dev-h...@tomcat.apache.org