Commit d3c899e3765fc832d9e33aab99525dcfbb5436d0
1 parent
d3ab3fb9
Exists in
master
and in
5 other branches
Testando envio de mensagems jni<->android
Showing
4 changed files
with
149 additions
and
36 deletions
Show diff stats
android/jni/main.cpp
| ... | ... | @@ -28,6 +28,7 @@ |
| 28 | 28 | |
| 29 | 29 | #include "globals.h" |
| 30 | 30 | #include <lib3270/session.h> |
| 31 | + #include <lib3270/popup.h> | |
| 31 | 32 | |
| 32 | 33 | /*--[ Defines ]--------------------------------------------------------------------------------------*/ |
| 33 | 34 | |
| ... | ... | @@ -57,25 +58,47 @@ static void post_message(H3270 *session, int msgid, int arg1 = 0, int arg2 = 0) |
| 57 | 58 | JNIEnv * env = ((INFO *) session->widget)->env; |
| 58 | 59 | jobject obj = ((INFO *) session->widget)->obj; |
| 59 | 60 | jclass cls = env->GetObjectClass(obj); |
| 60 | - jmethodID mid = env->GetMethodID(cls, "post_message", "(III)V");; | |
| 61 | + jmethodID mid = env->GetMethodID(cls, "postMessage", "(III)V");; | |
| 61 | 62 | env->CallVoidMethod(obj,mid,(jint) msgid, (jint) arg1, (jint) arg2); |
| 62 | 63 | } |
| 63 | 64 | } |
| 64 | 65 | |
| 65 | 66 | static void update_status(H3270 *session, LIB3270_MESSAGE id) |
| 66 | 67 | { |
| 67 | - post_message(session,0,id); | |
| 68 | + post_message(session,1,id); | |
| 68 | 69 | } |
| 69 | 70 | |
| 70 | 71 | static void changed(H3270 *session, int offset, int len) |
| 71 | 72 | { |
| 72 | - post_message(session,1,offset,len); | |
| 73 | + post_message(session,2,offset,len); | |
| 74 | +} | |
| 75 | + | |
| 76 | +static int popuphandler(H3270 *session, void *terminal, LIB3270_NOTIFY type, const char *title, const char *msg, const char *fmt, va_list args) | |
| 77 | +{ | |
| 78 | + if(session->widget) | |
| 79 | + { | |
| 80 | + JNIEnv * env = ((INFO *) session->widget)->env; | |
| 81 | + jobject obj = ((INFO *) session->widget)->obj; | |
| 82 | + jclass cls = env->GetObjectClass(obj); | |
| 83 | + jmethodID mid = env->GetMethodID(cls, "postPopup", "(ILjava/lang/String;Ljava/lang/String;Ljava/lang/String;)V"); | |
| 84 | + char * descr; | |
| 85 | + | |
| 86 | + descr = lib3270_vsprintf(fmt, args); | |
| 87 | + | |
| 88 | + env->CallVoidMethod(obj,mid, (jint) type, | |
| 89 | + env->NewStringUTF(title), | |
| 90 | + env->NewStringUTF(msg), | |
| 91 | + env->NewStringUTF(descr) ); | |
| 92 | + lib3270_free(descr); | |
| 93 | + } | |
| 73 | 94 | } |
| 74 | 95 | |
| 75 | 96 | JNIEXPORT jint JNICALL Java_br_com_bb_pw3270_lib3270_init(JNIEnv *env, jclass obj) |
| 76 | 97 | { |
| 77 | 98 | H3270 * session = lib3270_session_new(""); |
| 78 | 99 | |
| 100 | + lib3270_set_popup_handler(popuphandler); | |
| 101 | + | |
| 79 | 102 | session->changed = changed; |
| 80 | 103 | session->update_status = update_status; |
| 81 | 104 | ... | ... |
| ... | ... | @@ -0,0 +1,25 @@ |
| 1 | +<?xml version="1.0" encoding="utf-8"?> | |
| 2 | +<resources> | |
| 3 | + | |
| 4 | + <string name="hello">Hello World, PW3270Activity!</string> | |
| 5 | + <string name="app_name">PW3270</string> | |
| 6 | + <string-array name="program_msg"> | |
| 7 | + <item>LIB3270_MESSAGE_NONE</item> | |
| 8 | + <item>LIB3270_MESSAGE_SYSWAIT</item> | |
| 9 | + <item>LIB3270_MESSAGE_TWAIT</item> | |
| 10 | + <item>LIB3270_MESSAGE_CONNECTED</item> | |
| 11 | + <item>LIB3270_MESSAGE_DISCONNECTED</item> | |
| 12 | + <item>LIB3270_MESSAGE_AWAITING_FIRST</item> | |
| 13 | + <item>LIB3270_MESSAGE_MINUS</item> | |
| 14 | + <item>LIB3270_MESSAGE_PROTECTED</item> | |
| 15 | + <item>LIB3270_MESSAGE_NUMERIC</item> | |
| 16 | + <item>LIB3270_MESSAGE_OVERFLOW</item> | |
| 17 | + <item>LIB3270_MESSAGE_INHIBIT</item> | |
| 18 | + <item>LIB3270_MESSAGE_KYBDLOCK</item> | |
| 19 | + <item>LIB3270_MESSAGE_X</item> | |
| 20 | + <item>LIB3270_MESSAGE_RESOLVING</item> | |
| 21 | + <item>LIB3270_MESSAGE_CONNECTING</item> | |
| 22 | + </string-array> | |
| 23 | + | |
| 24 | + | |
| 25 | +</resources> | |
| 0 | 26 | \ No newline at end of file | ... | ... |
android/src/br/com/bb/pw3270/PW3270Activity.java
| ... | ... | @@ -6,6 +6,7 @@ import android.widget.TextView; |
| 6 | 6 | import android.widget.Button; |
| 7 | 7 | import android.widget.EditText; |
| 8 | 8 | import android.view.View; |
| 9 | +import android.content.res.*; | |
| 9 | 10 | |
| 10 | 11 | public class PW3270Activity extends Activity implements View.OnClickListener |
| 11 | 12 | { |
| ... | ... | @@ -20,24 +21,34 @@ public class PW3270Activity extends Activity implements View.OnClickListener |
| 20 | 21 | |
| 21 | 22 | } |
| 22 | 23 | |
| 23 | - protected void update_message(int id) | |
| 24 | + protected void updateProgramMessage(int id) | |
| 24 | 25 | { |
| 25 | - this.view.setText("ID=" + id); | |
| 26 | + this.view.setText(message[id]); | |
| 27 | + } | |
| 28 | + | |
| 29 | + public void popupMessage(int type, String title, String text, String info) | |
| 30 | + { | |
| 31 | + this.view.setText(title + "\n" + text + "\n" + info); | |
| 26 | 32 | } |
| 27 | 33 | |
| 28 | 34 | |
| 29 | 35 | }; |
| 30 | 36 | |
| 31 | - terminal host; | |
| 32 | - EditText uri; | |
| 37 | + private terminal host; | |
| 38 | + private EditText uri; | |
| 39 | + private Resources res; | |
| 40 | + private String[] message; | |
| 33 | 41 | |
| 34 | 42 | /** Called when the activity is first created. */ |
| 35 | 43 | @Override |
| 36 | - public void onCreate(Bundle savedInstanceState) { | |
| 44 | + public void onCreate(Bundle savedInstanceState) | |
| 45 | + { | |
| 37 | 46 | super.onCreate(savedInstanceState); |
| 38 | 47 | setContentView(R.layout.main); |
| 39 | 48 | |
| 40 | - uri = (EditText) findViewById(R.id.hostname); | |
| 49 | + res = getResources(); | |
| 50 | + message = res.getStringArray(R.array.program_msg); | |
| 51 | + uri = (EditText) findViewById(R.id.hostname); | |
| 41 | 52 | |
| 42 | 53 | // Set button |
| 43 | 54 | Button btn = (Button) findViewById(R.id.connect); |
| ... | ... | @@ -50,7 +61,7 @@ public class PW3270Activity extends Activity implements View.OnClickListener |
| 50 | 61 | public void onClick(View v) |
| 51 | 62 | { |
| 52 | 63 | // Perform action on click |
| 53 | - host.setHost(uri.getText().toString()); | |
| 64 | + // host.setHost(uri.getText().toString()); | |
| 54 | 65 | host.connect(); |
| 55 | 66 | } |
| 56 | 67 | ... | ... |
android/src/br/com/bb/pw3270/lib3270.java
| ... | ... | @@ -8,8 +8,8 @@ import android.os.Message; |
| 8 | 8 | |
| 9 | 9 | public class lib3270 |
| 10 | 10 | { |
| 11 | - NetworkThread terminal; | |
| 12 | - | |
| 11 | + private NetworkThread mainloop; | |
| 12 | + | |
| 13 | 13 | static |
| 14 | 14 | { |
| 15 | 15 | System.loadLibrary("3270"); |
| ... | ... | @@ -18,29 +18,46 @@ public class lib3270 |
| 18 | 18 | |
| 19 | 19 | lib3270() |
| 20 | 20 | { |
| 21 | - terminal = new NetworkThread(handler); | |
| 21 | + mainloop = null; | |
| 22 | + } | |
| 23 | + | |
| 24 | + private class popupMessageInfo | |
| 25 | + { | |
| 26 | + public String title; | |
| 27 | + public String text; | |
| 28 | + public String info; | |
| 29 | + | |
| 30 | + popupMessageInfo(String title, String text, String info) | |
| 31 | + { | |
| 32 | + this.title = title; | |
| 33 | + this.text = text; | |
| 34 | + this.info = info; | |
| 35 | + } | |
| 22 | 36 | } |
| 23 | 37 | |
| 24 | 38 | // Main Thread |
| 25 | - private class NetworkThread extends Thread | |
| 39 | + private class NetworkThread extends Thread | |
| 26 | 40 | { |
| 27 | 41 | Handler mHandler; |
| 28 | - | |
| 29 | - NetworkThread(Handler h) | |
| 42 | + | |
| 43 | + NetworkThread(Handler h) | |
| 30 | 44 | { |
| 31 | 45 | mHandler = h; |
| 32 | 46 | } |
| 33 | - | |
| 47 | + | |
| 34 | 48 | public void run() |
| 35 | 49 | { |
| 36 | - postMessage(0,99,0); | |
| 37 | -/* | |
| 50 | + postMessage(0,1,0); | |
| 51 | + postPopup(0,"titulo","texto","info"); | |
| 52 | + | |
| 53 | + /* | |
| 38 | 54 | do_connect(); |
| 39 | 55 | while(isConnected()) |
| 40 | 56 | processEvents(); |
| 41 | -*/ | |
| 57 | + */ | |
| 58 | + postMessage(0,0,0); | |
| 42 | 59 | } |
| 43 | - | |
| 60 | + | |
| 44 | 61 | public void postMessage(int what, int arg1, int arg2) |
| 45 | 62 | { |
| 46 | 63 | Message msg = mHandler.obtainMessage(); |
| ... | ... | @@ -49,39 +66,77 @@ public class lib3270 |
| 49 | 66 | msg.arg2 = arg2; |
| 50 | 67 | mHandler.sendMessage(msg); |
| 51 | 68 | } |
| 52 | - | |
| 69 | + | |
| 70 | + public void postPopup(int type, String title, String text, String info) | |
| 71 | + { | |
| 72 | + Message msg = mHandler.obtainMessage(); | |
| 73 | + | |
| 74 | + msg.what = 3; | |
| 75 | + msg.arg1 = type; | |
| 76 | + msg.obj = new popupMessageInfo(title,text,info); | |
| 77 | + mHandler.sendMessage(msg); | |
| 78 | + } | |
| 79 | + | |
| 53 | 80 | } |
| 54 | - | |
| 81 | + | |
| 82 | + public void postMessage(int what, int arg1, int arg2) | |
| 83 | + { | |
| 84 | + mainloop.postMessage(what, arg1, arg2); | |
| 85 | + } | |
| 86 | + | |
| 55 | 87 | // Define the Handler that receives messages from the thread and update the progress |
| 56 | - final Handler handler = new Handler() | |
| 88 | + final Handler handler = new Handler() | |
| 57 | 89 | { |
| 58 | 90 | public void handleMessage(Message msg) |
| 59 | 91 | { |
| 60 | 92 | switch(msg.what) |
| 61 | 93 | { |
| 62 | - case 0: | |
| 63 | - update_message(msg.arg1); | |
| 94 | + case 0: // Start/Stop service thread | |
| 95 | + if(msg.arg1 == 0) | |
| 96 | + { | |
| 97 | + mainloop = null; | |
| 98 | + } | |
| 99 | + break; | |
| 100 | + | |
| 101 | + case 1: // OIA message has changed | |
| 102 | + updateProgramMessage(msg.arg1); | |
| 103 | + break; | |
| 104 | + | |
| 105 | + case 2: // Screen changed | |
| 106 | + break; | |
| 107 | + | |
| 108 | + case 3: // Popup | |
| 109 | + popupMessageInfo popup = (popupMessageInfo) msg.obj; | |
| 110 | + popupMessage(msg.arg1, popup.title, popup.text, popup.info); | |
| 111 | + | |
| 64 | 112 | break; |
| 65 | - | |
| 66 | 113 | } |
| 67 | 114 | } |
| 68 | 115 | }; |
| 69 | - | |
| 116 | + | |
| 70 | 117 | /*---[ Signal methods ]--------------------------------------------------*/ |
| 71 | - | |
| 72 | - protected void update_message(int id) | |
| 118 | + | |
| 119 | + protected void updateProgramMessage(int id) | |
| 120 | + { | |
| 121 | + } | |
| 122 | + | |
| 123 | + public void popupMessage(int type, String title, String text, String info) | |
| 73 | 124 | { |
| 74 | 125 | } |
| 75 | - | |
| 76 | 126 | |
| 77 | 127 | /*---[ External methods ]------------------------------------------------*/ |
| 78 | 128 | |
| 79 | 129 | public int connect() |
| 80 | 130 | { |
| 81 | - terminal.start(); | |
| 82 | - return 0; | |
| 131 | + if(mainloop == null) | |
| 132 | + { | |
| 133 | + mainloop = new NetworkThread(handler); | |
| 134 | + mainloop.start(); | |
| 135 | + return 0; | |
| 136 | + } | |
| 137 | + return -1; | |
| 83 | 138 | } |
| 84 | - | |
| 139 | + | |
| 85 | 140 | /*---[ Native calls ]----------------------------------------------------*/ |
| 86 | 141 | static private native int init(); |
| 87 | 142 | |
| ... | ... | @@ -90,7 +145,6 @@ public class lib3270 |
| 90 | 145 | |
| 91 | 146 | // Misc calls |
| 92 | 147 | public native String getEncoding(); |
| 93 | - | |
| 94 | 148 | public native String getVersion(); |
| 95 | 149 | public native String getRevision(); |
| 96 | 150 | |
| ... | ... | @@ -100,5 +154,5 @@ public class lib3270 |
| 100 | 154 | public native boolean isConnected(); |
| 101 | 155 | public native boolean isTerminalReady(); |
| 102 | 156 | |
| 103 | - | |
| 157 | + | |
| 104 | 158 | } | ... | ... |