more android

pull/13/head
Jeff Becker 6 years ago
parent d186fea9f5
commit b16a76afbe

@ -11,15 +11,6 @@ struct AndroidMain
llarp_main* m_impl = nullptr; llarp_main* m_impl = nullptr;
std::thread* m_thread = nullptr; std::thread* m_thread = nullptr;
~AndroidMain()
{
if(m_thread)
{
m_thread->join();
delete m_thread;
}
}
void void
Start() Start()
{ {
@ -29,50 +20,59 @@ struct AndroidMain
m_thread = new std::thread(std::bind(&AndroidMain::Run, this)); m_thread = new std::thread(std::bind(&AndroidMain::Run, this));
} }
bool
Running() const
{
return m_impl != nullptr;
}
void void
Run() Run()
{ {
llarp_main_run(m_impl); llarp_main_run(m_impl);
llarp_main_free(m_impl);
} }
void void
Stop() Stop()
{ {
llarp_main_signal(m_impl, SIGINT); llarp_main_signal(m_impl, SIGINT);
m_thread->join();
delete m_thread;
m_thread = nullptr;
llarp_main_free(m_impl);
m_impl = nullptr;
} }
typedef std::unique_ptr< AndroidMain > Ptr; typedef std::unique_ptr< AndroidMain > Ptr;
static std::atomic< Ptr > daemon =
std::unique_ptr< AndroidMain >(new AndroidMain());
} }
static AndroidMain::Ptr daemon(new AndroidMain());
extern "C" extern "C"
{ {
JNIEXPORT jstring JNICALL JNIEXPORT jstring JNICALL
Java_network_loki_lokinet_Lokinet_1JNI_getABICompiledWith(JNIEnv * env, Java_network_loki_lokinet_Lokinet_1JNI_getABICompiledWith(JNIEnv* env, jclass)
jclass)
{ {
// TODO: fixme // TODO: fixme
return env->NewUTFString("android"); return env->NewUTFString("android");
} }
JNIEXPORT jstring JNICALL Java_network_loki_lokinet_Lokinet_1JNI_startLokinet( JNIEXPORT jstring JNICALL
JNIEnv * env, jclass jcl) Java_network_loki_lokinet_Lokinet_1JNI_startLokinet(JNIEnv* env, jclass jcl)
{ {
if(AndroidMain::daemon->Running()) if(daemon->Running())
return env->NewUTFString("already running"); return env->NewUTFString("already running");
AndroidMain::daemon->Start(); daemon->Start();
return env->NewUTFString("ok"); return env->NewUTFString("ok");
} }
JNIEXPORT void JNICALL Java_network_loki_lokinet_Lokinet_1JNI_stopLokinet( JNIEXPORT void JNICALL
JNIEnv * env, jclass) Java_network_loki_lokinet_Lokinet_1JNI_stopLokinet(JNIEnv* env, jclass)
{ {
if(AndroidMain::daemon->Running()) if(daemon->Running())
{ {
AndroidMain::daemon->Stop(); daemon->Stop();
} }
} }

Loading…
Cancel
Save