You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@commons.apache.org by mt...@apache.org on 2011/06/09 12:15:07 UTC

svn commit: r1133767 - in /commons/sandbox/runtime/trunk/src/main: java/org/apache/commons/runtime/net/PosixSelector.java java/org/apache/commons/runtime/net/Selector.java test/org/apache/commons/runtime/TestPosixEndpoint.java

Author: mturk
Date: Thu Jun  9 10:15:07 2011
New Revision: 1133767

URL: http://svn.apache.org/viewvc?rev=1133767&view=rev
Log:
Add select api.

Modified:
    commons/sandbox/runtime/trunk/src/main/java/org/apache/commons/runtime/net/PosixSelector.java
    commons/sandbox/runtime/trunk/src/main/java/org/apache/commons/runtime/net/Selector.java
    commons/sandbox/runtime/trunk/src/main/test/org/apache/commons/runtime/TestPosixEndpoint.java

Modified: commons/sandbox/runtime/trunk/src/main/java/org/apache/commons/runtime/net/PosixSelector.java
URL: http://svn.apache.org/viewvc/commons/sandbox/runtime/trunk/src/main/java/org/apache/commons/runtime/net/PosixSelector.java?rev=1133767&r1=1133766&r2=1133767&view=diff
==============================================================================
--- commons/sandbox/runtime/trunk/src/main/java/org/apache/commons/runtime/net/PosixSelector.java (original)
+++ commons/sandbox/runtime/trunk/src/main/java/org/apache/commons/runtime/net/PosixSelector.java Thu Jun  9 10:15:07 2011
@@ -18,6 +18,7 @@ package org.apache.commons.runtime.net;
 import java.io.IOException;
 import java.net.SocketException;
 import java.util.ArrayList;
+import java.util.List;
 import java.util.HashSet;
 import org.apache.commons.runtime.io.ClosedDescriptorException;
 import org.apache.commons.runtime.io.Descriptor;
@@ -39,9 +40,10 @@ import org.apache.commons.runtime.Status
 final class PosixSelector extends AbstractSelector
 {
 
-    private short[]             revents;
-    private SelectionKeyImpl[]  keyset;
-    private long                pollset;
+    private short[]                     revents;
+    private SelectionKeyImpl[]          keyset;
+    private long                        pollset;
+    private ArrayList<SelectionKey>     selected;
 
     private static native long  create0(int size)
         throws OutOfMemoryError,
@@ -61,9 +63,10 @@ final class PosixSelector extends Abstra
     public PosixSelector(int size)
     {
         super(size);
-        pollset = create0(size);
-        revents = new short[size];
-        keyset  = new SelectionKeyImpl[size];
+        pollset  = create0(size);
+        revents  = new short[size];
+        keyset   = new SelectionKeyImpl[size];
+        selected = new ArrayList<SelectionKey>();
     }
 
     private void ensureValid()
@@ -112,6 +115,40 @@ final class PosixSelector extends Abstra
     }
 
     @Override
+    public List<SelectionKey> select(int timeout)
+        throws ClosedSelectorException,
+               IOException
+    {
+        ensureValid();
+        selected.clear();
+        int ns = wait0(pollset, keyset, revents, timeout, autoCancel);
+        selected.ensureCapacity(ns);
+        for (int i = 0; i < ns; i++) {
+            selected.add(keyset[i]);
+            keyset[i].revents  = revents[i];
+            keyset[i].selected = false;
+        }
+        return selected;
+    }
+
+    @Override
+    public List<SelectionKey> clear()
+        throws ClosedSelectorException,
+               IOException
+    {
+        ensureValid();
+        selected.clear();
+        int ns = clr0(pollset, keyset);
+        selected.ensureCapacity(ns);
+        for (int i = 0; i < ns; i++) {
+            selected.add(keyset[i]);
+            keyset[i].revents  = 0;
+            keyset[i].selected = false;
+        }
+        return selected;
+    }
+
+    @Override
     protected void cancel(SelectionKey key)
         throws ClosedSelectorException,
                IllegalSelectorException

