From 24e5bd3f7ffdf7563102a3773ba0669f9e3be669 Mon Sep 17 00:00:00 2001 From: perry.werneck@gmail.com Date: Tue, 10 Jul 2012 17:20:11 +0000 Subject: [PATCH] Implementando versão android --- android/jni/html.cpp | 63 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++------ android/lib3270NDK.cbp | 3 +++ android/src/br/com/bb/pw3270/PW3270Activity.java | 14 ++++++++------ android/src/br/com/bb/pw3270/lib3270.java | 51 +++++++++++++++++++++++++++++++++++++++++++++++---- 4 files changed, 115 insertions(+), 16 deletions(-) diff --git a/android/jni/html.cpp b/android/jni/html.cpp index c91b3fd..ca2ae93 100644 --- a/android/jni/html.cpp +++ b/android/jni/html.cpp @@ -32,10 +32,17 @@ /*--[ Implement ]------------------------------------------------------------------------------------*/ +static jbyteArray retString(JNIEnv *env, const char *txt) +{ + size_t len = strlen(txt); + jbyteArray ret = env->NewByteArray(len); + env->SetByteArrayRegion(ret, 0, len, (jbyte*) txt); + return ret; +} -JNIEXPORT jstring JNICALL Java_br_com_bb_pw3270_lib3270_getHTML(JNIEnv *env, jobject obj) +JNIEXPORT jbyteArray JNICALL Java_br_com_bb_pw3270_lib3270_getHTML(JNIEnv *env, jobject obj) { - jstring ret; + jbyteArray ret; session_request(env,obj); @@ -44,13 +51,57 @@ JNIEXPORT jstring JNICALL Java_br_com_bb_pw3270_lib3270_getHTML(JNIEnv *env, job if(session) { char *text = lib3270_get_as_html(session,(LIB3270_HTML_OPTION) (LIB3270_HTML_OPTION_ALL|LIB3270_HTML_OPTION_FORM)); - trace("text=%p",text); - ret = env->NewStringUTF(text); - lib3270_free(text); + + if(text) + { + ret = retString(env,text); + lib3270_free(text); + } + else + { + ret = retString(env, "Empty session"); + } + } + else + { + ret = retString(env, "Invalid Session ID"); + } + + trace("%s ends",__FUNCTION__); + + session_release(); + + return ret; +} + + +JNIEXPORT jbyteArray JNICALL Java_br_com_bb_pw3270_lib3270_getText(JNIEnv *env, jobject obj) +{ + jbyteArray ret; + + session_request(env,obj); + + trace("%s starts, session=%p",__FUNCTION__,session); + + if(session) + { + char *text = lib3270_get_text(session,0,-1); + + trace("%s will return \"%s\"",__FUNCTION__,text ? text : ""); + + if(text) + { + ret = retString(env,text); + lib3270_free(text); + } + else + { + ret = retString(env, ""); + } } else { - ret = env->NewStringUTF("Invalid Session ID"); + ret = retString(env, "Invalid Session ID"); } trace("%s ends",__FUNCTION__); diff --git a/android/lib3270NDK.cbp b/android/lib3270NDK.cbp index 68c1c3d..07c5ea5 100644 --- a/android/lib3270NDK.cbp +++ b/android/lib3270NDK.cbp @@ -38,6 +38,9 @@ + + diff --git a/android/src/br/com/bb/pw3270/PW3270Activity.java b/android/src/br/com/bb/pw3270/PW3270Activity.java index 1d0f0eb..fae4812 100644 --- a/android/src/br/com/bb/pw3270/PW3270Activity.java +++ b/android/src/br/com/bb/pw3270/PW3270Activity.java @@ -16,7 +16,7 @@ public class PW3270Activity extends Activity implements View.OnClickListener { private class terminal extends lib3270 { -// private static final String TAG = "pw3270"; + private static final String TAG = "pw3270"; TextView msgbox; Activity Main; @@ -46,14 +46,16 @@ public class PW3270Activity extends Activity implements View.OnClickListener d.show(); } - /* - protected void redraw() { - String text = getHTML(); - Log.i(TAG,text); + try + { + String text = new String(getText(),getEncoding()); + + msgbox + Log.i(TAG,text); + } catch(Exception e) { } } - */ }; diff --git a/android/src/br/com/bb/pw3270/lib3270.java b/android/src/br/com/bb/pw3270/lib3270.java index a8dcac2..8dc11e6 100644 --- a/android/src/br/com/bb/pw3270/lib3270.java +++ b/android/src/br/com/bb/pw3270/lib3270.java @@ -51,6 +51,28 @@ public class lib3270 } } + private class byteMessage + { + byte[] msg; + int sz; + + byteMessage(byte[] contents, int len) + { + msg = contents; + sz = len; + } + + byte[] getMessage() + { + return msg; + } + + int getLength() + { + return sz; + } + } + protected int send_data(byte[] data, int len) { Log.i(TAG,"Bytes a enviar: " + len); @@ -72,7 +94,7 @@ public class lib3270 Log.i(TAG,"Erro ao enviar dados: " + msg); postPopup(0,"Erro na comunicação","Não foi possível enviar dados",msg); - + } return -1; } @@ -156,8 +178,15 @@ public class lib3270 } else if(sz > 0) { - Log.d(TAG,sz + " bytes recebidos"); - procRecvdata(in,sz); + Message msg = mHandler.obtainMessage(); + msg.what = 6; + msg.obj = new byteMessage(in,sz); + + mHandler.sendMessage(msg); + +// Log.d(TAG,sz + " bytes recebidos"); +// procRecvdata(in,sz); + } } @@ -237,6 +266,7 @@ public class lib3270 case 4: // erase changed = false; erase(); + break; case 5: // ctlr_done Log.d(TAG,"ctlr_done"); @@ -245,6 +275,12 @@ public class lib3270 changed = false; redraw(); } + break; + + case 6: // recv_data + Log.d(TAG,((byteMessage) msg.obj).getLength() + " bytes recebidos"); + procRecvdata(((byteMessage) msg.obj).getMessage(),((byteMessage) msg.obj).getLength()); + break; } } }; @@ -293,6 +329,12 @@ public class lib3270 return -1; } + public int disconnect() + { + connected = false; + return 0; + } + /*---[ Native calls ]----------------------------------------------------*/ static private native int init(); @@ -314,7 +356,8 @@ public class lib3270 public native boolean isTerminalReady(); // Get/Set screen contents - public native String getHTML(); + public native byte[] getHTML(); + public native byte[] getText(); } -- libgit2 0.21.2