From deda7ca54a3c8f1ba735e8654ca87f8808606122 Mon Sep 17 00:00:00 2001
From: Martin Sustrik <sustrik@250bpm.com>
Date: Fri, 26 Feb 2010 17:28:09 +0100
Subject: Java Poller patch

---
 bindings/java/Context.cpp          | 106 -------------------------------------
 bindings/java/Makefile.am          |  22 ++++++--
 bindings/java/org/zmq/Context.java |  18 -------
 3 files changed, 18 insertions(+), 128 deletions(-)
 mode change 100644 => 100755 bindings/java/org/zmq/Context.java

(limited to 'bindings/java')

diff --git a/bindings/java/Context.cpp b/bindings/java/Context.cpp
index 53ef0c9..5556ed8 100755
--- a/bindings/java/Context.cpp
+++ b/bindings/java/Context.cpp
@@ -24,8 +24,6 @@
 
 #include "org_zmq_Context.h"
 
-static void *fetch_socket (JNIEnv *env, jobject socket);
-
 /** Handle to Java's Context::contextHandle. */
 static jfieldID ctx_handle_fid = NULL;
 
@@ -112,107 +110,3 @@ JNIEXPORT void JNICALL Java_org_zmq_Context_finalize (JNIEnv *env,
     put_context (env, obj, NULL);
     assert (rc == 0);
 }
-
-JNIEXPORT jlong JNICALL Java_org_zmq_Context_poll (JNIEnv *env,
-    jobject obj,
-    jobjectArray socket_0mq,
-    jshortArray event_0mq,
-    jshortArray revent_0mq,
-    jlong timeout)
-{
-    jsize ls_0mq = 0;
-    jsize le_0mq = 0;
-    jsize lr_0mq = 0;
-
-    if (socket_0mq)
-        ls_0mq = env->GetArrayLength (socket_0mq);
-    if (event_0mq)
-        le_0mq = env->GetArrayLength (event_0mq);
-    if (revent_0mq)
-        lr_0mq = env->GetArrayLength (revent_0mq);
-
-    if (ls_0mq != le_0mq || ls_0mq != lr_0mq)
-        return 0;
-
-    jsize ls = ls_0mq;
-    if (ls <= 0)
-        return 0;
-
-    zmq_pollitem_t *pitem = new zmq_pollitem_t [ls];
-    short pc = 0;
-    int rc = 0;
-
-    //  Add 0MQ sockets.
-    if (ls_0mq > 0) {
-        jshort *e_0mq = env->GetShortArrayElements (event_0mq, 0);
-        if (e_0mq != NULL) {
-            for (int i = 0; i < ls_0mq; ++i) {
-                jobject s_0mq = env->GetObjectArrayElement (socket_0mq, i);
-                if (!s_0mq)
-                    continue;
-                void *s = fetch_socket (env, s_0mq);
-                if (!s)
-                    continue;
-                pitem [pc].socket = s;
-                pitem [pc].fd = 0;
-                pitem [pc].events = e_0mq [i];
-                pitem [pc].revents = 0;
-                ++pc;
-            }
-            env->ReleaseShortArrayElements(event_0mq, e_0mq, 0);
-        }
-    }
-
-    if (pc == ls) {
-        pc = 0;
-        long tout = (long) timeout;
-        rc = zmq_poll (pitem, ls, tout);
-        int err = 0;
-        const char *msg = "";
-        if (rc < 0) {
-            err = errno;
-            msg = zmq_strerror (err);
-        }
-    }
-
-    //  Set 0MQ results.
-    if (ls_0mq > 0) {
-        jshort *r_0mq = env->GetShortArrayElements (revent_0mq, 0);
-        if (r_0mq) {
-            for (int i = 0; i < ls_0mq; ++i) {
-                r_0mq [i] = pitem [pc].revents;
-                ++pc;
-            }
-            env->ReleaseShortArrayElements(revent_0mq, r_0mq, 0);
-        }
-    }
-
-    delete [] pitem;
-    return rc;
-}
-  
-/**
- * Get the value of socketHandle for the specified Java Socket.
- */
-static void *fetch_socket (JNIEnv *env, jobject socket)
-{
-    static jmethodID get_socket_handle_mid = NULL;
-
-    if (get_socket_handle_mid == NULL) {
-        jclass cls = env->GetObjectClass (socket);
-        assert (cls);
-        get_socket_handle_mid = env->GetMethodID (cls,
-            "getSocketHandle", "()J");
-        env->DeleteLocalRef (cls);
-        assert (get_socket_handle_mid);
-    }
-  
-    void *s = (void*) env->CallLongMethod (socket, get_socket_handle_mid);
-    if (env->ExceptionCheck ()) {
-        s = NULL;
-    }
-  
-    assert (s);
-    return s;
-}
-
diff --git a/bindings/java/Makefile.am b/bindings/java/Makefile.am
index e3d678f..f2da01c 100644
--- a/bindings/java/Makefile.am
+++ b/bindings/java/Makefile.am
@@ -12,15 +12,18 @@ jar_DATA = $(jarfile)
 
 dist_noinst_JAVA = \
 	org/zmq/Context.java \
