Commit 53c66d56bb3e473a509fcf5b6ab52842b428e68d
1 parent
44331a7f
Exists in
master
and in
5 other branches
Implementando interface jni
Showing
5 changed files
with
54 additions
and
5 deletions
Show diff stats
src/java/Makefile.in
... | ... | @@ -74,12 +74,12 @@ CXXFLAGS=@CXXFLAGS@ @DLL_CFLAGS@ @JNI_CPPFLAGS@ -I../include |
74 | 74 | |
75 | 75 | #---[ Rules ]------------------------------------------------------------------ |
76 | 76 | |
77 | -$(OBJDBG)/%.o: %.cc Makefile jni3270.h | |
77 | +$(OBJDBG)/%.o: %.cc Makefile *.h | |
78 | 78 | @echo " CC `basename $@`" |
79 | 79 | @mkdir -p `dirname $@` |
80 | 80 | $(CXX) -DDEBUG=1 $(CXXFLAGS) -o $@ -c $< |
81 | 81 | |
82 | -$(OBJRLS)/%.o: %.cc Makefile jni3270.h | |
82 | +$(OBJRLS)/%.o: %.cc Makefile *.h | |
83 | 83 | @echo " CC `basename $@`" |
84 | 84 | @mkdir -p `dirname $@` |
85 | 85 | @$(CXX) -DNDEBUG=1 $(CXXFLAGS) -o $@ -c $< | ... | ... |
src/java/info.cc
... | ... | @@ -32,10 +32,16 @@ |
32 | 32 | |
33 | 33 | /*---[ Implement ]----------------------------------------------------------------------------------*/ |
34 | 34 | |
35 | -JNIEXPORT jstring JNICALL Java_pw3270_terminal_getVersion (JNIEnv *env, jobject obj) { | |
35 | +JNIEXPORT jstring JNICALL Java_pw3270_terminal_get_1version (JNIEnv *env, jobject obj) { | |
36 | + | |
37 | + session *s = getHandle(env,obj); | |
38 | + return env->NewStringUTF(s->get_version().c_str()); | |
36 | 39 | |
37 | 40 | } |
38 | 41 | |
39 | -JNIEXPORT jstring JNICALL Java_pw3270_terminal_getRevision(JNIEnv *, jobject) { | |
42 | +JNIEXPORT jstring JNICALL Java_pw3270_terminal_get_1revision(JNIEnv *env, jobject obj) { | |
43 | + | |
44 | + session *s = getHandle(env,obj); | |
45 | + return env->NewStringUTF(s->get_revision().c_str()); | |
40 | 46 | |
41 | 47 | } | ... | ... |
src/java/main.cc
... | ... | @@ -31,4 +31,32 @@ |
31 | 31 | |
32 | 32 | /*---[ Implement ]----------------------------------------------------------------------------------*/ |
33 | 33 | |
34 | +static jfieldID getHandleField(JNIEnv *env, jobject obj) { | |
35 | + jclass c = env->GetObjectClass(obj); | |
36 | + // J is the type signature for long: | |
37 | + return env->GetFieldID(c, "nativeHandle", "J"); | |
38 | +} | |
34 | 39 | |
40 | +session * getHandle(JNIEnv *env, jobject obj) { | |
41 | + jlong handle = env->GetLongField(obj, getHandleField(env, obj)); | |
42 | + return reinterpret_cast<PW3270_NAMESPACE::session *>(handle); | |
43 | +} | |
44 | + | |
45 | +JNIEXPORT jint JNICALL Java_pw3270_terminal_init(JNIEnv *env, jobject obj, jstring id) { | |
46 | + | |
47 | + jlong handle = reinterpret_cast<jlong>(session::create()); | |
48 | + | |
49 | + env->SetLongField(obj, getHandleField(env, obj), handle); | |
50 | + | |
51 | + return 0; | |
52 | +} | |
53 | + | |
54 | +JNIEXPORT jint JNICALL Java_pw3270_terminal_deinit(JNIEnv *env, jobject obj) { | |
55 | + | |
56 | + session *s = getHandle(env,obj); | |
57 | + delete s; | |
58 | + | |
59 | + env->SetLongField(obj, getHandleField(env, obj), 0); | |
60 | + | |
61 | + return 0; | |
62 | +} | ... | ... |
src/java/private.h
src/java/terminal.java
... | ... | @@ -34,14 +34,26 @@ package pw3270; |
34 | 34 | |
35 | 35 | public class terminal |
36 | 36 | { |
37 | + // PW3270 session handle | |
38 | + private long nativeHandle; | |
39 | + | |
37 | 40 | // Init/Deinit |
38 | - private native int init(); | |
41 | + private native int init(String id); | |
39 | 42 | private native int deinit(); |
40 | 43 | |
41 | 44 | // Get library/extension info |
42 | 45 | public native String get_version(); |
43 | 46 | public native String get_revision(); |
44 | 47 | |
48 | + | |
49 | + public terminal(String id) { | |
50 | + init(id); | |
51 | + } | |
52 | + | |
53 | + protected void finalize( ) throws Throwable { | |
54 | + deinit(); | |
55 | + } | |
56 | + | |
45 | 57 | static |
46 | 58 | { |
47 | 59 | System.loadLibrary("pw3270_jni"); | ... | ... |