You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
lokinet/jni/lokinet_android.cpp

84 lines
1.6 KiB
C++

6 years ago
//#include <string.h>
#include <jni.h>
#include <llarp.h>
#include <signal.h>
#include <memory>
6 years ago
#include <thread>
struct AndroidMain
6 years ago
{
llarp_main* m_impl = nullptr;
std::thread* m_thread = nullptr;
6 years ago
void
Start()
6 years ago
{
if(m_impl || m_thread)
return;
m_impl = llarp_main_init("daemon.ini", true);
6 years ago
m_thread = new std::thread(std::bind(&AndroidMain::Run, this));
}
6 years ago
bool
Running() const
{
return m_impl != nullptr;
}
void
Run()
6 years ago
{
llarp_main_run(m_impl);
}
void
Stop()
6 years ago
{
llarp_main_signal(m_impl, SIGINT);
6 years ago
m_thread->join();
delete m_thread;
m_thread = nullptr;
llarp_main_free(m_impl);
m_impl = nullptr;
6 years ago
}
typedef std::unique_ptr< AndroidMain > Ptr;
6 years ago
}
6 years ago
static AndroidMain::Ptr daemon(new AndroidMain());
6 years ago
extern "C"
{
JNIEXPORT jstring JNICALL
6 years ago
Java_network_loki_lokinet_Lokinet_1JNI_getABICompiledWith(JNIEnv* env, jclass)
{
// TODO: fixme
return env->NewUTFString("android");
}
6 years ago
6 years ago
JNIEXPORT jstring JNICALL
Java_network_loki_lokinet_Lokinet_1JNI_startLokinet(JNIEnv* env, jclass jcl)
6 years ago
{
6 years ago
if(daemon->Running())
6 years ago
return env->NewUTFString("already running");
6 years ago
daemon->Start();
6 years ago
return env->NewUTFString("ok");
}
6 years ago
JNIEXPORT void JNICALL
Java_network_loki_lokinet_Lokinet_1JNI_stopLokinet(JNIEnv* env, jclass)
{
6 years ago
if(daemon->Running())
{
6 years ago
daemon->Stop();
}
}
JNIEXPORT void JNICALL
Java_network_loki_lokinet_Lokinet_1JNI_onNetworkStateChanged(JNIEnv*, jclass,
jboolean)
{
}
6 years ago
}