From d3ab3fb98019d136335466f6b5c9d4d6ad45fd2f Mon Sep 17 00:00:00 2001 From: perry.werneck@gmail.com Date: Tue, 15 May 2012 14:10:53 +0000 Subject: [PATCH] Implementando objeto lib3270 para android --- android/jni/main.cpp | 54 +++++++++++++++++++++++++++++++++++++++++++++++++----- android/res/layout/main.xml | 2 +- android/src/br/com/bb/pw3270/PW3270Activity.java | 44 +++++++++++++++++++++++++++++++++++++------- android/src/br/com/bb/pw3270/lib3270.java | 98 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++--------------------------- pw3270.cbp | 8 +++++--- 5 files changed, 163 insertions(+), 43 deletions(-) diff --git a/android/jni/main.cpp b/android/jni/main.cpp index d23fd7b..1ace974 100644 --- a/android/jni/main.cpp +++ b/android/jni/main.cpp @@ -38,23 +38,58 @@ } INFO; + #define session_request(env, obj) INFO jni_data = { env, obj }; \ + H3270 * session = lib3270_get_default_session_handle(); \ + session->widget = &jni_data; + + #define session_release() session->widget = 0; + +/*--[ Globals ]--------------------------------------------------------------------------------------*/ + + const char *java_class_name = "br/com/bb/pw3270/lib3270"; + /*--[ Implement ]------------------------------------------------------------------------------------*/ +static void post_message(H3270 *session, int msgid, int arg1 = 0, int arg2 = 0) +{ + if(session->widget) + { + JNIEnv * env = ((INFO *) session->widget)->env; + jobject obj = ((INFO *) session->widget)->obj; + jclass cls = env->GetObjectClass(obj); + jmethodID mid = env->GetMethodID(cls, "post_message", "(III)V");; + env->CallVoidMethod(obj,mid,(jint) msgid, (jint) arg1, (jint) arg2); + } +} + +static void update_status(H3270 *session, LIB3270_MESSAGE id) +{ + post_message(session,0,id); +} + +static void changed(H3270 *session, int offset, int len) +{ + post_message(session,1,offset,len); +} + JNIEXPORT jint JNICALL Java_br_com_bb_pw3270_lib3270_init(JNIEnv *env, jclass obj) { H3270 * session = lib3270_session_new(""); + session->changed = changed; + session->update_status = update_status; + return 0; } JNIEXPORT jint JNICALL Java_br_com_bb_pw3270_lib3270_processEvents(JNIEnv *env, jobject obj) { - INFO data = { env, obj }; - H3270 * session = lib3270_get_default_session_handle(); + session_request(env,obj); - session->widget = &data; lib3270_main_iterate(session,1); - session->widget = 0; + + session_release(); + return 0; } @@ -70,7 +105,9 @@ JNIEXPORT jboolean JNICALL Java_br_com_bb_pw3270_lib3270_isTerminalReady(JNIEnv JNIEXPORT void JNICALL Java_br_com_bb_pw3270_lib3270_setHost(JNIEnv *env, jobject obj, jstring hostname) { - lib3270_set_host(lib3270_get_default_session_handle(),env->GetStringUTFChars(hostname, 0)); + session_request(env,obj); + lib3270_set_host(session,env->GetStringUTFChars(hostname, 0)); + session_release(); } JNIEXPORT jstring JNICALL Java_br_com_bb_pw3270_lib3270_getHost(JNIEnv *env, jobject obj) @@ -78,3 +115,10 @@ JNIEXPORT jstring JNICALL Java_br_com_bb_pw3270_lib3270_getHost(JNIEnv *env, job return env->NewStringUTF(lib3270_get_host(lib3270_get_default_session_handle())); } +JNIEXPORT jint JNICALL Java_br_com_bb_pw3270_lib3270_do_1connect(JNIEnv *env, jobject obj) +{ + session_request(env,obj); + update_status(session,(LIB3270_MESSAGE) 10); + session_release(); + return -1; +} diff --git a/android/res/layout/main.xml b/android/res/layout/main.xml index 5591f21..56be3a9 100644 --- a/android/res/layout/main.xml +++ b/android/res/layout/main.xml @@ -9,7 +9,7 @@ android:layout_height="wrap_content" > + + + + + - - - -- libgit2 0.21.2