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/07/13 04:29:39 UTC
svn commit: r555838 - in /mina/trunk:
core/src/main/java/org/apache/mina/common/
core/src/main/java/org/apache/mina/filter/executor/
filter-ssl/src/main/java/org/apache/mina/filter/support/
Author: trustin
Date: Thu Jul 12 19:29:38 2007
New Revision: 555838
URL: http://svn.apache.org/viewvc?view=rev&rev=555838
Log:
Resolved issue: DIRMINA-361 (Event type and EventType enum
* Added IoEventType
* Added IoEvent and IoFilterEvent
* Removed duplicate event classes from executor filters and ssl filter
Added:
mina/trunk/core/src/main/java/org/apache/mina/common/IoEvent.java (with props)
mina/trunk/core/src/main/java/org/apache/mina/common/IoEventType.java (with props)
mina/trunk/core/src/main/java/org/apache/mina/common/IoFilterEvent.java (with props)
Modified:
mina/trunk/core/src/main/java/org/apache/mina/filter/executor/AbstractExecutorFilter.java
mina/trunk/core/src/main/java/org/apache/mina/filter/executor/ExecutorFilter.java
mina/trunk/core/src/main/java/org/apache/mina/filter/executor/UnorderedExecutorFilter.java
mina/trunk/filter-ssl/src/main/java/org/apache/mina/filter/support/SSLHandler.java
Added: mina/trunk/core/src/main/java/org/apache/mina/common/IoEvent.java
URL: http://svn.apache.org/viewvc/mina/trunk/core/src/main/java/org/apache/mina/common/IoEvent.java?view=auto&rev=555838
==============================================================================
--- mina/trunk/core/src/main/java/org/apache/mina/common/IoEvent.java (added)
+++ mina/trunk/core/src/main/java/org/apache/mina/common/IoEvent.java Thu Jul 12 19:29:38 2007
@@ -0,0 +1,67 @@
+/*
+ * 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.common;
+
+/**
+ * An I/O event or an I/O request that MINA provides.
+ * Most users won't need to use this class. It is usually used by internal
+ * components to store I/O events.
+ *
+ * @author The Apache MINA Project (dev@mina.apache.org)
+ * @version $Rev$, $Date$
+ */
+public class IoEvent {
+ private final IoEventType type;
+ private final IoSession session;
+ private final Object parameter;
+
+ public IoEvent(IoEventType type, IoSession session, Object parameter) {
+ if (type == null) {
+ throw new NullPointerException("type");
+ }
+ if (session == null) {
+ throw new NullPointerException("session");
+ }
+ this.type = type;
+ this.session = session;
+ this.parameter = parameter;
+ }
+
+ public IoEventType getType() {
+ return type;
+ }
+
+ public IoSession getSession() {
+ return session;
+ }
+
+ public Object getParameter() {
+ return parameter;
+ }
+
+ @Override
+ public String toString() {
+ if (getParameter() == null) {
+ return "[" + getSession() + "] " + getType().name();
+ } else {
+ return "[" + getSession() + "] " + getType().name() + ": " + getParameter();
+ }
+ }
+}
Propchange: mina/trunk/core/src/main/java/org/apache/mina/common/IoEvent.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: mina/trunk/core/src/main/java/org/apache/mina/common/IoEvent.java
------------------------------------------------------------------------------
svn:keywords = Rev Date
Added: mina/trunk/core/src/main/java/org/apache/mina/common/IoEventType.java
URL: http://svn.apache.org/viewvc/mina/trunk/core/src/main/java/org/apache/mina/common/IoEventType.java?view=auto&rev=555838
==============================================================================
--- mina/trunk/core/src/main/java/org/apache/mina/common/IoEventType.java (added)
+++ mina/trunk/core/src/main/java/org/apache/mina/common/IoEventType.java Thu Jul 12 19:29:38 2007
@@ -0,0 +1,39 @@
+/*
+ * 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.common;
+
+/**
+ * An {@link Enum} that represents the type of I/O events and requests.
+ * Most users won't need to use this class. It is usually used by internal
+ * components to store I/O events.
+ *
+ * @author The Apache MINA Project (dev@mina.apache.org)
+ * @version $Rev$, $Date$
+ */
+public enum IoEventType {
+ SESSION_OPENED,
+ SESSION_CLOSED,
+ MESSAGE_RECEIVED,
+ MESSAGE_SENT,
+ SESSION_IDLE,
+ EXCEPTION_CAUGHT,
+ WRITE,
+ CLOSE
+}
Propchange: mina/trunk/core/src/main/java/org/apache/mina/common/IoEventType.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: mina/trunk/core/src/main/java/org/apache/mina/common/IoEventType.java
------------------------------------------------------------------------------
svn:keywords = Rev Date
Added: mina/trunk/core/src/main/java/org/apache/mina/common/IoFilterEvent.java
URL: http://svn.apache.org/viewvc/mina/trunk/core/src/main/java/org/apache/mina/common/IoFilterEvent.java?view=auto&rev=555838
==============================================================================
--- mina/trunk/core/src/main/java/org/apache/mina/common/IoFilterEvent.java (added)
+++ mina/trunk/core/src/main/java/org/apache/mina/common/IoFilterEvent.java Thu Jul 12 19:29:38 2007
@@ -0,0 +1,48 @@
+/*
+ * 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.common;
+
+import org.apache.mina.common.IoFilter.NextFilter;
+
+/**
+ * An I/O event or an I/O request that MINA provides for {@link IoFilter}s.
+ * Most users won't need to use this class. It is usually used by internal
+ * components to store I/O events.
+ *
+ * @author The Apache MINA Project (dev@mina.apache.org)
+ * @version $Rev$, $Date$
+ */
+public class IoFilterEvent extends IoEvent {
+
+ private final NextFilter nextFilter;
+
+ public IoFilterEvent(NextFilter nextFilter, IoEventType type, IoSession session, Object parameter) {
+ super(type, session, parameter);
+
+ if (nextFilter == null) {
+ throw new NullPointerException("nextFilter");
+ }
+ this.nextFilter = nextFilter;
+ }
+
+ public NextFilter getNextFilter() {
+ return nextFilter;
+ }
+}
Propchange: mina/trunk/core/src/main/java/org/apache/mina/common/IoFilterEvent.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: mina/trunk/core/src/main/java/org/apache/mina/common/IoFilterEvent.java
------------------------------------------------------------------------------
svn:keywords = Rev Date
Modified: mina/trunk/core/src/main/java/org/apache/mina/filter/executor/AbstractExecutorFilter.java
URL: http://svn.apache.org/viewvc/mina/trunk/core/src/main/java/org/apache/mina/filter/executor/AbstractExecutorFilter.java?view=diff&rev=555838&r1=555837&r2=555838
==============================================================================
--- mina/trunk/core/src/main/java/org/apache/mina/filter/executor/AbstractExecutorFilter.java (original)
+++ mina/trunk/core/src/main/java/org/apache/mina/filter/executor/AbstractExecutorFilter.java Thu Jul 12 19:29:38 2007
@@ -25,7 +25,9 @@
import java.util.concurrent.TimeUnit;
import org.apache.mina.common.IdleStatus;
+import org.apache.mina.common.IoEventType;
import org.apache.mina.common.IoFilterAdapter;
+import org.apache.mina.common.IoFilterEvent;
import org.apache.mina.common.IoSession;
import org.apache.mina.common.WriteRequest;
@@ -70,69 +72,7 @@
return executor;
}
- protected abstract void fireEvent(
- NextFilter nextFilter, IoSession session, EventType type, Object data );
-
- protected static class EventType
- {
- public static final EventType OPENED = new EventType( "OPENED" );
-
- public static final EventType CLOSED = new EventType( "CLOSED" );
-
- public static final EventType READ = new EventType( "READ" );
-
- public static final EventType WRITTEN = new EventType( "WRITTEN" );
-
- public static final EventType RECEIVED = new EventType( "RECEIVED" );
-
- public static final EventType SENT = new EventType( "SENT" );
-
- public static final EventType IDLE = new EventType( "IDLE" );
-
- public static final EventType EXCEPTION = new EventType( "EXCEPTION" );
-
- private final String value;
-
- private EventType( String value )
- {
- this.value = value;
- }
-
- @Override
- public String toString()
- {
- return value;
- }
- }
-
- protected static class Event
- {
- private final EventType type;
- private final NextFilter nextFilter;
- private final Object data;
-
- protected Event( EventType type, NextFilter nextFilter, Object data )
- {
- this.type = type;
- this.nextFilter = nextFilter;
- this.data = data;
- }
-
- public Object getData()
- {
- return data;
- }
-
- public NextFilter getNextFilter()
- {
- return nextFilter;
- }
-
- public EventType getType()
- {
- return type;
- }
- }
+ protected abstract void fireEvent(IoFilterEvent event);
public final void sessionCreated( NextFilter nextFilter, IoSession session )
{
@@ -142,74 +82,82 @@
public final void sessionOpened( NextFilter nextFilter,
IoSession session )
{
- fireEvent( nextFilter, session, EventType.OPENED, null );
+ fireEvent( new IoFilterEvent(nextFilter, IoEventType.SESSION_OPENED, session, null) );
}
public final void sessionClosed( NextFilter nextFilter,
IoSession session )
{
- fireEvent( nextFilter, session, EventType.CLOSED, null );
+ fireEvent( new IoFilterEvent(nextFilter, IoEventType.SESSION_CLOSED, session, null) );
}
public final void sessionIdle( NextFilter nextFilter,
IoSession session, IdleStatus status )
{
- fireEvent( nextFilter, session, EventType.IDLE, status );
+ fireEvent( new IoFilterEvent(nextFilter, IoEventType.SESSION_IDLE, session, status) );
}
public final void exceptionCaught( NextFilter nextFilter,
IoSession session, Throwable cause )
{
- fireEvent( nextFilter, session, EventType.EXCEPTION, cause );
+ fireEvent( new IoFilterEvent(nextFilter, IoEventType.EXCEPTION_CAUGHT, session, cause) );
}
public final void messageReceived( NextFilter nextFilter,
IoSession session, Object message )
{
- fireEvent( nextFilter, session, EventType.RECEIVED, message );
+ fireEvent( new IoFilterEvent(nextFilter, IoEventType.MESSAGE_RECEIVED, session, message) );
}
public final void messageSent( NextFilter nextFilter,
IoSession session, WriteRequest writeRequest )
{
- fireEvent( nextFilter, session, EventType.SENT, writeRequest );
+ fireEvent( new IoFilterEvent(nextFilter, IoEventType.MESSAGE_SENT, session, writeRequest) );
}
- protected final void processEvent( NextFilter nextFilter, IoSession session, EventType type, Object data )
+ public final void filterWrite( NextFilter nextFilter, IoSession session, WriteRequest writeRequest )
{
- if( type == EventType.RECEIVED )
- {
- nextFilter.messageReceived( session, data );
- }
- else if( type == EventType.SENT )
- {
- nextFilter.messageSent( session, (WriteRequest) data );
- }
- else if( type == EventType.EXCEPTION )
- {
- nextFilter.exceptionCaught( session, (Throwable) data );
- }
- else if( type == EventType.IDLE )
- {
- nextFilter.sessionIdle( session, (IdleStatus) data );
- }
- else if( type == EventType.OPENED )
- {
- nextFilter.sessionOpened( session );
- }
- else if( type == EventType.CLOSED )
- {
- nextFilter.sessionClosed( session );
- }
+ fireEvent( new IoFilterEvent(nextFilter, IoEventType.WRITE, session, writeRequest) );
}
- public final void filterWrite( NextFilter nextFilter, IoSession session, WriteRequest writeRequest )
+ public final void filterClose( NextFilter nextFilter, IoSession session ) throws Exception
{
- nextFilter.filterWrite( session, writeRequest );
+ fireEvent( new IoFilterEvent(nextFilter, IoEventType.CLOSE, session, null) );
}
- public final void filterClose( NextFilter nextFilter, IoSession session ) throws Exception
+ protected final void processEvent( IoFilterEvent event )
{
- nextFilter.filterClose( session );
+ NextFilter nextFilter = event.getNextFilter();
+ IoSession session = event.getSession();
+ Object data = event.getParameter();
+
+ switch (event.getType()) {
+ case MESSAGE_RECEIVED:
+ nextFilter.messageReceived(session, data);
+ break;
+ case MESSAGE_SENT:
+ nextFilter.messageSent( session, (WriteRequest) data );
+ break;
+ case WRITE:
+ nextFilter.filterWrite( session, (WriteRequest) data );
+ break;
+ case CLOSE:
+ nextFilter.filterClose( session );
+ break;
+ case EXCEPTION_CAUGHT:
+ nextFilter.exceptionCaught( session, (Throwable) data );
+ break;
+ case SESSION_IDLE:
+ nextFilter.sessionIdle( session, (IdleStatus) data );
+ break;
+ case SESSION_OPENED:
+ nextFilter.sessionOpened( session );
+ break;
+ case SESSION_CLOSED:
+ nextFilter.sessionClosed( session );
+ break;
+ default:
+ throw new InternalError("Unknown event type: " + event.getType());
+ }
}
}
Modified: mina/trunk/core/src/main/java/org/apache/mina/filter/executor/ExecutorFilter.java
URL: http://svn.apache.org/viewvc/mina/trunk/core/src/main/java/org/apache/mina/filter/executor/ExecutorFilter.java?view=diff&rev=555838&r1=555837&r2=555838
==============================================================================
--- mina/trunk/core/src/main/java/org/apache/mina/filter/executor/ExecutorFilter.java (original)
+++ mina/trunk/core/src/main/java/org/apache/mina/filter/executor/ExecutorFilter.java Thu Jul 12 19:29:38 2007
@@ -24,6 +24,7 @@
import java.util.concurrent.Executor;
import org.apache.mina.common.IoFilterChain;
+import org.apache.mina.common.IoFilterEvent;
import org.apache.mina.common.IoSession;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -72,10 +73,9 @@
super( executor );
}
- protected void fireEvent( NextFilter nextFilter, IoSession session,
- EventType type, Object data )
+ protected void fireEvent(IoFilterEvent event)
{
- Event event = new Event( type, nextFilter, data );
+ IoSession session = event.getSession();
SessionBuffer buf = SessionBuffer.getSessionBuffer( session );
boolean execute;
@@ -123,7 +123,7 @@
}
private final IoSession session;
- private final Queue<Event> eventQueue = new LinkedList<Event>();
+ private final Queue<IoFilterEvent> eventQueue = new LinkedList<IoFilterEvent>();
private boolean processingCompleted = true;
private SessionBuffer( IoSession session )
@@ -145,7 +145,7 @@
{
while( true )
{
- Event event;
+ IoFilterEvent event;
synchronized( buffer.eventQueue )
{
@@ -158,7 +158,7 @@
}
}
- processEvent( event.getNextFilter(), buffer.session, event.getType(), event.getData() );
+ processEvent( event );
}
if ( logger.isDebugEnabled() ) {
Modified: mina/trunk/core/src/main/java/org/apache/mina/filter/executor/UnorderedExecutorFilter.java
URL: http://svn.apache.org/viewvc/mina/trunk/core/src/main/java/org/apache/mina/filter/executor/UnorderedExecutorFilter.java?view=diff&rev=555838&r1=555837&r2=555838
==============================================================================
--- mina/trunk/core/src/main/java/org/apache/mina/filter/executor/UnorderedExecutorFilter.java (original)
+++ mina/trunk/core/src/main/java/org/apache/mina/filter/executor/UnorderedExecutorFilter.java Thu Jul 12 19:29:38 2007
@@ -22,7 +22,7 @@
import java.util.concurrent.Executor;
import org.apache.mina.common.IoFilterChain;
-import org.apache.mina.common.IoSession;
+import org.apache.mina.common.IoFilterEvent;
/**
* A filter that forwards I/O events to {@link Executor} to enforce a certain
@@ -69,27 +69,23 @@
super(executor);
}
- protected void fireEvent( NextFilter nextFilter, IoSession session,
- EventType type, Object data )
+ protected void fireEvent( IoFilterEvent event )
{
- Event event = new Event( type, nextFilter, data );
- getExecutor().execute(new ProcessEventRunnable(session, event));
+ getExecutor().execute(new ProcessEventRunnable(event));
}
private class ProcessEventRunnable implements Runnable
{
- private final IoSession session;
- private final Event event;
+ private final IoFilterEvent event;
- ProcessEventRunnable( IoSession session, Event event )
+ ProcessEventRunnable( IoFilterEvent event )
{
- this.session = session;
this.event = event;
}
public void run()
{
- processEvent( event.getNextFilter(), session, event.getType(), event.getData() );
+ processEvent( event );
}
}
}
Modified: mina/trunk/filter-ssl/src/main/java/org/apache/mina/filter/support/SSLHandler.java
URL: http://svn.apache.org/viewvc/mina/trunk/filter-ssl/src/main/java/org/apache/mina/filter/support/SSLHandler.java?view=diff&rev=555838&r1=555837&r2=555838
==============================================================================
--- mina/trunk/filter-ssl/src/main/java/org/apache/mina/filter/support/SSLHandler.java (original)
+++ mina/trunk/filter-ssl/src/main/java/org/apache/mina/filter/support/SSLHandler.java Thu Jul 12 19:29:38 2007
@@ -33,6 +33,8 @@
import javax.net.ssl.SSLSession;
import org.apache.mina.common.DefaultWriteRequest;
+import org.apache.mina.common.IoEventType;
+import org.apache.mina.common.IoFilterEvent;
import org.apache.mina.common.IoSession;
import org.apache.mina.common.WriteFuture;
import org.apache.mina.common.WriteRequest;
@@ -57,8 +59,8 @@
private final SSLFilter parent;
private final SSLContext ctx;
private final IoSession session;
- private final Queue<Event> preHandshakeEventQueue = new LinkedList<Event>();
- private final Queue<Event> postHandshakeEventQueue = new ConcurrentLinkedQueue<Event>();
+ private final Queue<IoFilterEvent> preHandshakeEventQueue = new LinkedList<IoFilterEvent>();
+ private final Queue<IoFilterEvent> postHandshakeEventQueue = new ConcurrentLinkedQueue<IoFilterEvent>();
private SSLEngine sslEngine;
@@ -250,31 +252,31 @@
public void schedulePreHandshakeWriteRequest( NextFilter nextFilter, WriteRequest writeRequest )
{
- preHandshakeEventQueue.offer( new Event( EventType.FILTER_WRITE, nextFilter, writeRequest ) );
+ preHandshakeEventQueue.offer( new IoFilterEvent( nextFilter, IoEventType.WRITE, session, writeRequest ) );
}
public void flushPreHandshakeEvents() throws SSLException
{
- Event scheduledWrite;
+ IoFilterEvent scheduledWrite;
while( ( scheduledWrite = preHandshakeEventQueue.poll() ) != null )
{
if( SessionLog.isDebugEnabled( session ) )
{
- SessionLog.debug( session, " Flushing buffered write request: " + scheduledWrite.data );
+ SessionLog.debug( session, " Flushing buffered write request: " + scheduledWrite.getParameter() );
}
- parent.filterWrite( scheduledWrite.nextFilter, session, ( WriteRequest ) scheduledWrite.data );
+ parent.filterWrite( scheduledWrite.getNextFilter(), session, ( WriteRequest ) scheduledWrite.getParameter() );
}
}
public void schedulePostHandshakeWriteRequest( NextFilter nextFilter, WriteRequest writeRequest )
{
- postHandshakeEventQueue.offer( new Event( EventType.FILTER_WRITE, nextFilter, writeRequest ) );
+ postHandshakeEventQueue.offer( new IoFilterEvent( nextFilter, IoEventType.WRITE, session, writeRequest ) );
}
public void schedulePostHandshakeMessage( NextFilter nextFilter, Object message )
{
- postHandshakeEventQueue.offer( new Event( EventType.RECEIVED, nextFilter, message ) );
+ postHandshakeEventQueue.offer( new IoFilterEvent( nextFilter, IoEventType.MESSAGE_RECEIVED, session, message ) );
}
public void flushPostHandshakeEvents()
@@ -285,17 +287,17 @@
return;
}
- Event e;
+ IoFilterEvent e;
while( ( e = postHandshakeEventQueue.poll() ) != null )
{
- if( EventType.RECEIVED == e.type )
+ if( IoEventType.MESSAGE_RECEIVED == e.getType() )
{
- e.nextFilter.messageReceived( session, e.data );
+ e.getNextFilter().messageReceived( session, e.getParameter() );
}
else
{
- e.nextFilter.filterWrite( session, ( WriteRequest ) e.data );
+ e.getNextFilter().filterWrite( session, ( WriteRequest ) e.getParameter() );
}
}
}
@@ -804,53 +806,5 @@
copy.put( src );
copy.flip();
return copy;
- }
-
- private static class EventType
- {
- public static final EventType RECEIVED = new EventType( "RECEIVED" );
- public static final EventType FILTER_WRITE = new EventType( "FILTER_WRITE" );
-
- private final String value;
-
- private EventType( String value )
- {
- this.value = value;
- }
-
- @Override
- public String toString()
- {
- return value;
- }
- }
-
- private static class Event
- {
- private final EventType type;
- private final NextFilter nextFilter;
- private final Object data;
-
- Event( EventType type, NextFilter nextFilter, Object data )
- {
- this.type = type;
- this.nextFilter = nextFilter;
- this.data = data;
- }
-
- public Object getData()
- {
- return data;
- }
-
- public NextFilter getNextFilter()
- {
- return nextFilter;
- }
-
- public EventType getType()
- {
- return type;
- }
}
}