updated to use new API methods & smaller mutex handling
This commit is contained in:
parent
2d4639ae8a
commit
5db59bc645
@ -7,10 +7,12 @@
|
||||
|
||||
#if defined(DM_PLATFORM_ANDROID)
|
||||
|
||||
#include <dmsdk/dlib/android.h>
|
||||
|
||||
#include <string.h>
|
||||
|
||||
#include "siwg.h"
|
||||
#include "siwg_jni.h"
|
||||
// #include "siwg_jni.h"
|
||||
#include "siwg_callback.h"
|
||||
#include "com_aterve_siwg_SiwgJNI.h"
|
||||
|
||||
@ -96,8 +98,8 @@ static char* luaL_checktable_string(lua_State *L, int numArg, const char* field,
|
||||
// void method()
|
||||
static int CallVoidMethod(jobject instance, jmethodID method)
|
||||
{
|
||||
ThreadAttacher attacher;
|
||||
JNIEnv *env = attacher.env;
|
||||
dmAndroid::ThreadAttacher threadAttacher;
|
||||
JNIEnv* env = threadAttacher.GetEnv();
|
||||
env->CallVoidMethod(instance, method);
|
||||
return 0;
|
||||
}
|
||||
@ -106,8 +108,9 @@ static int CallVoidMethod(jobject instance, jmethodID method)
|
||||
static int CallStringMethod(lua_State* L, jobject instance, jmethodID method)
|
||||
{
|
||||
DM_LUA_STACK_CHECK(L, 1);
|
||||
ThreadAttacher attacher;
|
||||
JNIEnv *env = attacher.env;
|
||||
dmAndroid::ThreadAttacher threadAttacher;
|
||||
JNIEnv* env = threadAttacher.GetEnv();
|
||||
|
||||
jstring return_value = (jstring)env->CallObjectMethod(instance, method);
|
||||
if (return_value)
|
||||
{
|
||||
@ -127,8 +130,8 @@ static int CallStringMethod(lua_State* L, jobject instance, jmethodID method)
|
||||
static int CallBooleanMethod(lua_State* L, jobject instance, jmethodID method)
|
||||
{
|
||||
DM_LUA_STACK_CHECK(L, 1);
|
||||
ThreadAttacher attacher;
|
||||
JNIEnv *env = attacher.env;
|
||||
dmAndroid::ThreadAttacher threadAttacher;
|
||||
JNIEnv* env = threadAttacher.GetEnv();
|
||||
jboolean return_value = (jboolean)env->CallBooleanMethod(instance, method);
|
||||
lua_pushboolean(L, JNI_TRUE == return_value);
|
||||
return 1;
|
||||
@ -219,12 +222,9 @@ static int SiwgAuth_set_callback(lua_State* L)
|
||||
// JNI Extension Methods
|
||||
//
|
||||
|
||||
static void OnActivityResult(void *env, void* activity, int32_t request_code, int32_t result_code, void* result)
|
||||
static void OnActivityResult(JNIEnv* env, jobject activity, int32_t request_code, int32_t result_code, void* result)
|
||||
{
|
||||
ThreadAttacher attacher;
|
||||
JNIEnv *_env = attacher.env;
|
||||
|
||||
_env->CallVoidMethod(g_siwg.m_SiwgJNI, g_siwg.m_activityResult, request_code, result_code, result);
|
||||
env->CallVoidMethod(g_siwg.m_SiwgJNI, g_siwg.m_activityResult, request_code, result_code, result);
|
||||
}
|
||||
|
||||
JNIEXPORT void JNICALL Java_com_aterve_siwg_SiwgJNI_siwgAddToQueue(JNIEnv * env, jclass cls, jint jmsg, jstring jjson)
|
||||
@ -322,10 +322,9 @@ static void InitializeJNI(const char* client_id, bool request_server_auth_code,
|
||||
CheckInitializationParams(client_id, request_server_auth_code > 0, request_id_token > 0);
|
||||
dmLogInfo("[SIWG] InitJNI Checked Params");
|
||||
|
||||
ThreadAttacher attacher;
|
||||
JNIEnv *env = attacher.env;
|
||||
ClassLoader class_loader = ClassLoader(env);
|
||||
jclass cls = class_loader.load("com.aterve.siwg.SiwgJNI");
|
||||
dmAndroid::ThreadAttacher threadAttacher;
|
||||
JNIEnv* env = threadAttacher.GetEnv();
|
||||
jclass cls = dmAndroid::LoadClass(env, "com.aterve.siwg.SiwgJNI");
|
||||
dmLogInfo("[SIWG] InitJNI Loaded Class");
|
||||
|
||||
InitJNIMethods(env, cls);
|
||||
@ -334,7 +333,7 @@ static void InitializeJNI(const char* client_id, bool request_server_auth_code,
|
||||
jmethodID jni_constructor = env->GetMethodID(cls, "<init>", "(Landroid/app/Activity;ZZZLjava/lang/String;)V");
|
||||
jstring java_client_id = env->NewStringUTF(client_id);
|
||||
|
||||
g_siwg.m_SiwgJNI = env->NewGlobalRef(env->NewObject(cls, jni_constructor, dmGraphics::GetNativeAndroidActivity(), true, request_server_auth_code, request_id_token, java_client_id));
|
||||
g_siwg.m_SiwgJNI = env->NewGlobalRef(env->NewObject(cls, jni_constructor, threadAttacher.GetActivity()->clazz, true, request_server_auth_code, request_id_token, java_client_id));
|
||||
env->DeleteLocalRef(java_client_id);
|
||||
dmLogInfo("[SIWG] InitJNI JNI Refrences Initialized");
|
||||
}
|
||||
@ -355,7 +354,7 @@ dmExtension::Result InitializeSIWG(dmExtension::Params* params)
|
||||
|
||||
InitializeJNI(client_id, request_server_auth_code > 0, request_id_token > 0);
|
||||
|
||||
dmExtension::RegisterAndroidOnActivityResultListener(OnActivityResult);
|
||||
dmAndroid::RegisterOnActivityResultListener(OnActivityResult);
|
||||
dmLogInfo("[SIWG] Activity Result Listener Initialized");
|
||||
|
||||
siwg_callback_initialize();
|
||||
@ -377,7 +376,7 @@ dmExtension::Result FinalizeSIWG(dmExtension::Params* params)
|
||||
|
||||
siwg_callback_finalize();
|
||||
|
||||
dmExtension::UnregisterAndroidOnActivityResultListener(OnActivityResult);
|
||||
dmAndroid::UnregisterOnActivityResultListener(OnActivityResult);
|
||||
dmLogInfo("[SIWG] Activity Result Listener Unregistered");
|
||||
|
||||
return dmExtension::RESULT_OK;
|
||||
|
@ -36,7 +36,7 @@ static void UnregisterCallback()
|
||||
}
|
||||
}
|
||||
|
||||
static void siwg_invoke_callback(MESSAGE_ID type, char*json)
|
||||
static void siwg_invoke_callback(MESSAGE_ID type, const char*json)
|
||||
{
|
||||
SIWG_callback *cbk = &m_callback;
|
||||
if(cbk->m_Callback == LUA_NOREF)
|
||||
@ -120,12 +120,12 @@ void siwg_set_callback(lua_State* L, int pos)
|
||||
|
||||
void siwg_add_to_queue(MESSAGE_ID msg, const char*json)
|
||||
{
|
||||
DM_MUTEX_SCOPED_LOCK(m_mutex);
|
||||
|
||||
CallbackData data;
|
||||
data.msg = msg;
|
||||
data.json = json ? strdup(json) : NULL;
|
||||
|
||||
DM_MUTEX_SCOPED_LOCK(m_mutex);
|
||||
|
||||
if(m_callbacksQueue.Full())
|
||||
{
|
||||
m_callbacksQueue.OffsetCapacity(1);
|
||||
@ -140,11 +140,15 @@ void siwg_callback_update()
|
||||
return;
|
||||
}
|
||||
|
||||
DM_MUTEX_SCOPED_LOCK(m_mutex);
|
||||
|
||||
for(uint32_t i = 0; i != m_callbacksQueue.Size(); ++i)
|
||||
dmArray<CallbackData> tmp;
|
||||
{
|
||||
CallbackData* data = &m_callbacksQueue[i];
|
||||
DM_MUTEX_SCOPED_LOCK(m_mutex);
|
||||
tmp.Swap(m_callbacksQueue);
|
||||
}
|
||||
|
||||
for(uint32_t i = 0; i != tmp.Size(); ++i)
|
||||
{
|
||||
CallbackData* data = &tmp[i];
|
||||
siwg_invoke_callback(data->msg, data->json);
|
||||
if(data->json)
|
||||
{
|
||||
@ -152,6 +156,5 @@ void siwg_callback_update()
|
||||
data->json = 0;
|
||||
}
|
||||
}
|
||||
m_callbacksQueue.SetSize(0);
|
||||
}
|
||||
#endif
|
Loading…
x
Reference in New Issue
Block a user