/* Copyright (C) 2016 -2017 Jerry Jin */ #include #include #include "handles.hpp" #include #include #include #include #include #include "../loop.hpp" void HandleCurrentLinkWorker::Execute(){ try{ // convert object IDs into library objects OH_GET_OBJECT(ObjectIDObjPtr, mObjectID, QuantLibAddin::Handle) // invoke the member function mReturnValue = ObjectIDObjPtr->currentLink( ); }catch(const std::exception &e){ mError = e.what(); }catch (...){ mError = "unkown error"; } } void HandleCurrentLinkWorker::HandleOKCallback(){ Nan::HandleScope scope; Local argv[2] = { Nan::New(mError).ToLocalChecked(), Nan::New(mReturnValue).ToLocalChecked() }; callback->Call(2, argv); } NAN_METHOD(QuantLibNode::HandleCurrentLink) { // validate js arguments if (info.Length() == 0 || !info[0]->IsString()) { return Nan::ThrowError("ObjectID is required."); } // convert js argument to c++ type String::Utf8Value strObjectID(info[0]->ToString()); string ObjectIDCpp(strdup(*strObjectID)); // declare callback Nan::Callback *callback = new Nan::Callback(info[1].As()); // launch Async worker Nan::AsyncQueueWorker(new HandleCurrentLinkWorker( callback ,ObjectIDCpp )); } //HandleCurrentLinkWorker::~HandleCurrentLinkWorker(){ // //} //void HandleCurrentLinkWorker::Destroy(){ // //} void HandleEmptyWorker::Execute(){ try{ // convert object IDs into library objects OH_GET_OBJECT(ObjectIDObjPtr, mObjectID, QuantLibAddin::Handle) // invoke the member function mReturnValue = ObjectIDObjPtr->empty( ); }catch(const std::exception &e){ mError = e.what(); }catch (...){ mError = "unkown error"; } } void HandleEmptyWorker::HandleOKCallback(){ Nan::HandleScope scope; Local argv[2] = { Nan::New(mError).ToLocalChecked(), Nan::New(mReturnValue) }; callback->Call(2, argv); } NAN_METHOD(QuantLibNode::HandleEmpty) { // validate js arguments if (info.Length() == 0 || !info[0]->IsString()) { return Nan::ThrowError("ObjectID is required."); } // convert js argument to c++ type String::Utf8Value strObjectID(info[0]->ToString()); string ObjectIDCpp(strdup(*strObjectID)); // declare callback Nan::Callback *callback = new Nan::Callback(info[1].As()); // launch Async worker Nan::AsyncQueueWorker(new HandleEmptyWorker( callback ,ObjectIDCpp )); } //HandleEmptyWorker::~HandleEmptyWorker(){ // //} //void HandleEmptyWorker::Destroy(){ // //} void RelinkableHandleLinkToWorker::Execute(){ try{ // convert object IDs into library objects OH_GET_OBJECT(ObjectIDObjPtr, mObjectID, QuantLibAddin::RelinkableHandle) // invoke the member function ObjectIDObjPtr->linkTo( mCurrentLink ); }catch(const std::exception &e){ mError = e.what(); }catch (...){ mError = "unkown error"; } } void RelinkableHandleLinkToWorker::HandleOKCallback(){ Nan::HandleScope scope; Local argv[2] = { Nan::New(mError).ToLocalChecked(), Nan::Null() }; callback->Call(2, argv); } NAN_METHOD(QuantLibNode::RelinkableHandleLinkTo) { // validate js arguments if (info.Length() == 0 || !info[0]->IsString()) { return Nan::ThrowError("ObjectID is required."); } if (info.Length() == 1 || !info[1]->IsString()) { return Nan::ThrowError("CurrentLink is required."); } // convert js argument to c++ type String::Utf8Value strObjectID(info[0]->ToString()); string ObjectIDCpp(strdup(*strObjectID)); // convert js argument to c++ type String::Utf8Value strCurrentLink(info[1]->ToString()); string CurrentLinkCpp(strdup(*strCurrentLink)); // declare callback Nan::Callback *callback = new Nan::Callback(info[2].As()); // launch Async worker Nan::AsyncQueueWorker(new RelinkableHandleLinkToWorker( callback ,ObjectIDCpp ,CurrentLinkCpp )); } //RelinkableHandleLinkToWorker::~RelinkableHandleLinkToWorker(){ // //} //void RelinkableHandleLinkToWorker::Destroy(){ // //}