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