I am working on android application which is written in cpp (cocos2dx) Now I'm doing a facebook module which has to be implemented in java.
The facebook calls are asynchronic so I cannot know when the action is completed unless I'll have a callback from the java part to the cpp.
For example:
The JNI part should look like something like that:
void CCAndroidApplication::login2Facebook()
{
JniMethodInfo minfo;
if(JniHelper::getStaticMethodInfo(minfo,
"org/cocos2dx/example/myandroidtest",
"login2Facebook",
"(**POINTER TO CALLBACK METHOD DidLogin()**)V"))
{
minfo.env->CallStaticVoidMethod(minfo.classID, minfo.methodID);
minfo.env->DeleteLocalRef(minfo.classID);
}
}
and the java part should look like:
public static void login2Facebook(**POINTER TO native CALLBACK METHOD DidLogin()**)
Session.openActiveSession(me, true, new Session.StatusCallback()
{
@Override
public void call(Session session, SessionState state, Exception exception)
{
mSession = session;
if (session.isOpened())
{
Request.executeMeRequestAsync(session, new Request.GraphUserCallback()
{
@Override
public void onCompleted(GraphUser user, Response response)
{
if (user != null)
{
**Call nativeDidLogin()**;
}
}
});
}
}
});
}
It is also fine if I can send cpp object that contains the method like
class delgateMethods
{
public:
void didLogin();
}
and call it from the java.
My question is: Is it possible to send a pointer to function over the JNI and call it in the java part?
Thanks