-	org/zmq/Socket.java
+	org/zmq/Socket.java \
+    org/zmq/Poller.java
 
 lib_LTLIBRARIES = libjzmq.la
 libjzmq_la_SOURCES = \
 	Context.cpp \
-	Socket.cpp
+	Socket.cpp \
+    Poller.cpp
 nodist_libjzmq_la_SOURCES = \
 	org_zmq_Context.h \
-	org_zmq_Socket.h
+	org_zmq_Socket.h \
+    org_zmq_Poller.h
 
 libjzmq_la_CXXFLAGS = @JAVA_INCLUDE@ -I$(top_srcdir)/bindings/c -Wall
 libjzmq_la_LDFLAGS = -version-info @JLTVER@
@@ -30,13 +33,17 @@ BUILT_SOURCES = \
 	org/zmq/Context.class \
 	org_zmq_Context.h \
 	org/zmq/Socket.class \
-	org_zmq_Socket.h
+	org_zmq_Socket.h \
+	org/zmq/Poller.class \
+	org_zmq_Poller.h
 
 CLEANFILES = \
 	org/zmq/Context.class \
 	org_zmq_Context.h \
 	org/zmq/Socket.class \
 	org_zmq_Socket.h \
+	org/zmq/Poller.class \
+	org_zmq_Poller.h \
 	Zmq.jar
 
 $(srcdir)/Context.cpp: org_zmq_Context.h
@@ -53,6 +60,13 @@ org_zmq_Socket.h: org/zmq/Socket.class
 
 ./org/zmq/Socket.class: classdist_noinst.stamp
 
+$(srcdir)/Poller.cpp: org_zmq_Poller.h
+
+org_zmq_Poller.h: org/zmq/Poller.class
+	$(CLASSPATH_ENV) $(JAVAH) -jni -classpath . org.zmq.Poller
+
+./org/zmq/Poller.class: classdist_noinst.stamp
+
 dist-hook:
 	-rm $(distdir)/*.h
 
diff --git a/bindings/java/org/zmq/Context.java b/bindings/java/org/zmq/Context.java
old mode 100644
new mode 100755
index 7a3552b..a727749
--- a/bindings/java/org/zmq/Context.java
+++ b/bindings/java/org/zmq/Context.java
@@ -26,10 +26,6 @@ public class Context {
 
     public static final int POLL = 1;
 
-    public static final int POLLIN = 1;
-    public static final int POLLOUT = 2;
-    public static final int POLLERR = 4;
-
     /**
      * Class constructor.
      *
@@ -40,20 +36,6 @@ public class Context {
         construct (appThreads, ioThreads, flags);
     }
 
-    /**
-     * Issue a poll call on the specified 0MQ sockets.
-     * This function is experimental and may change in the future.
-     *
-     * @param socket an array of 0MQ Socket objects to poll.
-     * @param event an array of short values specifying what to poll for.
-     * @param revent an array of short values with the results.
-     * @param timeout the maximum timeout in microseconds.
-     */
-    public native long poll (Socket[] socket,
-			     short[] event,
-			     short[] revent,
-			     long timeout);
-
     /** Initialize the JNI interface */
     protected native void construct (int appThreads, int ioThreads, int flags);
 
-- 
cgit v1.2.3