You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@mina.apache.org by el...@apache.org on 2008/10/27 18:12:17 UTC

svn commit: r708239 - in /mina/trunk/core/src/main/java/org/apache/mina/core/session: AbstractIoSession.java IoSession.java

Author: elecharny
Date: Mon Oct 27 10:12:16 2008
New Revision: 708239

URL: http://svn.apache.org/viewvc?rev=708239&view=rev
Log:
o Added some Javadoc and comments
o Declared three methods in IoSession interface

Modified:
    mina/trunk/core/src/main/java/org/apache/mina/core/session/AbstractIoSession.java
    mina/trunk/core/src/main/java/org/apache/mina/core/session/IoSession.java

Modified: mina/trunk/core/src/main/java/org/apache/mina/core/session/AbstractIoSession.java
URL: http://svn.apache.org/viewvc/mina/trunk/core/src/main/java/org/apache/mina/core/session/AbstractIoSession.java?rev=708239&r1=708238&r2=708239&view=diff
==============================================================================
--- mina/trunk/core/src/main/java/org/apache/mina/core/session/AbstractIoSession.java (original)
+++ mina/trunk/core/src/main/java/org/apache/mina/core/session/AbstractIoSession.java Mon Oct 27 10:12:16 2008
@@ -31,6 +31,7 @@
 
 import org.apache.mina.core.buffer.IoBuffer;
 import org.apache.mina.core.file.DefaultFileRegion;
+import org.apache.mina.core.filterchain.IoFilterChain;
 import org.apache.mina.core.future.CloseFuture;
 import org.apache.mina.core.future.DefaultCloseFuture;
 import org.apache.mina.core.future.DefaultReadFuture;
@@ -44,6 +45,7 @@
 import org.apache.mina.core.service.IoService;
 import org.apache.mina.core.service.TransportMetadata;
 import org.apache.mina.core.write.DefaultWriteRequest;
+import org.apache.mina.core.write.WriteException;
 import org.apache.mina.core.write.WriteRequest;
 import org.apache.mina.core.write.WriteRequestQueue;
 import org.apache.mina.core.write.WriteToClosedSessionException;
@@ -363,22 +365,33 @@
             throw new NullPointerException("message");
         }
 
+        // We can't send a message to a connected session if we don't have 
+        // the remote address
         if (!getTransportMetadata().isConnectionless() &&
                 remoteAddress != null) {
             throw new UnsupportedOperationException();
         }
 
+        
+        // If the session has been closed or is closing, we can't either
+        // send a message to the remote side. We generate a future
+        // containing an exception.
         if (isClosing() || !isConnected()) {
             WriteFuture future = new DefaultWriteFuture(this);
             WriteRequest request = new DefaultWriteRequest(message, future, remoteAddress);
-            future.setException(new WriteToClosedSessionException(request));
+            WriteException writeException = new WriteToClosedSessionException(request);
+            future.setException(writeException);
             return future;
         }
 
         FileChannel openedFileChannel = null;
