Commit 88883384efe7d45355b85d670d5ac397510ca139
1 parent
8223b6f7
Exists in
master
and in
5 other branches
Implementando callbacks para ativação de temporizadores através da API android
Showing
8 changed files
with
84 additions
and
56 deletions
Show diff stats
android/jni/main.cpp
... | ... | @@ -27,6 +27,9 @@ |
27 | 27 | */ |
28 | 28 | |
29 | 29 | #include "globals.h" |
30 | + #include <stdio.h> | |
31 | + #include <string.h> | |
32 | + #include <lib3270/config.h> | |
30 | 33 | #include <lib3270/popup.h> |
31 | 34 | #include <lib3270/internals.h> |
32 | 35 | |
... | ... | @@ -126,22 +129,24 @@ static int write_buffer(H3270 *session, unsigned const char *buf, int len) |
126 | 129 | return rc; |
127 | 130 | } |
128 | 131 | |
129 | -static void * add_timeout(unsigned long interval_ms, H3270 *session, void (*proc)(H3270 *session)) | |
132 | +static void * add_timer(unsigned long interval_ms, H3270 *session, void (*proc)(H3270 *session)) | |
130 | 133 | { |
134 | + TIMER * timer = NULL; | |
135 | + | |
131 | 136 | if(session->widget) |
132 | 137 | { |
133 | 138 | JNIEnv * env = ((INFO *) session->widget)->env; |
134 | 139 | jobject obj = ((INFO *) session->widget)->obj; |
135 | 140 | jclass cls = env->GetObjectClass(obj); |
136 | 141 | jmethodID mid = env->GetMethodID(cls, "newTimer", "(JI)V"); |
137 | - TIMER * timer = (TIMER *) lib3270_malloc(sizeof(TIMER)); | |
138 | 142 | |
143 | + timer = (TIMER *) lib3270_malloc(sizeof(TIMER)); | |
139 | 144 | timer->sz = sizeof(timer); |
140 | 145 | timer->enabled = true; |
141 | 146 | timer->session = session; |
142 | 147 | timer->proc = proc; |
143 | 148 | |
144 | - __android_log_print(ANDROID_LOG_VERBOSE, PACKAGE_NAME, "Timer ID %08lx created",(unsigned long) timer); | |
149 | + trace("Timer %08lx created",(unsigned long) timer); | |
145 | 150 | |
146 | 151 | env->CallVoidMethod(obj,mid, (jlong) timer, (jint) interval_ms); |
147 | 152 | |
... | ... | @@ -151,19 +156,22 @@ static void * add_timeout(unsigned long interval_ms, H3270 *session, void (*proc |
151 | 156 | __android_log_print(ANDROID_LOG_VERBOSE, PACKAGE_NAME, "Can set timer, no jni env for active session"); |
152 | 157 | } |
153 | 158 | |
154 | - | |
159 | + return timer; | |
155 | 160 | } |
156 | 161 | |
157 | -static void remove_timeout(void *timer) | |
162 | +static void remove_timer(void *id) | |
158 | 163 | { |
159 | - if(timer == NULL || ((TIMER *) timer)->sz != sizeof(TIMER)) | |
164 | + TIMER *timer = (TIMER *) id; | |
165 | + | |
166 | + if(timer == NULL) | |
160 | 167 | { |
161 | 168 | __android_log_print(ANDROID_LOG_VERBOSE, PACKAGE_NAME, "Invalid timer ID %08lx",(unsigned long) timer); |
162 | 169 | return; |
163 | 170 | } |
164 | 171 | |
165 | - __android_log_print(ANDROID_LOG_VERBOSE, PACKAGE_NAME, "Removing timeout %d",(int) timer); | |
166 | - ((TIMER *) timer)->enabled = false; | |
172 | + __android_log_print(ANDROID_LOG_VERBOSE, PACKAGE_NAME, "Disabling timer %08lx",(unsigned long) timer); | |
173 | + | |
174 | + timer->enabled = false; | |
167 | 175 | |
168 | 176 | } |
169 | 177 | |
... | ... | @@ -177,30 +185,71 @@ JNIEXPORT void JNICALL Java_br_com_bb_pw3270_lib3270_timerFinish(JNIEnv *env, jo |
177 | 185 | return; |
178 | 186 | } |
179 | 187 | |
180 | - if(timer->sz != sizeof(TIMER)) | |
181 | - { | |
182 | - __android_log_print(ANDROID_LOG_VERBOSE, PACKAGE_NAME, | |
183 | - "Invalid timer ID %08lx in %s (sz=%d, expected=%d)",(unsigned long) timer, | |
184 | - __FUNCTION__,timer->sz,sizeof(timer)); | |
185 | - return; | |
186 | - } | |
187 | - | |
188 | 188 | if(timer->enabled) |
189 | + { | |
190 | + __android_log_print(ANDROID_LOG_VERBOSE, PACKAGE_NAME, "Running timer %08lx",(unsigned long) timer); | |
189 | 191 | timer->proc(timer->session); |
192 | + } | |
190 | 193 | |
191 | 194 | lib3270_free(timer); |
192 | 195 | } |
193 | 196 | |
197 | +#ifdef X3270_TRACE | |
198 | +static void tracehandler(H3270 *session, const char *fmt, va_list args) | |
199 | +{ | |
200 | + static char * buffer = NULL; | |
201 | + static int szBuffer = 0; | |
194 | 202 | |
203 | + char temp[4096]; | |
204 | + size_t sz; | |
205 | + char * src; | |
206 | + char * dst; | |
207 | + | |
208 | + if(!szBuffer) | |
209 | + { | |
210 | + buffer = (char *) lib3270_malloc(szBuffer = 4096); | |
211 | + *buffer = 0; | |
212 | + } | |
213 | + | |
214 | + sz = vsnprintf(temp,4095,fmt,args); | |
215 | + | |
216 | + if( (sz+strlen(buffer)) > szBuffer) | |
217 | + { | |
218 | + szBuffer += (sz+strlen(buffer)+1); | |
219 | + buffer = (char *) lib3270_realloc(buffer,szBuffer); | |
220 | + } | |
221 | + | |
222 | + dst = buffer+strlen(buffer); | |
223 | + for(src = temp;*src;src++) | |
224 | + { | |
225 | + if(*src == '\n') | |
226 | + { | |
227 | + *dst = 0; | |
228 | + __android_log_print(ANDROID_LOG_DEBUG, PACKAGE_NAME, "%s", buffer); | |
229 | + dst = buffer; | |
230 | + } | |
231 | + else | |
232 | + { | |
233 | + *(dst++) = *src; | |
234 | + } | |
235 | + } | |
236 | + | |
237 | + *dst = 0; | |
238 | +} | |
239 | +#endif // X3270_TRACE | |
195 | 240 | |
196 | 241 | JNIEXPORT jint JNICALL Java_br_com_bb_pw3270_lib3270_init(JNIEnv *env, jclass obj) |
197 | 242 | { |
198 | 243 | H3270 * session = lib3270_session_new(""); |
199 | 244 | |
200 | - __android_log_print(ANDROID_LOG_VERBOSE, PACKAGE_NAME, "Initializing session %p",session); | |
245 | + __android_log_print(ANDROID_LOG_DEBUG, PACKAGE_NAME, "Initializing session %p",session); | |
246 | + | |
247 | +#ifdef X3270_TRACE | |
248 | + lib3270_set_trace_handler(tracehandler); | |
249 | +#endif // X3270_TRACE | |
201 | 250 | |
202 | 251 | lib3270_set_popup_handler(popuphandler); |
203 | - lib3270_register_time_handlers(add_timeout,remove_timeout); | |
252 | + lib3270_register_time_handlers(add_timer,remove_timer); | |
204 | 253 | |
205 | 254 | session->write = write_buffer; |
206 | 255 | session->changed = changed; |
... | ... | @@ -264,6 +313,8 @@ JNIEXPORT void JNICALL Java_br_com_bb_pw3270_lib3270_procRecvdata(JNIEnv *env, j |
264 | 313 | |
265 | 314 | lib3270_data_recv(session, (size_t) sz, netrbuf); |
266 | 315 | |
316 | + trace("Liberando %d bytes",(size_t) sz); | |
317 | + | |
267 | 318 | env->ReleaseByteArrayElements(buffer, (signed char *) netrbuf, 0); |
268 | 319 | |
269 | 320 | session_release(); | ... | ... |
android/lib3270NDK.cbp
... | ... | @@ -36,6 +36,7 @@ |
36 | 36 | <Unit filename="../src/include/lib3270/actions.h" /> |
37 | 37 | <Unit filename="../src/include/lib3270/html.h" /> |
38 | 38 | <Unit filename="../src/include/lib3270/internals.h" /> |
39 | + <Unit filename="../src/include/lib3270/log.h" /> | |
39 | 40 | <Unit filename="../src/include/lib3270/session.h" /> |
40 | 41 | <Unit filename="../src/lib3270/html.c"> |
41 | 42 | <Option compilerVar="CC" /> |
... | ... | @@ -50,6 +51,9 @@ |
50 | 51 | <Unit filename="../src/lib3270/telnet.c"> |
51 | 52 | <Option compilerVar="CC" /> |
52 | 53 | </Unit> |
54 | + <Unit filename="../src/lib3270/trace_ds.c"> | |
55 | + <Option compilerVar="CC" /> | |
56 | + </Unit> | |
53 | 57 | <Unit filename="Makefile" /> |
54 | 58 | <Unit filename="jni/Android.mk" /> |
55 | 59 | <Unit filename="jni/actions.cpp" /> | ... | ... |
android/res/layout/main.xml
... | ... | @@ -1,32 +0,0 @@ |
1 | -<?xml version="1.0" encoding="utf-8"?> | |
2 | -<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" | |
3 | - android:layout_width="fill_parent" | |
4 | - android:layout_height="fill_parent" | |
5 | - android:orientation="vertical" > | |
6 | - | |
7 | - <LinearLayout | |
8 | - android:layout_width="match_parent" | |
9 | - android:layout_height="wrap_content" > | |
10 | - | |
11 | - <EditText | |
12 | - android:id="@+id/hostname" | |
13 | - android:layout_width="0dip" | |
14 | - android:layout_height="match_parent" | |
15 | - android:layout_weight="1" | |
16 | - android:ems="10" /> | |
17 | - | |
18 | - <Button | |
19 | - android:id="@+id/connect" | |
20 | - style="?android:attr/buttonStyleSmall" | |
21 | - android:layout_width="80dp" | |
22 | - android:layout_height="match_parent" | |
23 | - android:text="@string/connect" /> | |
24 | - | |
25 | - </LinearLayout> | |
26 | - | |
27 | - <WebView | |
28 | - android:id="@+id/view" | |
29 | - android:layout_width="match_parent" | |
30 | - android:layout_height="match_parent" /> | |
31 | - | |
32 | -</LinearLayout> | |
33 | 0 | \ No newline at end of file |
android/src/br/com/bb/pw3270/PW3270Activity.java
... | ... | @@ -13,7 +13,7 @@ import android.webkit.WebView; |
13 | 13 | import android.webkit.WebViewClient; |
14 | 14 | import android.webkit.WebResourceResponse; |
15 | 15 | import android.webkit.WebChromeClient; |
16 | -import java.io.InputStream; | |
16 | +// import java.io.InputStream; | |
17 | 17 | |
18 | 18 | // import android.app.Dialog; |
19 | 19 | ... | ... |
android/src/br/com/bb/pw3270/lib3270.java
src/include/lib3270/config.h.in
src/lib3270/iocalls.c
... | ... | @@ -533,12 +533,16 @@ static void internal_ring_bell(H3270 *session) |
533 | 533 | |
534 | 534 | void * AddTimeOut(unsigned long interval_ms, H3270 *session, void (*proc)(H3270 *session)) |
535 | 535 | { |
536 | + void *timer; | |
536 | 537 | CHECK_SESSION_HANDLE(session); |
537 | - return add_timeout(interval_ms,session,proc); | |
538 | + timer = add_timeout(interval_ms,session,proc); | |
539 | + trace("Timeout %p created with %ld ms",timer,interval_ms); | |
540 | + return timer; | |
538 | 541 | } |
539 | 542 | |
540 | 543 | void RemoveTimeOut(void * timer) |
541 | 544 | { |
545 | + trace("Removing timeout %p",timer); | |
542 | 546 | return remove_timeout(timer); |
543 | 547 | } |
544 | 548 | ... | ... |
src/lib3270/sources.mak
... | ... | @@ -27,12 +27,12 @@ |
27 | 27 | # Terminal only sources |
28 | 28 | TERMINAL_SOURCES = bounds.c ctlr.c util.c toggles.c screen.c selection.c kybd.c telnet.c \ |
29 | 29 | host.c sf.c ansi.c resolver.c tables.c utf8.c charset.c \ |
30 | - version.c session.c state.c html.c | |
30 | + version.c session.c state.c html.c trace_ds.c see.c | |
31 | 31 | |
32 | 32 | # Network I/O Sources |
33 | 33 | NETWORK_SOURCES = iocalls.c proxy.c |
34 | 34 | |
35 | 35 | # Full library sources |
36 | 36 | SOURCES = $(TERMINAL_SOURCES) $(NETWORK_SOURCES) ft.c ft_cut.c ft_dft.c glue.c resources.c \ |
37 | - rpq.c see.c trace_ds.c paste.c macros.c fallbacks.c log.c | |
37 | + rpq.c paste.c macros.c fallbacks.c log.c | |
38 | 38 | ... | ... |