From 53c66d56bb3e473a509fcf5b6ab52842b428e68d Mon Sep 17 00:00:00 2001 From: perry.werneck@gmail.com Date: Fri, 12 Jun 2015 02:35:07 +0000 Subject: [PATCH] Implementando interface jni --- src/java/Makefile.in | 4 ++-- src/java/info.cc | 10 ++++++++-- src/java/main.cc | 28 ++++++++++++++++++++++++++++ src/java/private.h | 3 +++ src/java/terminal.java | 14 +++++++++++++- 5 files changed, 54 insertions(+), 5 deletions(-) diff --git a/src/java/Makefile.in b/src/java/Makefile.in index 2cb2832..81eb451 100644 --- a/src/java/Makefile.in +++ b/src/java/Makefile.in @@ -74,12 +74,12 @@ CXXFLAGS=@CXXFLAGS@ @DLL_CFLAGS@ @JNI_CPPFLAGS@ -I../include #---[ Rules ]------------------------------------------------------------------ -$(OBJDBG)/%.o: %.cc Makefile jni3270.h +$(OBJDBG)/%.o: %.cc Makefile *.h @echo " CC `basename $@`" @mkdir -p `dirname $@` $(CXX) -DDEBUG=1 $(CXXFLAGS) -o $@ -c $< -$(OBJRLS)/%.o: %.cc Makefile jni3270.h +$(OBJRLS)/%.o: %.cc Makefile *.h @echo " CC `basename $@`" @mkdir -p `dirname $@` @$(CXX) -DNDEBUG=1 $(CXXFLAGS) -o $@ -c $< diff --git a/src/java/info.cc b/src/java/info.cc index 3405bb3..c984ac1 100644 --- a/src/java/info.cc +++ b/src/java/info.cc @@ -32,10 +32,16 @@ /*---[ Implement ]----------------------------------------------------------------------------------*/ -JNIEXPORT jstring JNICALL Java_pw3270_terminal_getVersion (JNIEnv *env, jobject obj) { +JNIEXPORT jstring JNICALL Java_pw3270_terminal_get_1version (JNIEnv *env, jobject obj) { + + session *s = getHandle(env,obj); + return env->NewStringUTF(s->get_version().c_str()); } -JNIEXPORT jstring JNICALL Java_pw3270_terminal_getRevision(JNIEnv *, jobject) { +JNIEXPORT jstring JNICALL Java_pw3270_terminal_get_1revision(JNIEnv *env, jobject obj) { + + session *s = getHandle(env,obj); + return env->NewStringUTF(s->get_revision().c_str()); } diff --git a/src/java/main.cc b/src/java/main.cc index a69a22c..bd77b93 100644 --- a/src/java/main.cc +++ b/src/java/main.cc @@ -31,4 +31,32 @@ /*---[ Implement ]----------------------------------------------------------------------------------*/ +static jfieldID getHandleField(JNIEnv *env, jobject obj) { + jclass c = env->GetObjectClass(obj); + // J is the type signature for long: + return env->GetFieldID(c, "nativeHandle", "J"); +} +session * getHandle(JNIEnv *env, jobject obj) { + jlong handle = env->GetLongField(obj, getHandleField(env, obj)); + return reinterpret_cast(handle); +} + +JNIEXPORT jint JNICALL Java_pw3270_terminal_init(JNIEnv *env, jobject obj, jstring id) { + + jlong handle = reinterpret_cast(session::create()); + + env->SetLongField(obj, getHandleField(env, obj), handle); + + return 0; +} + +JNIEXPORT jint JNICALL Java_pw3270_terminal_deinit(JNIEnv *env, jobject obj) { + + session *s = getHandle(env,obj); + delete s; + + env->SetLongField(obj, getHandleField(env, obj), 0); + + return 0; +} diff --git a/src/java/private.h b/src/java/private.h index ecdb4d9..4fe817a 100644 --- a/src/java/private.h +++ b/src/java/private.h @@ -31,7 +31,10 @@ #define PRIVATE_H_INCLUDED #include "jni3270.h" + #include + using namespace PW3270_NAMESPACE; + PW3270_NAMESPACE::session * getHandle(JNIEnv *env, jobject obj); #endif // PRIVATE_H_INCLUDED diff --git a/src/java/terminal.java b/src/java/terminal.java index 5ce43a7..04db0e9 100644 --- a/src/java/terminal.java +++ b/src/java/terminal.java @@ -34,14 +34,26 @@ package pw3270; public class terminal { + // PW3270 session handle + private long nativeHandle; + // Init/Deinit - private native int init(); + private native int init(String id); private native int deinit(); // Get library/extension info public native String get_version(); public native String get_revision(); + + public terminal(String id) { + init(id); + } + + protected void finalize( ) throws Throwable { + deinit(); + } + static { System.loadLibrary("pw3270_jni"); -- libgit2 0.21.2