Modified: commons/sandbox/runtime/trunk/src/main/java/org/apache/commons/runtime/net/Selector.java
URL: http://svn.apache.org/viewvc/commons/sandbox/runtime/trunk/src/main/java/org/apache/commons/runtime/net/Selector.java?rev=1133767&r1=1133766&r2=1133767&view=diff
==============================================================================
--- commons/sandbox/runtime/trunk/src/main/java/org/apache/commons/runtime/net/Selector.java (original)
+++ commons/sandbox/runtime/trunk/src/main/java/org/apache/commons/runtime/net/Selector.java Thu Jun  9 10:15:07 2011
@@ -20,6 +20,7 @@ package org.apache.commons.runtime.net;
 
 import java.io.Closeable;
 import java.io.IOException;
+import java.util.List;
 import org.apache.commons.runtime.io.ClosedDescriptorException;
 import org.apache.commons.runtime.io.InvalidDescriptorException;
 import org.apache.commons.runtime.InvalidRangeException;
@@ -161,4 +162,21 @@ public abstract class Selector implement
     {
         autoCancel = on;
     }
+
+    public abstract List<SelectionKey> select(int timeout)
+        throws ClosedSelectorException,
+               IOException;
+
+    public final List<SelectionKey> select()
+        throws ClosedSelectorException,
+               IOException
+    {
+        return select(-1);
+    }
+               
+    public abstract List<SelectionKey> clear()
+        throws ClosedSelectorException,
+               IOException;
+
+    
 }

Modified: commons/sandbox/runtime/trunk/src/main/test/org/apache/commons/runtime/TestPosixEndpoint.java
URL: http://svn.apache.org/viewvc/commons/sandbox/runtime/trunk/src/main/test/org/apache/commons/runtime/TestPosixEndpoint.java?rev=1133767&r1=1133766&r2=1133767&view=diff
==============================================================================
--- commons/sandbox/runtime/trunk/src/main/test/org/apache/commons/runtime/TestPosixEndpoint.java (original)
+++ commons/sandbox/runtime/trunk/src/main/test/org/apache/commons/runtime/TestPosixEndpoint.java Thu Jun  9 10:15:07 2011
@@ -17,18 +17,7 @@
 package org.apache.commons.runtime.net;
 
 import java.io.IOException;
-import java.io.File;
-import java.io.FileDescriptor;
-import java.io.FileInputStream;
-import java.io.FileOutputStream;
-import java.io.OutputStream;
-import java.net.InetAddress;
-import java.net.DatagramSocket;
-import java.net.DatagramSocketImpl;
-import java.net.Socket;
-import java.net.SocketImpl;
-import java.net.ServerSocket;
-import java.net.SocketException;
+import java.util.List;
 import org.testng.annotations.*;
 import org.testng.Assert;
 
@@ -66,6 +55,9 @@ public class TestPosixEndpoint extends A
             while (true) {
                 try {
                     System.out.println("Accepting connection ...");
+                    List<SelectionKey> set = ps.select();
+                    System.out.println("Accepted  connection: " + set.size());
+                    
                     LocalEndpoint e = ss.accept();
                     assertNotNull(e.descriptor());
                 } catch (Exception x) {
@@ -89,8 +81,9 @@ public class TestPosixEndpoint extends A
         Selector             ps = Selector.open(EndpointType.LOCAL);
         LocalServerEndpoint  ss = new LocalServerEndpoint();
         LocalEndpointAddress sa = new LocalEndpointAddress("/tmp/acrposixep1.sock");
+        ss.configureBlocking(false);
         ss.bind(sa);
-        // ss.configureBlocking(false);
+        // ps.setAutoCancel(true);
         Acceptor aw = new Acceptor(ss, ps);
         aw.setName("TestAcceptorThread");
         aw.start();
@@ -111,9 +104,12 @@ public class TestPosixEndpoint extends A
         cs.connect(sa);
         assertTrue(cs.isBlocking());
         cs.close();
-        ps.close();
         // Wait for acceptor thread to finish
         aw.join();
+        List<SelectionKey> set = ps.clear();
+        // Shoud equal zero if autoCancel is set to true
+        assertEquals(set.size(), 1);
+        ps.close();
     }
 
 }