template <typename SupportedInvocation>
class JNIWorker : public Nan::AsyncWorker {
public:
JNIWorker(
SupportedInvocation _supported,
FunctionHandler _fn,
std::shared_ptr<Object>& _javaObject
):
AsyncWorker( _fn.GetCallback() ),
supported(_supported),
fn( _fn ),
javaObject( _javaObject ) {
LookForReturnType(javaObject);
};
void HandleOKCallback () {
v8::Local<v8::Value> argv[] = {
Get()
};
callback->Call(1, argv);
};
v8::Local<v8::Value> Get(){
return supported(returnType)->Get();
};
void Execute() {
call();
};
JNIWorker& call(){
try{
supported(returnType)->Call(fn.GetName(), javaObject, fn.GetArguments());
}catch(VMError& error){
throw error;
}
return *this;
}