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"); |