void JniFirebase::SetJson(const char *value) { auto env = getEnv(); if (s_objectMapperInstance == NULL) { lock<std::mutex> lock(s_objectMapperLock); if (s_objectMapperInstance == NULL) { if (!GetClass(env, "java/util/HashMap", &s_objectClass)) { return; } if (!GetClass(env, s_objectMapperClassName, &s_objectMapperClass)) { return; } jmethodID ctor = NULL; if (!GetMethod(env, s_objectMapperClass, "<init>", "()V", &ctor)) { return; } if (!GetMethod(env, s_objectMapperClass, s_objectMapperReadValueName, s_objectMapperReadValueSig, &s_objectMapperReadValue)) { return; } JOBJECT localRef = JOBJECT(env, env->NewObject(s_objectMapperClass, ctor)); s_objectMapperInstance = env->NewGlobalRef(localRef); } } JOBJECT localValue = JOBJECT(env, env->CallObjectMethod(s_objectMapperInstance, s_objectMapperReadValue, (jstring)JSTRING(env, env->NewStringUTF(value)), s_objectClass)); if (env->ExceptionCheck() == JNI_TRUE) { SetString(GetJNIExceptionDescription(env, env->ExceptionOccurred())); return; } if (!GetMethod(env, s_firebaseClass, s_firebaseSetValueName, s_firebaseSetValueSig, &s_firebaseSetValue)) { return; } env->CallVoidMethod(m_firebase, s_firebaseSetValue, (jobject)localValue); }
uint64_t JniFirebase::GetAuthExpiration() { auto env = getEnv(); if (!GetMethod(env, s_firebaseClass, "getAuth", "()Lcom.firebase.client.AuthData;", &s_firebaseGetAuth)) { return NULL; } JOBJECT authData = JOBJECT(env, env->CallObjectMethod(m_firebase, s_firebaseGetAuth)); JniAuth auth = JniAuth(authData); return auth.GetAuthExpiration(); }
JniFirebase* JniFirebase::Root() { if (!m_firebase) { return NULL; } auto env = getEnv(); if (!GetMethod(env, s_firebaseClass, s_firebaseRootName, s_firebaseRootSig, &s_firebaseRoot)) { return NULL; } JOBJECT rootFirebase = JOBJECT(env, env->CallObjectMethod(m_firebase, s_firebaseRoot)); return new JniFirebase(rootFirebase); }
JniFirebase* JniFirebase::Child(const char *value) { if (!m_firebase) { return NULL; } auto env = getEnv(); if (!GetMethod(env, s_firebaseClass, s_firebaseChildName, s_firebaseChildSig, &s_firebaseChild)) { return NULL; } JOBJECT childFirebase = JOBJECT(env, env->CallObjectMethod(m_firebase, s_firebaseChild, (jstring)JSTRING(env, env->NewStringUTF(value)))); return new JniFirebase(childFirebase); }
JniFirebase::JniFirebase(const char* path) { auto env = getEnv(); if (!GetClass(env, "com/firebase/client/Firebase", &s_firebaseClass)) { return; } if (!GetMethod(env, s_firebaseClass, "<init>", "(Ljava/lang/String;)V", &s_firebaseCtor)) { return; } JOBJECT localRef = JOBJECT(env, env->NewObject(s_firebaseClass, s_firebaseCtor, (jstring)JSTRING(env, env->NewStringUTF(path)))); m_firebase = env->NewGlobalRef(localRef); }
void JniFirebase::AuthAnonymously (long callback) { auto env = getEnv(); if (!GetClass(env, "jnistub/AuthAnonymousStub", &s_anonymousClass)) { return; } if (!GetMethod(env, s_anonymousClass, "<init>", "(Lcom/firebase/client/Firebase;J)V", &s_anonymousCtor)) { return; } JOBJECT localRef = JOBJECT(env, env->NewObject(s_anonymousClass, s_anonymousCtor, getJniObject(), (jlong)callback)); }
void JniFirebase::AuthWithCustomToken (const char* token, long callback) { auto env = getEnv(); if (!GetClass(env, "jnistub/AuthCustomTokenStub", &s_customTokenClass)) { return; } if (!GetMethod(env, s_customTokenClass, "<init>", "(Lcom/firebase/client/Firebase;JLjava/lang/String;)V", &s_customTokenCtor)) { return; } JOBJECT localRef = JOBJECT(env, env->NewObject(s_customTokenClass, s_customTokenCtor, getJniObject(), (jlong)callback, (jstring)JSTRING(env, env->NewStringUTF(token)))); }
void JniFirebase::AuthWithPassword (const char* email, const char* password, long callback) { auto env = getEnv(); if (!GetClass(env, "jnistub/AuthPasswordStub", &s_passwordClass)) { return; } if (!GetMethod(env, s_passwordClass, "<init>", "(Lcom/firebase/client/Firebase;JLjava/lang/String;Ljava/lang/String;)V", &s_passwordCtor)) { return; } JOBJECT localRef = JOBJECT(env, env->NewObject(s_passwordClass, s_passwordCtor, getJniObject(), (jlong)callback, (jstring)JSTRING(env, env->NewStringUTF(email)), (jstring)JSTRING(env, env->NewStringUTF(password)))); }
JniChildEventStub::JniChildEventStub(JniFirebase* firebase, jlong cookie) { auto env = getEnv(); if (!GetClass(env, s_stubClassName, &s_stubClass)) { return; } if (!GetMethod(env, s_stubClass, s_stubCtorName, s_stubCtorSig, &s_stubCtor)) { return; } if (!GetMethod(env, s_stubClass, s_stubReleaseName, s_stubReleaseSig, &s_stubRelease)) { return; } JOBJECT localRef = JOBJECT(env, env->NewObject(s_stubClass, s_stubCtor, firebase->getJniObject(), cookie)); m_stub = env->NewGlobalRef(localRef); }