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,12 +74,12 @@ CXXFLAGS=@CXXFLAGS@ @DLL_CFLAGS@ @JNI_CPPFLAGS@ -I../include | ||
74 | 74 | ||
75 | #---[ Rules ]------------------------------------------------------------------ | 75 | #---[ Rules ]------------------------------------------------------------------ |
76 | 76 | ||
77 | -$(OBJDBG)/%.o: %.cc Makefile jni3270.h | 77 | +$(OBJDBG)/%.o: %.cc Makefile *.h |
78 | @echo " CC `basename $@`" | 78 | @echo " CC `basename $@`" |
79 | @mkdir -p `dirname $@` | 79 | @mkdir -p `dirname $@` |
80 | $(CXX) -DDEBUG=1 $(CXXFLAGS) -o $@ -c $< | 80 | $(CXX) -DDEBUG=1 $(CXXFLAGS) -o $@ -c $< |
81 | 81 | ||
82 | -$(OBJRLS)/%.o: %.cc Makefile jni3270.h | 82 | +$(OBJRLS)/%.o: %.cc Makefile *.h |
83 | @echo " CC `basename $@`" | 83 | @echo " CC `basename $@`" |
84 | @mkdir -p `dirname $@` | 84 | @mkdir -p `dirname $@` |
85 | @$(CXX) -DNDEBUG=1 $(CXXFLAGS) -o $@ -c $< | 85 | @$(CXX) -DNDEBUG=1 $(CXXFLAGS) -o $@ -c $< |
src/java/info.cc
@@ -32,10 +32,16 @@ | @@ -32,10 +32,16 @@ | ||
32 | 32 | ||
33 | /*---[ Implement ]----------------------------------------------------------------------------------*/ | 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,4 +31,32 @@ | ||
31 | 31 | ||
32 | /*---[ Implement ]----------------------------------------------------------------------------------*/ | 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
@@ -31,7 +31,10 @@ | @@ -31,7 +31,10 @@ | ||
31 | #define PRIVATE_H_INCLUDED | 31 | #define PRIVATE_H_INCLUDED |
32 | 32 | ||
33 | #include "jni3270.h" | 33 | #include "jni3270.h" |
34 | + #include <pw3270/class.h> | ||
34 | 35 | ||
36 | + using namespace PW3270_NAMESPACE; | ||
35 | 37 | ||
38 | + PW3270_NAMESPACE::session * getHandle(JNIEnv *env, jobject obj); | ||
36 | 39 | ||
37 | #endif // PRIVATE_H_INCLUDED | 40 | #endif // PRIVATE_H_INCLUDED |
src/java/terminal.java
@@ -34,14 +34,26 @@ package pw3270; | @@ -34,14 +34,26 @@ package pw3270; | ||
34 | 34 | ||
35 | public class terminal | 35 | public class terminal |
36 | { | 36 | { |
37 | + // PW3270 session handle | ||
38 | + private long nativeHandle; | ||
39 | + | ||
37 | // Init/Deinit | 40 | // Init/Deinit |
38 | - private native int init(); | 41 | + private native int init(String id); |
39 | private native int deinit(); | 42 | private native int deinit(); |
40 | 43 | ||
41 | // Get library/extension info | 44 | // Get library/extension info |
42 | public native String get_version(); | 45 | public native String get_version(); |
43 | public native String get_revision(); | 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 | static | 57 | static |
46 | { | 58 | { |
47 | System.loadLibrary("pw3270_jni"); | 59 | System.loadLibrary("pw3270_jni"); |