diff options
Diffstat (limited to 'bindings/java/Context.cpp')
-rwxr-xr-x | bindings/java/Context.cpp | 106 |
1 files changed, 0 insertions, 106 deletions
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; -} - |