refactor clash bridge

This commit is contained in:
Kr328 committed 2020-06-10 21:24:38 +08:00
1 parent d24496a01e
commit 2759f59029
19 files changed
+89 -95

No files matched your search

+26 -21
View File
@@ -2,16 +2,21 @@
Master *Master::master = nullptr;
template <class T>
inline T g(JNIEnv *env, T object) {
return reinterpret_cast<T>(env->NewGlobalRef(object));
}
Master::Master(JavaVM *vm, JNIEnv *env): vm(vm) {
master = this;
cClashException = env->FindClass("com/github/kr328/clash/core/bridge/ClashException");
cTraffic = env->FindClass("com/github/kr328/clash/core/model/Traffic");
cGeneral = env->FindClass("com/github/kr328/clash/core/model/General");
cCompletableFuture = env->FindClass("java/util/concurrent/CompletableFuture");
cProxyGroup = env->FindClass("com/github/kr328/clash/core/model/ProxyGroup");
cProxy = env->FindClass("com/github/kr328/clash/core/model/Proxy");
iTunCallback = env->FindClass("com/github/kr328/clash/core/bridge/TunCallback");
cClashException = g<jclass>(env, env->FindClass("com/github/kr328/clash/core/bridge/ClashException"));
cTraffic = g<jclass>(env, env->FindClass("com/github/kr328/clash/core/model/Traffic"));
cGeneral = g<jclass>(env, env->FindClass("com/github/kr328/clash/core/model/General"));
cCompletableFuture = g<jclass>(env, env->FindClass("java/util/concurrent/CompletableFuture"));
cProxyGroup = g<jclass>(env, env->FindClass("com/github/kr328/clash/core/model/ProxyGroup"));
cProxy = g<jclass>(env, env->FindClass("com/github/kr328/clash/core/model/Proxy"));
iTunCallback = g<jclass>(env, env->FindClass("com/github/kr328/clash/core/bridge/TunCallback"));
cClashExceptionConstructor = env->GetMethodID(cClashException, "<init>",
"(Ljava/lang/String;)V");
cTrafficConstructor = env->GetMethodID(cTraffic, "<init>", "(JJ)V");
@@ -27,20 +32,20 @@ Master::Master(JavaVM *vm, JNIEnv *env): vm(vm) {
mTunCallbackOnNewSocket = env->GetMethodID(iTunCallback, "onNewSocket", "(I)V");
mTunCallbackOnStop = env->GetMethodID(iTunCallback, "onStop", "()V");
sDirect = reinterpret_cast<jstring>(env->NewGlobalRef(env->NewStringUTF("Direct")));
sReject = reinterpret_cast<jstring>(env->NewGlobalRef(env->NewStringUTF("Reject")));
sShadowsocks = reinterpret_cast<jstring>(env->NewGlobalRef(env->NewStringUTF("Shadowsocks")));
sSnell = reinterpret_cast<jstring>(env->NewGlobalRef(env->NewStringUTF("Snell")));
sSocks5 = reinterpret_cast<jstring>(env->NewGlobalRef(env->NewStringUTF("Socks5")));
sHttp = reinterpret_cast<jstring>(env->NewGlobalRef(env->NewStringUTF("Http")));
sVmess = reinterpret_cast<jstring>(env->NewGlobalRef(env->NewStringUTF("Vmess")));
sTrojan = reinterpret_cast<jstring>(env->NewGlobalRef(env->NewStringUTF("Trojan")));
sRelay = reinterpret_cast<jstring>(env->NewGlobalRef(env->NewStringUTF("Relay")));
sSelector = reinterpret_cast<jstring>(env->NewGlobalRef(env->NewStringUTF("Selector")));
sFallback = reinterpret_cast<jstring>(env->NewGlobalRef(env->NewStringUTF("Fallback")));
sURLTest = reinterpret_cast<jstring>(env->NewGlobalRef(env->NewStringUTF("URLTest")));
sLoadBalance = reinterpret_cast<jstring>(env->NewGlobalRef(env->NewStringUTF("LoadBalance")));
sUnknown = reinterpret_cast<jstring>(env->NewGlobalRef(env->NewStringUTF("Unknown")));
sDirect = g<jstring>(env, env->NewStringUTF("Direct"));
sReject = g<jstring>(env, env->NewStringUTF("Reject"));
sShadowsocks = g<jstring>(env, env->NewStringUTF("Shadowsocks"));
sSnell = g<jstring>(env, env->NewStringUTF("Snell"));
sSocks5 = g<jstring>(env, env->NewStringUTF("Socks5"));
sHttp = g<jstring>(env, env->NewStringUTF("Http"));
sVmess = g<jstring>(env, env->NewStringUTF("Vmess"));
sTrojan = g<jstring>(env, env->NewStringUTF("Trojan"));
sRelay = g<jstring>(env, env->NewStringUTF("Relay"));
sSelector = g<jstring>(env, env->NewStringUTF("Selector"));
sFallback = g<jstring>(env, env->NewStringUTF("Fallback"));
sURLTest = g<jstring>(env, env->NewStringUTF("URLTest"));
sLoadBalance = g<jstring>(env, env->NewStringUTF("LoadBalance"));
sUnknown = g<jstring>(env, env->NewStringUTF("Unknown"));
}
Master::Context::Context(JNIEnv *env) {
+5 -3
View File
@@ -51,18 +51,20 @@ Java_com_github_kr328_clash_core_bridge_Bridge_setDnsOverride(JNIEnv *env, jclas
}
extern "C"
JNIEXPORT void JNICALL
JNIEXPORT jboolean JNICALL
Java_com_github_kr328_clash_core_bridge_Bridge_setSelector(JNIEnv *env, jclass clazz, jstring group,
jstring selected) {
UNUSED(clazz);
Master::runWithContext<void>(env, [&](Master::Context *context) {
return Master::runWithContext<bool>(env, [&](Master::Context *context) -> bool {
const char *g = context->getString(group);
const char *s = context->getString(selected);
setSelector(g, s);
int r = setSelector(g, s);
context->releaseString(group, g);
context->releaseString(selected, s);
return r == 0;
});
}