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 | } | ... | ... |