more android code

pull/13/head
Jeff Becker 6 years ago
parent b97ea0c409
commit 863ef1f71e

@ -3,17 +3,16 @@
#include <jni.h> #include <jni.h>
#include <llarp.h> #include <llarp.h>
#include <signal.h> #include <signal.h>
#include <memory>
#include <thread> #include <thread>
struct AndroidMain struct AndroidMain
{ {
llarp_main * m_impl = nullptr; llarp_main* m_impl = nullptr;
std::thread * m_thread = nullptr; std::thread* m_thread = nullptr;
~AndroidMain() ~AndroidMain()
{ {
if(m_impl)
llarp_main_free(m_impl);
if(m_thread) if(m_thread)
{ {
m_thread->join(); m_thread->join();
@ -21,34 +20,45 @@ struct AndroidMain
} }
} }
void Start() void
Start()
{ {
if(m_impl || m_thread) if(m_impl || m_thread)
return; return;
m_impl = llarp_main_init("daemon.ini", true); m_impl = llarp_main_init("daemon.ini", true);
m_thread = new std::thread(std::bind(&AndroidMain::Run, this)); m_thread = new std::thread(std::bind(&AndroidMain::Run, this));
} }
void Run() void
Run()
{ {
llarp_main_run(m_impl); llarp_main_run(m_impl);
llarp_main_free(m_impl);
} }
void Stop() void
Stop()
{ {
llarp_main_signal(m_impl, SIGINT); llarp_main_signal(m_impl, SIGINT);
} }
typedef std::unique_ptr<AndroidMain> Ptr; typedef std::unique_ptr< AndroidMain > Ptr;
static std::atomic<Ptr> daemon = std::make_unique<AndroidMain>(); static std::atomic< Ptr > daemon = std::make_unique< AndroidMain >();
} }
extern "C" extern "C"
{ {
JNIEXPORT jstring JNICALL
Java_network_loki_lokinet_Lokinet_1JNI_getABICompiledWith(JNIEnv * env,
jclass)
{
// TODO: fixme
return env->NewUTFString("android");
}
JNIEXPORT jstring JNICALL Java_network_loki_lokinet_Lokinet_1JNI_startLokinet JNIEXPORT jstring JNICALL Java_network_loki_lokinet_Lokinet_1JNI_startLokinet(
(JNIEnv * env, jclass jcl) JNIEnv * env, jclass jcl)
{ {
if(AndroidMain::daemon->Running()) if(AndroidMain::daemon->Running())
return env->NewUTFString("already running"); return env->NewUTFString("already running");
@ -56,4 +66,18 @@ JNIEXPORT jstring JNICALL Java_network_loki_lokinet_Lokinet_1JNI_startLokinet
return env->NewUTFString("ok"); return env->NewUTFString("ok");
} }
JNIEXPORT void JNICALL Java_network_loki_lokinet_Lokinet_1JNI_stopLokinet(
JNIEnv * env, jclass)
{
if(AndroidMain::daemon->Running())
{
AndroidMain::daemon->Stop();
}
}
JNIEXPORT void JNICALL
Java_network_loki_lokinet_Lokinet_1JNI_onNetworkStateChanged(JNIEnv*, jclass,
jboolean)
{
}
} }
Loading…
Cancel
Save