Commit 24e5bd3f7ffdf7563102a3773ba0669f9e3be669

Authored by perry.werneck@gmail.com
1 parent a2ea3a57

Implementando versão android

android/jni/html.cpp
... ... @@ -32,10 +32,17 @@
32 32  
33 33 /*--[ Implement ]------------------------------------------------------------------------------------*/
34 34  
  35 +static jbyteArray retString(JNIEnv *env, const char *txt)
  36 +{
  37 + size_t len = strlen(txt);
  38 + jbyteArray ret = env->NewByteArray(len);
  39 + env->SetByteArrayRegion(ret, 0, len, (jbyte*) txt);
  40 + return ret;
  41 +}
35 42  
36   -JNIEXPORT jstring JNICALL Java_br_com_bb_pw3270_lib3270_getHTML(JNIEnv *env, jobject obj)
  43 +JNIEXPORT jbyteArray JNICALL Java_br_com_bb_pw3270_lib3270_getHTML(JNIEnv *env, jobject obj)
37 44 {
38   - jstring ret;
  45 + jbyteArray ret;
39 46  
40 47 session_request(env,obj);
41 48  
... ... @@ -44,13 +51,57 @@ JNIEXPORT jstring JNICALL Java_br_com_bb_pw3270_lib3270_getHTML(JNIEnv *env, job
44 51 if(session)
45 52 {
46 53 char *text = lib3270_get_as_html(session,(LIB3270_HTML_OPTION) (LIB3270_HTML_OPTION_ALL|LIB3270_HTML_OPTION_FORM));
47   - trace("text=%p",text);
48   - ret = env->NewStringUTF(text);
49   - lib3270_free(text);
  54 +
  55 + if(text)
  56 + {
  57 + ret = retString(env,text);
  58 + lib3270_free(text);
  59 + }
  60 + else
  61 + {
  62 + ret = retString(env, "<b>Empty session</b>");
  63 + }
  64 + }
  65 + else
  66 + {
  67 + ret = retString(env, "<b>Invalid Session ID</b>");
  68 + }
  69 +
  70 + trace("%s ends",__FUNCTION__);
  71 +
  72 + session_release();
  73 +
  74 + return ret;
  75 +}
  76 +
  77 +
  78 +JNIEXPORT jbyteArray JNICALL Java_br_com_bb_pw3270_lib3270_getText(JNIEnv *env, jobject obj)
  79 +{
  80 + jbyteArray ret;
  81 +
  82 + session_request(env,obj);
  83 +
  84 + trace("%s starts, session=%p",__FUNCTION__,session);
  85 +
  86 + if(session)
  87 + {
  88 + char *text = lib3270_get_text(session,0,-1);
  89 +
  90 + trace("%s will return \"%s\"",__FUNCTION__,text ? text : "");
  91 +
  92 + if(text)
  93 + {
  94 + ret = retString(env,text);
  95 + lib3270_free(text);
  96 + }
  97 + else
  98 + {
  99 + ret = retString(env, "");
  100 + }
50 101 }
51 102 else
52 103 {
53   - ret = env->NewStringUTF("<b>Invalid Session ID</b>");
  104 + ret = retString(env, "<b>Invalid Session ID</b>");
54 105 }
55 106  
56 107 trace("%s ends",__FUNCTION__);
... ...
android/lib3270NDK.cbp
... ... @@ -38,6 +38,9 @@
38 38 <Unit filename="../src/lib3270/html.c">
39 39 <Option compilerVar="CC" />
40 40 </Unit>
  41 + <Unit filename="../src/lib3270/selection.c">
  42 + <Option compilerVar="CC" />
  43 + </Unit>
41 44 <Unit filename="../src/lib3270/telnet.c">
42 45 <Option compilerVar="CC" />
43 46 </Unit>
... ...
android/src/br/com/bb/pw3270/PW3270Activity.java
... ... @@ -16,7 +16,7 @@ public class PW3270Activity extends Activity implements View.OnClickListener
16 16 {
17 17 private class terminal extends lib3270
18 18 {
19   -// private static final String TAG = "pw3270";
  19 + private static final String TAG = "pw3270";
20 20  
21 21 TextView msgbox;
22 22 Activity Main;
... ... @@ -46,14 +46,16 @@ public class PW3270Activity extends Activity implements View.OnClickListener
46 46 d.show();
47 47 }
48 48  
49   - /*
50   -
51 49 protected void redraw()
52 50 {
53   - String text = getHTML();
54   - Log.i(TAG,text);
  51 + try
  52 + {
  53 + String text = new String(getText(),getEncoding());
  54 +
  55 + msgbox
  56 + Log.i(TAG,text);
  57 + } catch(Exception e) { }
55 58 }
56   - */
57 59  
58 60  
59 61 };
... ...
android/src/br/com/bb/pw3270/lib3270.java
... ... @@ -51,6 +51,28 @@ public class lib3270
51 51 }
52 52 }
53 53  
  54 + private class byteMessage
  55 + {
  56 + byte[] msg;
  57 + int sz;
  58 +
  59 + byteMessage(byte[] contents, int len)
  60 + {
  61 + msg = contents;
  62 + sz = len;
  63 + }
  64 +
  65 + byte[] getMessage()
  66 + {
  67 + return msg;
  68 + }
  69 +
  70 + int getLength()
  71 + {
  72 + return sz;
  73 + }
  74 + }
  75 +
