Browse Source

Add default Sync callback and fix env retrieval

JNI-88
Hussein Kasem 7 years ago
parent
commit
0e478fd6df
  1. 14
      src/org/pEp/jniadapter/AbstractEngine.java
  2. 30
      src/org/pEp/jniadapter/Sync.java
  3. 48
      src/org_pEp_jniadapter_AbstractEngine.cc

14
src/org/pEp/jniadapter/AbstractEngine.java

@ -2,6 +2,9 @@ package org.pEp.jniadapter;
import java.util.ArrayList;
import java.util.Vector;
import org.pEp.jniadapter.Sync.DefaultCallback;
import java.io.UnsupportedEncodingException;
import java.text.Normalizer;
@ -11,9 +14,10 @@ abstract class AbstractEngine implements AutoCloseable {
}
private Sync.MessageToSendCallback messageToSendCallback;
private Sync.notifyHandshakeCallback notifyHandshakeCallback;
private Sync.NotifyHandshakeCallback notifyHandshakeCallback;
private Sync.NeedsFastPollCallback needsFastPollCallback;
private final static DefaultCallback defaultCallback = new DefaultCallback();
private native void init();
private native void release();
@ -144,7 +148,7 @@ abstract class AbstractEngine implements AutoCloseable {
this.messageToSendCallback = messageToSendCallback;
}
public void setnotifyHandshakeCallback(Sync.notifyHandshakeCallback notifyHandshakeCallback) {
public void setNotifyHandshakeCallback(Sync.NotifyHandshakeCallback notifyHandshakeCallback) {
this.notifyHandshakeCallback = notifyHandshakeCallback;
}
@ -156,7 +160,7 @@ abstract class AbstractEngine implements AutoCloseable {
if (needsFastPollCallback != null) {
needsFastPollCallback.needsFastPollCallFromC(fast_poll_needed);
} else {
return -1;
defaultCallback.needsFastPollCallFromC(fast_poll_needed);
}
return 0;
}
@ -168,7 +172,7 @@ abstract class AbstractEngine implements AutoCloseable {
if (notifyHandshakeCallback != null) {
notifyHandshakeCallback.notifyHandshake(myself, partner, _signal);
} else {
return -1;
defaultCallback.notifyHandshake(myself, partner, _signal);
}
return 0;
}
@ -177,7 +181,7 @@ abstract class AbstractEngine implements AutoCloseable {
if (messageToSendCallback != null) {
messageToSendCallback.messageToSend(message);
} else {
return -1;
defaultCallback.messageToSend(message);
}
return 0;
}

30
src/org/pEp/jniadapter/Sync.java

@ -4,10 +4,6 @@ import org.pEp.jniadapter.Identity;
import org.pEp.jniadapter.Message;
import org.pEp.jniadapter.pEpException;
/**
* Created by huss on 02/09/16.
*/
public interface Sync {
@ -19,8 +15,32 @@ public interface Sync {
void messageToSend(Message message);
}
interface notifyHandshakeCallback {
interface NotifyHandshakeCallback {
void notifyHandshake(Identity myself, Identity partner, SyncHandshakeSignal signal);
}
public class DefaultCallback
implements Sync.MessageToSendCallback, Sync.NotifyHandshakeCallback, Sync.NeedsFastPollCallback {
//FIXME: Find where this Exceptions ara catched as they are called but on
//Testing.java there is no crash not crashing
@Override
public void needsFastPollCallFromC(Boolean fast_poll_needed) {
System.out.println("Throwing illegal");
throw new RuntimeException("Fast poll Callback not set");
}
@Override
public void messageToSend(Message message) {
System.out.println("Throwing illegal");
throw new RuntimeException("Message to send not set");
}
@Override
public void notifyHandshake(Identity myself, Identity partner, SyncHandshakeSignal signal) {
System.out.println("Throwing illegal");
throw new RuntimeException("Notify Handshake not set");
}
}
}

48
src/org_pEp_jniadapter_AbstractEngine.cc

@ -19,6 +19,13 @@ std::ofstream debug_log("debug.log");
#include "throw_pEp_exception.hh"
#include "jniutils.hh"
#ifdef ANDROID
#define ATTACH_CURRENT_THREAD(env, args) jvm->AttachCurrentThread(&env, args);
#else
#define ATTACH_CURRENT_THREAD(env, args) jvm->AttachCurrentThread((void **) &env, args);
#endif
namespace pEp {
using namespace pEp::JNIAdapter;
using namespace pEp::Adapter;
@ -47,15 +54,15 @@ namespace pEp {
JNIEnv *_env;
if (on_sync_thread()) {
_env = first_env;
// FIXME: REview if this is the way to go or not
int getEnvStat = jvm->GetEnv((void **) &_env, JNI_VERSION_1_6);
if (getEnvStat == JNI_EDETACHED) {
ATTACH_CURRENT_THREAD(_env, nullptr);
}
}
else {
if (!thread_env) {
#ifdef ANDROID
jvm->AttachCurrentThread(&thread_env, nullptr);
#else
jvm->AttachCurrentThread((void **) &thread_env, nullptr);
#endif
ATTACH_CURRENT_THREAD(thread_env, nullptr);
}
_env = thread_env;
}
@ -65,17 +72,7 @@ namespace pEp {
void startup_sync()
{
needsFastPollMethodID = env()->GetMethodID(
engineClass,
"needsFastPollCallFromC",
"(Z)I");
assert(needsFastPollMethodID);
notifyHandShakeMethodID = env()->GetMethodID(
engineClass,
"notifyHandshakeCallFromC",
"(Lorg/pEp/jniadapter/_Identity;Lorg/pEp/jniadapter/_Identity;Lorg/pEp/jniadapter/SyncHandshakeSignal;)I");
assert(notifyHandShakeMethodID);
}
void shutdown_sync()
@ -94,7 +91,6 @@ namespace pEp {
if (!o)
o = new JNISync();
msg_ = o->env()->NewObject(messageClass, messageConstructorMethodID, (jlong) msg);
result = o->env()->CallIntMethod(obj, messageToSendMethodID, msg_);
@ -173,7 +169,7 @@ extern "C" {
if (!messageConstructorMethodID)
messageConstructorMethodID = env->GetMethodID(messageClass, "<init>", "(J)V");
if (!messageToSendMethodID) {
messageToSendMethodID = env->GetMethodID(
engineClass,
@ -182,6 +178,22 @@ extern "C" {
assert(messageToSendMethodID);
}
if (!needsFastPollMethodID) {
needsFastPollMethodID = env->GetMethodID(
engineClass,
"needsFastPollCallFromC",
"(Z)I");
assert(needsFastPollMethodID);
}
if (!notifyHandShakeMethodID) {
notifyHandShakeMethodID = env->GetMethodID(
engineClass,
"notifyHandshakeCallFromC",
"(Lorg/pEp/jniadapter/_Identity;Lorg/pEp/jniadapter/_Identity;Lorg/pEp/jniadapter/SyncHandshakeSignal;)I");
assert(notifyHandShakeMethodID);
}
startup<JNISync>(messageToSend, notifyHandshake, o, &JNISync::startup_sync, &JNISync::shutdown_sync);
}

Loading…
Cancel
Save