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)
|
#if defined(DM_PLATFORM_ANDROID)
|
||||||
|
|
||||||
|
#include <dmsdk/dlib/android.h>
|
||||||
|
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
|
|
||||||
#include "siwg.h"
|
#include "siwg.h"
|
||||||
#include "siwg_jni.h"
|
// #include "siwg_jni.h"
|
||||||
#include "siwg_callback.h"
|
#include "siwg_callback.h"
|
||||||
#include "com_aterve_siwg_SiwgJNI.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()
|
// void method()
|
||||||
static int CallVoidMethod(jobject instance, jmethodID method)
|
static int CallVoidMethod(jobject instance, jmethodID method)
|
||||||
{
|
{
|
||||||
ThreadAttacher attacher;
|
dmAndroid::ThreadAttacher threadAttacher;
|
||||||
JNIEnv *env = attacher.env;
|
JNIEnv* env = threadAttacher.GetEnv();
|
||||||
env->CallVoidMethod(instance, method);
|
env->CallVoidMethod(instance, method);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
@ -106,8 +108,9 @@ static int CallVoidMethod(jobject instance, jmethodID method)
|
|||||||
static int CallStringMethod(lua_State* L, jobject instance, jmethodID method)
|
static int CallStringMethod(lua_State* L, jobject instance, jmethodID method)
|
||||||
{
|
{
|
||||||
DM_LUA_STACK_CHECK(L, 1);
|
DM_LUA_STACK_CHECK(L, 1);
|
||||||
ThreadAttacher attacher;
|
dmAndroid::ThreadAttacher threadAttacher;
|
||||||
JNIEnv *env = attacher.env;
|
JNIEnv* env = threadAttacher.GetEnv();
|
||||||
|
|
||||||
jstring return_value = (jstring)env->CallObjectMethod(instance, method);
|
jstring return_value = (jstring)env->CallObjectMethod(instance, method);
|
||||||
if (return_value)
|
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)
|
static int CallBooleanMethod(lua_State* L, jobject instance, jmethodID method)
|
||||||
{
|
{
|
||||||
DM_LUA_STACK_CHECK(L, 1);
|
DM_LUA_STACK_CHECK(L, 1);
|
||||||
ThreadAttacher attacher;
|
dmAndroid::ThreadAttacher threadAttacher;
|
||||||
JNIEnv *env = attacher.env;
|
JNIEnv* env = threadAttacher.GetEnv();
|
||||||
jboolean return_value = (jboolean)env->CallBooleanMethod(instance, method);
|
jboolean return_value = (jboolean)env->CallBooleanMethod(instance, method);
|
||||||
lua_pushboolean(L, JNI_TRUE == return_value);
|
lua_pushboolean(L, JNI_TRUE == return_value);
|
||||||
return 1;
|
return 1;
|
||||||
@ -219,12 +222,9 @@ static int SiwgAuth_set_callback(lua_State* L)
|
|||||||
// JNI Extension Methods
|
// 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;
|
env->CallVoidMethod(g_siwg.m_SiwgJNI, g_siwg.m_activityResult, request_code, result_code, result);
|
||||||
JNIEnv *_env = attacher.env;
|
|
||||||
|
|
||||||
_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)
|
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);
|
CheckInitializationParams(client_id, request_server_auth_code > 0, request_id_token > 0);
|
||||||
dmLogInfo("[SIWG] InitJNI Checked Params");
|
dmLogInfo("[SIWG] InitJNI Checked Params");
|
||||||
|
|
||||||
ThreadAttacher attacher;
|
dmAndroid::ThreadAttacher threadAttacher;
|
||||||
JNIEnv *env = attacher.env;
|
JNIEnv* env = threadAttacher.GetEnv();
|
||||||
ClassLoader class_loader = ClassLoader(env);
|
jclass cls = dmAndroid::LoadClass(env, "com.aterve.siwg.SiwgJNI");
|
||||||
jclass cls = class_loader.load("com.aterve.siwg.SiwgJNI");
|
|
||||||
dmLogInfo("[SIWG] InitJNI Loaded Class");
|
dmLogInfo("[SIWG] InitJNI Loaded Class");
|
||||||
|
|
||||||
InitJNIMethods(env, cls);
|
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");
|
jmethodID jni_constructor = env->GetMethodID(cls, "<init>", "(Landroid/app/Activity;ZZZLjava/lang/String;)V");
|
||||||
jstring java_client_id = env->NewStringUTF(client_id);
|
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);
|
env->DeleteLocalRef(java_client_id);
|
||||||
dmLogInfo("[SIWG] InitJNI JNI Refrences Initialized");
|
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);
|
InitializeJNI(client_id, request_server_auth_code > 0, request_id_token > 0);
|
||||||
|
|
||||||
dmExtension::RegisterAndroidOnActivityResultListener(OnActivityResult);
|
dmAndroid::RegisterOnActivityResultListener(OnActivityResult);
|
||||||
dmLogInfo("[SIWG] Activity Result Listener Initialized");
|
dmLogInfo("[SIWG] Activity Result Listener Initialized");
|
||||||
|
|
||||||
siwg_callback_initialize();
|
siwg_callback_initialize();
|
||||||
@ -377,7 +376,7 @@ dmExtension::Result FinalizeSIWG(dmExtension::Params* params)
|
|||||||
|
|
||||||
siwg_callback_finalize();
|
siwg_callback_finalize();
|
||||||
|
|
||||||
dmExtension::UnregisterAndroidOnActivityResultListener(OnActivityResult);
|
dmAndroid::UnregisterOnActivityResultListener(OnActivityResult);
|
||||||
dmLogInfo("[SIWG] Activity Result Listener Unregistered");
|
dmLogInfo("[SIWG] Activity Result Listener Unregistered");
|
||||||
|
|
||||||
return dmExtension::RESULT_OK;
|
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;
|
SIWG_callback *cbk = &m_callback;
|
||||||
if(cbk->m_Callback == LUA_NOREF)
|
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)
|
void siwg_add_to_queue(MESSAGE_ID msg, const char*json)
|
||||||
{
|
{
|
||||||
DM_MUTEX_SCOPED_LOCK(m_mutex);
|
|
||||||
|
|
||||||
CallbackData data;
|
CallbackData data;
|
||||||
data.msg = msg;
|
data.msg = msg;
|
||||||
data.json = json ? strdup(json) : NULL;
|
data.json = json ? strdup(json) : NULL;
|
||||||
|
|
||||||
|
DM_MUTEX_SCOPED_LOCK(m_mutex);
|
||||||
|
|
||||||
if(m_callbacksQueue.Full())
|
if(m_callbacksQueue.Full())
|
||||||
{
|
{
|
||||||
m_callbacksQueue.OffsetCapacity(1);
|
m_callbacksQueue.OffsetCapacity(1);
|
||||||
@ -140,11 +140,15 @@ void siwg_callback_update()
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
DM_MUTEX_SCOPED_LOCK(m_mutex);
|
dmArray<CallbackData> tmp;
|
||||||
|
|
||||||
for(uint32_t i = 0; i != m_callbacksQueue.Size(); ++i)
|
|
||||||
{
|
{
|
||||||
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);
|
siwg_invoke_callback(data->msg, data->json);
|
||||||
if(data->json)
|
if(data->json)
|
||||||
{
|
{
|
||||||
@ -152,6 +156,5 @@ void siwg_callback_update()
|
|||||||
data->json = 0;
|
data->json = 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
m_callbacksQueue.SetSize(0);
|
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
Loading…
x
Reference in New Issue
Block a user