54 76 protected int send_data(byte[] data, int len)
55 77 {
56 78 Log.i(TAG,"Bytes a enviar: " + len);
... ... @@ -72,7 +94,7 @@ public class lib3270
72 94 Log.i(TAG,"Erro ao enviar dados: " + msg);
73 95  
74 96 postPopup(0,"Erro na comunicação","Não foi possível enviar dados",msg);
75   -
  97 +
76 98 }
77 99 return -1;
78 100 }
... ... @@ -156,8 +178,15 @@ public class lib3270
156 178 }
157 179 else if(sz > 0)
158 180 {
159   - Log.d(TAG,sz + " bytes recebidos");
160   - procRecvdata(in,sz);
  181 + Message msg = mHandler.obtainMessage();
  182 + msg.what = 6;
  183 + msg.obj = new byteMessage(in,sz);
  184 +
  185 + mHandler.sendMessage(msg);
  186 +
  187 +// Log.d(TAG,sz + " bytes recebidos");
  188 +// procRecvdata(in,sz);
  189 +
161 190 }
162 191 }
163 192  
... ... @@ -237,6 +266,7 @@ public class lib3270
237 266 case 4: // erase
238 267 changed = false;
239 268 erase();
  269 + break;
240 270  
241 271 case 5: // ctlr_done
242 272 Log.d(TAG,"ctlr_done");
... ... @@ -245,6 +275,12 @@ public class lib3270
245 275 changed = false;
246 276 redraw();
247 277 }
  278 + break;
  279 +
  280 + case 6: // recv_data
  281 + Log.d(TAG,((byteMessage) msg.obj).getLength() + " bytes recebidos");
  282 + procRecvdata(((byteMessage) msg.obj).getMessage(),((byteMessage) msg.obj).getLength());
  283 + break;
248 284 }
249 285 }
250 286 };
... ... @@ -293,6 +329,12 @@ public class lib3270
293 329 return -1;
294 330 }
295 331  
  332 + public int disconnect()
  333 + {
  334 + connected = false;
  335 + return 0;
  336 + }
  337 +
296 338 /*---[ Native calls ]----------------------------------------------------*/
297 339 static private native int init();
298 340  
... ... @@ -314,7 +356,8 @@ public class lib3270
314 356 public native boolean isTerminalReady();
315 357  
316 358 // Get/Set screen contents
317   - public native String getHTML();
  359 + public native byte[] getHTML();
  360 + public native byte[] getText();
318 361  
319 362  
320 363 }
... ...