You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@mina.apache.org by tr...@apache.org on 2007/08/14 15:30:01 UTC
svn commit: r565742 - in /mina/trunk/core/src:
main/java/org/apache/mina/filter/codec/
main/java/org/apache/mina/filter/codec/support/
test/java/org/apache/mina/filter/codec/serialization/
test/java/org/apache/mina/filter/codec/textline/
Author: trustin
Date: Tue Aug 14 06:30:00 2007
New Revision: 565742
URL: http://svn.apache.org/viewvc?view=rev&rev=565742
Log:
* Moved classes in filter.codec.support to filter.codec
* Renamed SimpleProtocolEncoderOutput to AbstractProtocolEncoderOutput
* Renamed SimpleProtocolDecoderOutput to AbstractProtocolDecoderOutput
* Simplified AbstractProtocolDecoderOutput so anyone can extend it, and moved complicated part to ProtocolCodecFilter
Added:
mina/trunk/core/src/main/java/org/apache/mina/filter/codec/AbstractProtocolDecoderOutput.java (with props)
mina/trunk/core/src/main/java/org/apache/mina/filter/codec/AbstractProtocolEncoderOutput.java (with props)
Removed:
mina/trunk/core/src/main/java/org/apache/mina/filter/codec/support/
Modified:
mina/trunk/core/src/main/java/org/apache/mina/filter/codec/ProtocolCodecFilter.java
mina/trunk/core/src/test/java/org/apache/mina/filter/codec/serialization/ObjectSerializationTest.java
mina/trunk/core/src/test/java/org/apache/mina/filter/codec/textline/TextLineEncoderTest.java
Added: mina/trunk/core/src/main/java/org/apache/mina/filter/codec/AbstractProtocolDecoderOutput.java
URL: http://svn.apache.org/viewvc/mina/trunk/core/src/main/java/org/apache/mina/filter/codec/AbstractProtocolDecoderOutput.java?view=auto&rev=565742
==============================================================================
--- mina/trunk/core/src/main/java/org/apache/mina/filter/codec/AbstractProtocolDecoderOutput.java (added)
+++ mina/trunk/core/src/main/java/org/apache/mina/filter/codec/AbstractProtocolDecoderOutput.java Tue Aug 14 06:30:00 2007
@@ -0,0 +1,49 @@
+/*
+ * 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.mina.filter.codec;
+
+import java.util.LinkedList;
+import java.util.Queue;
+
+/**
+ * A {@link ProtocolDecoderOutput} based on queue.
+ *
+ * @author The Apache MINA Project (dev@mina.apache.org)
+ * @version $Rev$, $Date$
+ *
+ */
+public abstract class AbstractProtocolDecoderOutput implements ProtocolDecoderOutput {
+ private final Queue<Object> messageQueue = new LinkedList<Object>();
+
+ public AbstractProtocolDecoderOutput() {
+ }
+
+ public Queue<Object> getMessageQueue() {
+ return messageQueue;
+ }
+
+ public void write(Object message) {
+ if (message == null) {
+ throw new NullPointerException("message");
+ }
+
+ messageQueue.offer(message);
+ }
+}
Propchange: mina/trunk/core/src/main/java/org/apache/mina/filter/codec/AbstractProtocolDecoderOutput.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: mina/trunk/core/src/main/java/org/apache/mina/filter/codec/AbstractProtocolDecoderOutput.java
------------------------------------------------------------------------------
svn:keywords = Rev Date
Added: mina/trunk/core/src/main/java/org/apache/mina/filter/codec/AbstractProtocolEncoderOutput.java
URL: http://svn.apache.org/viewvc/mina/trunk/core/src/main/java/org/apache/mina/filter/codec/AbstractProtocolEncoderOutput.java?view=auto&rev=565742
==============================================================================
--- mina/trunk/core/src/main/java/org/apache/mina/filter/codec/AbstractProtocolEncoderOutput.java (added)
+++ mina/trunk/core/src/main/java/org/apache/mina/filter/codec/AbstractProtocolEncoderOutput.java Tue Aug 14 06:30:00 2007
@@ -0,0 +1,109 @@
+/*
+ * 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.mina.filter.codec;
+
+import java.util.LinkedList;
+import java.util.Queue;
+
+import org.apache.mina.common.ByteBuffer;
+import org.apache.mina.common.WriteFuture;
+
+/**
+ * A {@link ProtocolEncoderOutput} based on queue.
+ *
+ * @author The Apache MINA Project (dev@mina.apache.org)
+ * @version $Rev$, $Date$
+ */
+public abstract class AbstractProtocolEncoderOutput implements
+ ProtocolEncoderOutput {
+ private final Queue<ByteBuffer> bufferQueue = new LinkedList<ByteBuffer>();
+
+ public AbstractProtocolEncoderOutput() {
+ }
+
+ public Queue<ByteBuffer> getBufferQueue() {
+ return bufferQueue;
+ }
+
+ public void write(ByteBuffer buf) {
+ if (buf.hasRemaining()) {
+ bufferQueue.offer(buf);
+ } else {
+ throw new IllegalArgumentException(
+ "buf is empty. Forgot to call flip()?");
+ }
+ }
+
+ public void mergeAll() {
+ int sum = 0;
+ final int size = bufferQueue.size();
+
+ if (size < 2) {
+ // no need to merge!
+ return;
+ }
+
+ // Get the size of merged BB
+ for (ByteBuffer b : bufferQueue) {
+ sum += b.remaining();
+ }
+
+ // Allocate a new BB that will contain all fragments
+ ByteBuffer newBuf = ByteBuffer.allocate(sum);
+
+ // and merge all.
+ for (;;) {
+ ByteBuffer buf = bufferQueue.poll();
+ if (buf == null) {
+ break;
+ }
+
+ newBuf.put(buf);
+ }
+
+ // Push the new buffer finally.
+ newBuf.flip();
+ bufferQueue.offer(newBuf);
+ }
+
+ public WriteFuture flush() {
+ Queue<ByteBuffer> bufferQueue = this.bufferQueue;
+ WriteFuture future = null;
+ if (bufferQueue.isEmpty()) {
+ return null;
+ } else {
+ for (;;) {
+ ByteBuffer buf = bufferQueue.poll();
+ if (buf == null) {
+ break;
+ }
+
+ // Flush only when the buffer has remaining.
+ if (buf.hasRemaining()) {
+ future = doFlush(buf);
+ }
+ }
+ }
+
+ return future;
+ }
+
+ protected abstract WriteFuture doFlush(ByteBuffer buf);
+}
\ No newline at end of file
Propchange: mina/trunk/core/src/main/java/org/apache/mina/filter/codec/AbstractProtocolEncoderOutput.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: mina/trunk/core/src/main/java/org/apache/mina/filter/codec/AbstractProtocolEncoderOutput.java
------------------------------------------------------------------------------
svn:keywords = Rev Date
Modified: mina/trunk/core/src/main/java/org/apache/mina/filter/codec/ProtocolCodecFilter.java
URL: http://svn.apache.org/viewvc/mina/trunk/core/src/main/java/org/apache/mina/filter/codec/ProtocolCodecFilter.java?view=diff&rev=565742&r1=565741&r2=565742
==============================================================================
--- mina/trunk/core/src/main/java/org/apache/mina/filter/codec/ProtocolCodecFilter.java (original)
+++ mina/trunk/core/src/main/java/org/apache/mina/filter/codec/ProtocolCodecFilter.java Tue Aug 14 06:30:00 2007
@@ -20,7 +20,9 @@
package org.apache.mina.filter.codec;
import java.net.SocketAddress;
+import java.util.Queue;
+import org.apache.mina.common.AbstractIoSession;
import org.apache.mina.common.ByteBuffer;
import org.apache.mina.common.DefaultWriteFuture;
import org.apache.mina.common.DefaultWriteRequest;
@@ -32,8 +34,6 @@
import org.apache.mina.common.WriteFuture;
import org.apache.mina.common.WriteRequest;
import org.apache.mina.common.WriteRequestWrapper;
-import org.apache.mina.filter.codec.support.SimpleProtocolDecoderOutput;
-import org.apache.mina.filter.codec.support.SimpleProtocolEncoderOutput;
/**
* An {@link IoFilter} which translates binary or protocol specific data into
@@ -280,7 +280,7 @@
NextFilter nextFilter) {
ProtocolDecoderOutput out = (ProtocolDecoderOutput) session.getAttribute(DECODER_OUT);
if (out == null) {
- out = new SimpleProtocolDecoderOutput(session, nextFilter);
+ out = new ProtocolDecoderOutputImpl(session, nextFilter);
session.setAttribute(DECODER_OUT, out);
}
return out;
@@ -337,9 +337,36 @@
return EMPTY_BUFFER;
}
}
+
+ private static class ProtocolDecoderOutputImpl extends
+ AbstractProtocolDecoderOutput {
+ private final IoSession session;
+ private final NextFilter nextFilter;
+
+ public ProtocolDecoderOutputImpl(
+ IoSession session, NextFilter nextFilter) {
+ this.session = session;
+ this.nextFilter = nextFilter;
+ }
+
+ @Override
+ public void write(Object message) {
+ super.write(message);
+ if (session instanceof AbstractIoSession) {
+ ((AbstractIoSession) session).increaseReadMessages();
+ }
+ }
+
+ public void flush() {
+ Queue<Object> messageQueue = getMessageQueue();
+ while (!messageQueue.isEmpty()) {
+ nextFilter.messageReceived(session, messageQueue.poll());
+ }
+ }
+ }
private static class ProtocolEncoderOutputImpl extends
- SimpleProtocolEncoderOutput {
+ AbstractProtocolEncoderOutput {
private final IoSession session;
private final NextFilter nextFilter;
Modified: mina/trunk/core/src/test/java/org/apache/mina/filter/codec/serialization/ObjectSerializationTest.java
URL: http://svn.apache.org/viewvc/mina/trunk/core/src/test/java/org/apache/mina/filter/codec/serialization/ObjectSerializationTest.java?view=diff&rev=565742&r1=565741&r2=565742
==============================================================================
--- mina/trunk/core/src/test/java/org/apache/mina/filter/codec/serialization/ObjectSerializationTest.java (original)
+++ mina/trunk/core/src/test/java/org/apache/mina/filter/codec/serialization/ObjectSerializationTest.java Tue Aug 14 06:30:00 2007
@@ -39,7 +39,7 @@
import org.apache.mina.filter.codec.ProtocolDecoder;
import org.apache.mina.filter.codec.ProtocolDecoderOutput;
import org.apache.mina.filter.codec.ProtocolEncoder;
-import org.apache.mina.filter.codec.support.SimpleProtocolEncoderOutput;
+import org.apache.mina.filter.codec.AbstractProtocolEncoderOutput;
/**
* Tests object serialization codec and streams.
@@ -52,7 +52,7 @@
final String expected = "1234";
IoSession session = new MockIoSession();
- SimpleProtocolEncoderOutput out = new SimpleProtocolEncoderOutput() {
+ AbstractProtocolEncoderOutput out = new AbstractProtocolEncoderOutput() {
@Override
protected WriteFuture doFlush(ByteBuffer buf) {
return null;
Modified: mina/trunk/core/src/test/java/org/apache/mina/filter/codec/textline/TextLineEncoderTest.java
URL: http://svn.apache.org/viewvc/mina/trunk/core/src/test/java/org/apache/mina/filter/codec/textline/TextLineEncoderTest.java?view=diff&rev=565742&r1=565741&r2=565742
==============================================================================
--- mina/trunk/core/src/test/java/org/apache/mina/filter/codec/textline/TextLineEncoderTest.java (original)
+++ mina/trunk/core/src/test/java/org/apache/mina/filter/codec/textline/TextLineEncoderTest.java Tue Aug 14 06:30:00 2007
@@ -34,7 +34,7 @@
import org.apache.mina.common.IoSessionConfig;
import org.apache.mina.common.IoServiceMetadata;
import org.apache.mina.common.WriteFuture;
-import org.apache.mina.filter.codec.support.SimpleProtocolEncoderOutput;
+import org.apache.mina.filter.codec.AbstractProtocolEncoderOutput;
/**
* Tests {@link TextLineEncoder}.
@@ -51,7 +51,7 @@
TextLineEncoder encoder = new TextLineEncoder(Charset.forName("UTF-8"),
LineDelimiter.WINDOWS);
IoSession session = new DummySession();
- SimpleProtocolEncoderOutput out = new SimpleProtocolEncoderOutput() {
+ AbstractProtocolEncoderOutput out = new AbstractProtocolEncoderOutput() {
@Override
protected WriteFuture doFlush(ByteBuffer buf) {
return null;