Author: ngn
Date: Wed Mar 12 08:01:21 2008
New Revision: 636353

URL: http://svn.apache.org/viewvc?rev=636353&view=rev
Log:
Make the handler pluggable in runtime.

Added:
    mina/ftpserver/trunk/core/src/main/java/org/apache/ftpserver/FtpHandler.java
Modified:
    
mina/ftpserver/trunk/core/src/main/java/org/apache/ftpserver/listener/mina/FtpHandlerAdapter.java
    
mina/ftpserver/trunk/core/src/main/java/org/apache/ftpserver/listener/mina/MinaListener.java

Added: 
mina/ftpserver/trunk/core/src/main/java/org/apache/ftpserver/FtpHandler.java
URL: 
http://svn.apache.org/viewvc/mina/ftpserver/trunk/core/src/main/java/org/apache/ftpserver/FtpHandler.java?rev=636353&view=auto
==============================================================================
--- 
mina/ftpserver/trunk/core/src/main/java/org/apache/ftpserver/FtpHandler.java 
(added)
+++ 
mina/ftpserver/trunk/core/src/main/java/org/apache/ftpserver/FtpHandler.java 
Wed Mar 12 08:01:21 2008
@@ -0,0 +1,83 @@
+/*
+ * 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.ftpserver;
+
+import java.io.IOException;
+
+import org.apache.ftpserver.ftplet.FtpReply;
+import org.apache.ftpserver.ftplet.FtpRequest;
+import org.apache.ftpserver.interfaces.FtpIoSession;
+import org.apache.ftpserver.interfaces.FtpServerContext;
+import org.apache.ftpserver.listener.Listener;
+import org.apache.mina.common.IdleStatus;
+import org.apache.mina.common.IoHandler;
+import org.apache.mina.common.IoSession;
+
+public interface FtpHandler {
+       
+       void init(FtpServerContext context, Listener listener) throws Exception;
+       
+    /**
+     * Invoked from an I/O processor thread when a new connection has been 
created.
+     * Because this method is supposed to be called from the same thread that
+     * handles I/O of multiple sessions, please implement this method to 
perform
+     * tasks that consumes minimal amount of time such as socket parameter
+     * and user-defined session attribute initialization.
+     */
+    void sessionCreated(FtpIoSession session) throws Exception;
+
+    /**
+     * Invoked when a connection has been opened.  This method is invoked after
+     * [EMAIL PROTECTED] #sessionCreated(IoSession)}.  The biggest difference 
from
+     * [EMAIL PROTECTED] #sessionCreated(IoSession)} is that it's invoked from 
other thread
+     * than an I/O processor thread once thread modesl is configured properly.
+     */
+    void sessionOpened(FtpIoSession session) throws Exception;
+
+    /**
+     * Invoked when a connection is closed.
+     */
+    void sessionClosed(FtpIoSession session) throws Exception;
+
+    /**
+     * Invoked with the related [EMAIL PROTECTED] IdleStatus} when a 
connection becomes idle.
+     * This method is not invoked if the transport type is UDP; it's a known 
bug,
+     * and will be fixed in 2.0.
+     */
+    void sessionIdle(FtpIoSession session, IdleStatus status) throws Exception;
+
+    /**
+     * Invoked when any exception is thrown by user [EMAIL PROTECTED] 
IoHandler}
+     * implementation or by MINA.  If <code>cause</code> is instanceof
+     * [EMAIL PROTECTED] IOException}, MINA will close the connection 
automatically.
+     */
+    void exceptionCaught(FtpIoSession session, Throwable cause) throws 
Exception;
+
+    /**
+     * Invoked when a message is received.
+     */
+    void messageReceived(FtpIoSession session, FtpRequest request) throws 
Exception;
+
+    /**
+     * Invoked when a message written by [EMAIL PROTECTED] 
IoSession#write(Object)} is
+     * sent out.
+     */
+    void messageSent(FtpIoSession session, FtpReply reply) throws Exception;
+}

Modified: 
mina/ftpserver/trunk/core/src/main/java/org/apache/ftpserver/listener/mina/FtpHandlerAdapter.java
URL: 
http://svn.apache.org/viewvc/mina/ftpserver/trunk/core/src/main/java/org/apache/ftpserver/listener/mina/FtpHandlerAdapter.java?rev=636353&r1=636352&r2=636353&view=diff
==============================================================================
--- 
mina/ftpserver/trunk/core/src/main/java/org/apache/ftpserver/listener/mina/FtpHandlerAdapter.java
 (original)
+++ 
mina/ftpserver/trunk/core/src/main/java/org/apache/ftpserver/listener/mina/FtpHandlerAdapter.java
 Wed Mar 12 08:01:21 2008
@@ -79,6 +79,15 @@
        FtpIoSession ftpSession = new FtpIoSession(session, context);
        ftpHandler.sessionOpened(ftpSession);
        }
+
+       public FtpHandler getFtpHandler() {
+               return ftpHandler;
+       }
+
+       public void setFtpHandler(FtpHandler handler) {
+               this.ftpHandler = handler;
+               
+       }
        
 
 }

Modified: 
mina/ftpserver/trunk/core/src/main/java/org/apache/ftpserver/listener/mina/MinaListener.java
URL: 
http://svn.apache.org/viewvc/mina/ftpserver/trunk/core/src/main/java/org/apache/ftpserver/listener/mina/MinaListener.java?rev=636353&r1=636352&r2=636353&view=diff
==============================================================================
--- 
mina/ftpserver/trunk/core/src/main/java/org/apache/ftpserver/listener/mina/MinaListener.java
 (original)
+++ 
mina/ftpserver/trunk/core/src/main/java/org/apache/ftpserver/listener/mina/MinaListener.java
 Wed Mar 12 08:01:21 2008
@@ -196,10 +196,14 @@
 
 
     public FtpHandler getHandler() {
-               return handler;
+       return handler;
        }
 
        public void setHandler(FtpHandler handler) {
                this.handler = handler;
+               
+               if(acceptor != null) {
+                       
((FtpHandlerAdapter)acceptor.getHandler()).setFtpHandler(handler);
+               }
        }
 }


Reply via email to