+        
+        // TODO: remove this code as soon as we use InputStream
+        // instead of Object for the message.
         try {
             if (message instanceof IoBuffer
                     && !((IoBuffer) message).hasRemaining()) {
+                // Nothing to write : probably an error in the user code
                 throw new IllegalArgumentException(
                 "message is empty. Forgot to call flip()?");
             } else if (message instanceof FileChannel) {
@@ -394,14 +407,20 @@
             return DefaultWriteFuture.newNotWrittenFuture(this, e);
         }
 
-        WriteFuture future = new DefaultWriteFuture(this);
-        getFilterChain().fireFilterWrite(
-                new DefaultWriteRequest(message, future, remoteAddress));
+        // Now, we can write the message. First, create a future
+        WriteFuture writeFuture = new DefaultWriteFuture(this);
+        WriteRequest writeRequest = new DefaultWriteRequest(message, writeFuture, remoteAddress);
+        
+        // Then, get the chain and inject the WriteRequest into it
+        IoFilterChain filterChain = getFilterChain();
+        filterChain.fireFilterWrite(writeRequest);
 
+        // TODO : This is not our business ! The caller has created a FileChannel,
+        // he has to close it !
         if (openedFileChannel != null) {
             // If we opened a FileChannel, it needs to be closed when the write has completed
             final FileChannel finalChannel = openedFileChannel;
-            future.addListener(new IoFutureListener<WriteFuture>() {
+            writeFuture.addListener(new IoFutureListener<WriteFuture>() {
                 public void operationComplete(WriteFuture future) {
                     try {
                         finalChannel.close();
@@ -412,7 +431,8 @@
             });
         }
 
-        return future;
+        // Return the WriteFuture.
+        return writeFuture;
     }
 
     /**
@@ -642,15 +662,7 @@
     }
 
     /**
-     * Update all statistical properties related with throughput assuming
-     * the specified time is the current time.  By default this method returns
-     * silently without updating the throughput properties if they were
-     * calculated already within last
-     * {@link IoSessionConfig#getThroughputCalculationInterval() calculation interval}.
-     * If, however, <tt>force</tt> is specified as <tt>true</tt>, this method
-     * updates the throughput properties immediately.
-
-     * @param currentTime the current time in milliseconds
+     * {@inheritDoc}
      */
     public final void updateThroughput(long currentTime, boolean force) {
         int interval = (int) (currentTime - lastThroughputCalculationTime);
@@ -825,7 +837,7 @@
     }
 
     /**
-     * TODO Add method documentation
+     * {@inheritDoc}
      */
     public final WriteRequestQueue getWriteRequestQueue() {
         if (writeRequestQueue == null) {
@@ -853,7 +865,7 @@
     }
 
     /**
-     * TODO Add method documentation
+     * {@inheritDoc}
      */
     public final void setCurrentWriteRequest(WriteRequest currentWriteRequest) {
         this.currentWriteRequest = currentWriteRequest;

Modified: mina/trunk/core/src/main/java/org/apache/mina/core/session/IoSession.java
URL: http://svn.apache.org/viewvc/mina/trunk/core/src/main/java/org/apache/mina/core/session/IoSession.java?rev=708239&r1=708238&r2=708239&view=diff
==============================================================================
--- mina/trunk/core/src/main/java/org/apache/mina/core/session/IoSession.java (original)
+++ mina/trunk/core/src/main/java/org/apache/mina/core/session/IoSession.java Mon Oct 27 10:12:16 2008
@@ -33,6 +33,7 @@
 import org.apache.mina.core.service.IoService;
 import org.apache.mina.core.service.TransportMetadata;
 import org.apache.mina.core.write.WriteRequest;
+import org.apache.mina.core.write.WriteRequestQueue;
 
 /**
  * A handle which represents connection between two end-points regardless of
@@ -97,6 +98,12 @@
      */
     IoFilterChain getFilterChain();
 
+    
+    /**
+     * TODO Add method documentation
+     */
+    WriteRequestQueue getWriteRequestQueue();
+
     /**
      * @return the {@link TransportMetadata} that this session runs on.
      */
@@ -371,6 +378,14 @@
     void setTrafficMask(TrafficMask trafficMask);
 
     /**
+     * 
+     * TODO setWriteRequestQueue.
+     *
+     * @param writeRequestQueue
+     */
+    void setCurrentWriteRequest(WriteRequest currentWriteRequest);
+    
+    /**
      * A shortcut method for {@link #setTrafficMask(TrafficMask)} that
      * suspends read operations for this session.
      */
@@ -383,6 +398,19 @@
     void suspendWrite();
 
     /**
+     * Update all statistical properties related with throughput assuming
+     * the specified time is the current time.  By default this method returns
+     * silently without updating the throughput properties if they were
+     * calculated already within last
+     * {@link IoSessionConfig#getThroughputCalculationInterval() calculation interval}.
+     * If, however, <tt>force</tt> is specified as <tt>true</tt>, this method
+     * updates the throughput properties immediately.
+
+     * @param currentTime the current time in milliseconds
+     */
+    void updateThroughput(long currentTime, boolean force);
+    
+    /**
      * A shortcut method for {@link #setTrafficMask(TrafficMask)} that
      * resumes read operations for this session.
      */