Commit d3ab3fb98019d136335466f6b5c9d4d6ad45fd2f
1 parent
8a40574b
Exists in
master
and in
5 other branches
Implementando objeto lib3270 para android
Showing
5 changed files
with
163 additions
and
43 deletions
Show diff stats
android/jni/main.cpp
... | ... | @@ -38,23 +38,58 @@ |
38 | 38 | |
39 | 39 | } INFO; |
40 | 40 | |
41 | + #define session_request(env, obj) INFO jni_data = { env, obj }; \ | |
42 | + H3270 * session = lib3270_get_default_session_handle(); \ | |
43 | + session->widget = &jni_data; | |
44 | + | |
45 | + #define session_release() session->widget = 0; | |
46 | + | |
47 | +/*--[ Globals ]--------------------------------------------------------------------------------------*/ | |
48 | + | |
49 | + const char *java_class_name = "br/com/bb/pw3270/lib3270"; | |
50 | + | |
41 | 51 | /*--[ Implement ]------------------------------------------------------------------------------------*/ |
42 | 52 | |
53 | +static void post_message(H3270 *session, int msgid, int arg1 = 0, int arg2 = 0) | |
54 | +{ | |
55 | + if(session->widget) | |
56 | + { | |
57 | + JNIEnv * env = ((INFO *) session->widget)->env; | |
58 | + jobject obj = ((INFO *) session->widget)->obj; | |
59 | + jclass cls = env->GetObjectClass(obj); | |
60 | + jmethodID mid = env->GetMethodID(cls, "post_message", "(III)V");; | |
61 | + env->CallVoidMethod(obj,mid,(jint) msgid, (jint) arg1, (jint) arg2); | |
62 | + } | |
63 | +} | |
64 | + | |
65 | +static void update_status(H3270 *session, LIB3270_MESSAGE id) | |
66 | +{ | |
67 | + post_message(session,0,id); | |
68 | +} | |
69 | + | |
70 | +static void changed(H3270 *session, int offset, int len) | |
71 | +{ | |
72 | + post_message(session,1,offset,len); | |
73 | +} | |
74 | + | |
43 | 75 | JNIEXPORT jint JNICALL Java_br_com_bb_pw3270_lib3270_init(JNIEnv *env, jclass obj) |
44 | 76 | { |
45 | 77 | H3270 * session = lib3270_session_new(""); |
46 | 78 | |
79 | + session->changed = changed; | |
80 | + session->update_status = update_status; | |
81 | + | |
47 | 82 | return 0; |
48 | 83 | } |
49 | 84 | |
50 | 85 | JNIEXPORT jint JNICALL Java_br_com_bb_pw3270_lib3270_processEvents(JNIEnv *env, jobject obj) |
51 | 86 | { |
52 | - INFO data = { env, obj }; | |
53 | - H3270 * session = lib3270_get_default_session_handle(); | |
87 | + session_request(env,obj); | |
54 | 88 | |
55 | - session->widget = &data; | |
56 | 89 | lib3270_main_iterate(session,1); |
57 | - session->widget = 0; | |
90 | + | |
91 | + session_release(); | |
92 | + | |
58 | 93 | return 0; |
59 | 94 | } |
60 | 95 | |
... | ... | @@ -70,7 +105,9 @@ JNIEXPORT jboolean JNICALL Java_br_com_bb_pw3270_lib3270_isTerminalReady(JNIEnv |
70 | 105 | |
71 | 106 | JNIEXPORT void JNICALL Java_br_com_bb_pw3270_lib3270_setHost(JNIEnv *env, jobject obj, jstring hostname) |
72 | 107 | { |
73 | - lib3270_set_host(lib3270_get_default_session_handle(),env->GetStringUTFChars(hostname, 0)); | |
108 | + session_request(env,obj); | |
109 | + lib3270_set_host(session,env->GetStringUTFChars(hostname, 0)); | |
110 | + session_release(); | |
74 | 111 | } |
75 | 112 | |
76 | 113 | 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 |
78 | 115 | return env->NewStringUTF(lib3270_get_host(lib3270_get_default_session_handle())); |
79 | 116 | } |
80 | 117 | |
118 | +JNIEXPORT jint JNICALL Java_br_com_bb_pw3270_lib3270_do_1connect(JNIEnv *env, jobject obj) | |
119 | +{ | |
120 | + session_request(env,obj); | |
121 | + update_status(session,(LIB3270_MESSAGE) 10); | |
122 | + session_release(); | |
123 | + return -1; | |
124 | +} | ... | ... |
android/res/layout/main.xml
android/src/br/com/bb/pw3270/PW3270Activity.java
... | ... | @@ -4,10 +4,32 @@ import android.app.Activity; |
4 | 4 | import android.os.Bundle; |
5 | 5 | import android.widget.TextView; |
6 | 6 | import android.widget.Button; |
7 | +import android.widget.EditText; | |
8 | +import android.view.View; | |
7 | 9 | |
8 | -public class PW3270Activity extends Activity { | |
10 | +public class PW3270Activity extends Activity implements View.OnClickListener | |
11 | +{ | |
9 | 12 | |
10 | - lib3270 host; | |
13 | + private class terminal extends lib3270 | |
14 | + { | |
15 | + TextView view; | |
16 | + | |
17 | + terminal(TextView view) | |
18 | + { | |
19 | + this.view = view; | |
20 | + | |
21 | + } | |
22 | + | |
23 | + protected void update_message(int id) | |
24 | + { | |
25 | + this.view.setText("ID=" + id); | |
26 | + } | |
27 | + | |
28 | + | |
29 | + }; | |
30 | + | |
31 | + terminal host; | |
32 | + EditText uri; | |
11 | 33 | |
12 | 34 | /** Called when the activity is first created. */ |
13 | 35 | @Override |
... | ... | @@ -15,13 +37,21 @@ public class PW3270Activity extends Activity { |
15 | 37 | super.onCreate(savedInstanceState); |
16 | 38 | setContentView(R.layout.main); |
17 | 39 | |
18 | - TextView text = (TextView) findViewById(R.id.text); | |
19 | - Button btn = (Button) findViewById(R.id.connect); | |
40 | + uri = (EditText) findViewById(R.id.hostname); | |
20 | 41 | |
21 | - | |
42 | + // Set button | |
43 | + Button btn = (Button) findViewById(R.id.connect); | |
44 | + btn.setOnClickListener((View.OnClickListener) this); | |
22 | 45 | |
23 | - host = new lib3270(); | |
46 | + host = new terminal((TextView) findViewById(R.id.text)); | |
24 | 47 | |
25 | - text.setText(host.getVersion()); | |
26 | 48 | } |
49 | + | |
50 | + public void onClick(View v) | |
51 | + { | |
52 | + // Perform action on click | |
53 | + host.setHost(uri.getText().toString()); | |
54 | + host.connect(); | |
55 | + } | |
56 | + | |
27 | 57 | } |
28 | 58 | \ No newline at end of file | ... | ... |
android/src/br/com/bb/pw3270/lib3270.java
1 | 1 | package br.com.bb.pw3270; |
2 | 2 | |
3 | 3 | import java.lang.Thread; |
4 | +// import java.util.Observer; | |
5 | +// import java.util.Observable; | |
6 | +import android.os.Handler; | |
7 | +import android.os.Message; | |
4 | 8 | |
5 | -public class lib3270 extends Thread | |
9 | +public class lib3270 | |
6 | 10 | { |
7 | - | |
11 | + NetworkThread terminal; | |
12 | + | |
8 | 13 | static |
9 | 14 | { |
10 | 15 | System.loadLibrary("3270"); |
11 | 16 | init(); |
12 | 17 | } |
13 | 18 | |
14 | - /** | |
15 | - * @param args | |
16 | - */ | |
17 | - public static void main(String[] args) | |
19 | + lib3270() | |
18 | 20 | { |
19 | - // TODO Auto-generated method stub | |
20 | - | |
21 | + terminal = new NetworkThread(handler); | |
21 | 22 | } |
22 | - | |
23 | - /** | |
24 | - * Connect to host, keep event loop running until disconnected. | |
25 | - */ | |
26 | - public void run() | |
23 | + | |
24 | + // Main Thread | |
25 | + private class NetworkThread extends Thread | |
27 | 26 | { |
28 | - do_connect(); | |
29 | - while(isConnected()) | |
30 | - processEvents(); | |
27 | + Handler mHandler; | |
28 | + | |
29 | + NetworkThread(Handler h) | |
30 | + { | |
31 | + mHandler = h; | |
32 | + } | |
33 | + | |
34 | + public void run() | |
35 | + { | |
36 | + postMessage(0,99,0); | |
37 | +/* | |
38 | + do_connect(); | |
39 | + while(isConnected()) | |
40 | + processEvents(); | |
41 | +*/ | |
42 | + } | |
43 | + | |
44 | + public void postMessage(int what, int arg1, int arg2) | |
45 | + { | |
46 | + Message msg = mHandler.obtainMessage(); | |
47 | + msg.what = what; | |
48 | + msg.arg1 = arg1; | |
49 | + msg.arg2 = arg2; | |
50 | + mHandler.sendMessage(msg); | |
51 | + } | |
52 | + | |
31 | 53 | } |
54 | + | |
55 | + // Define the Handler that receives messages from the thread and update the progress | |
56 | + final Handler handler = new Handler() | |
57 | + { | |
58 | + public void handleMessage(Message msg) | |
59 | + { | |
60 | + switch(msg.what) | |
61 | + { | |
62 | + case 0: | |
63 | + update_message(msg.arg1); | |
64 | + break; | |
65 | + | |
66 | + } | |
67 | + } | |
68 | + }; | |
69 | + | |
70 | + /*---[ Signal methods ]--------------------------------------------------*/ | |
71 | + | |
72 | + protected void update_message(int id) | |
73 | + { | |
74 | + } | |
75 | + | |
76 | + | |
77 | + /*---[ External methods ]------------------------------------------------*/ | |
32 | 78 | |
79 | + public int connect() | |
80 | + { | |
81 | + terminal.start(); | |
82 | + return 0; | |
83 | + } | |
84 | + | |
85 | + /*---[ Native calls ]----------------------------------------------------*/ | |
33 | 86 | static private native int init(); |
34 | - | |
87 | + | |
35 | 88 | private native int processEvents(); |
36 | 89 | private native int do_connect(); |
37 | 90 | |
... | ... | @@ -46,15 +99,6 @@ public class lib3270 extends Thread |
46 | 99 | public native String getHost(); |
47 | 100 | public native boolean isConnected(); |
48 | 101 | public native boolean isTerminalReady(); |
49 | - | |
50 | - public void connect(String hostname) | |
51 | - { | |
52 | - setHost(hostname); | |
53 | - start(); | |
54 | - } | |
55 | - | |
56 | - | |
57 | - | |
58 | - | |
59 | 102 | |
103 | + | |
60 | 104 | } | ... | ... |
pw3270.cbp
... | ... | @@ -41,13 +41,15 @@ |
41 | 41 | <Add option="`pkg-config gtk+-3.0 lib3270 --libs`" /> |
42 | 42 | </Linker> |
43 | 43 | <Unit filename="Makefile.in" /> |
44 | + <Unit filename="android/jni/globals.h" /> | |
45 | + <Unit filename="android/jni/main.cpp" /> | |
46 | + <Unit filename="android/jni/misc.cpp" /> | |
47 | + <Unit filename="android/src/br/com/bb/pw3270/PW3270Activity.java" /> | |
48 | + <Unit filename="android/src/br/com/bb/pw3270/lib3270.java" /> | |
44 | 49 | <Unit filename="autogen.sh" /> |
45 | 50 | <Unit filename="colors.conf" /> |
46 | 51 | <Unit filename="configure.ac" /> |
47 | 52 | <Unit filename="pw3270.spec.in" /> |
48 | - <Unit filename="src/android/jni/main.cpp" /> | |
49 | - <Unit filename="src/android/jni/misc.cpp" /> | |
50 | - <Unit filename="src/android/src/br/com/bb/pw3270/lib3270.java" /> | |
51 | 53 | <Unit filename="src/include/lib3270.h" /> |
52 | 54 | <Unit filename="src/include/lib3270/action_table.h" /> |
53 | 55 | <Unit filename="src/include/lib3270/actions.h" /> | ... | ... |