MCPcopy Create free account
hub / github.com/NodeRT/NodeRT / Async

Class Async

src/NodeRTLib/ProjectFiles/node-async.h:56–377  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

54typedef std::function<void(int, Handle<Value>*)> InvokeCallbackDelegate;
55
56class Async {
57 public:
58 template <typename TInput, typename TResult>
59 struct Baton {
60 int error_code;
61 std::wstring error_message;
62
63 // Custom data
64 std::shared_ptr<TInput> data;
65 std::shared_ptr<TResult> result;
66 std::shared_ptr<Persistent<Value>> callback_args;
67 unsigned callback_args_size;
68
69 Baton() { callback_args_size = 0; }
70
71 void setCallbackArgs(Handle<Value>* argv, int argc) {
72 HandleScope scope;
73
74 callback_info.reset(new Persistent<Value>[argc],
75 [](Persistent<Value>* ptr) { delete[] ptr; });
76
77 callback_args_size = 0;
78
79 for (int i = 0; i < argc; i++) {
80 // callback_info.get()[i] = argv[i];
81 callback_info.get()[i].Reset(argv[i]);
82 }
83 }
84
85 virtual ~Baton() {
86 for (int i = 0; i < callback_args_size; i++) {
87 callback_info.get()[i].Reset();
88 }
89 }
90
91 private:
92 uv_work_t request;
93 std::function<void(Baton*)> doWork;
94 std::function<void(Baton*)> afterWork;
95 Nan::Persistent<Object> callbackData;
96
97 friend Async;
98 };
99
100 private:
101 class TokenData {
102 public:
103 static uv_async_t* NewAsyncToken() {
104 uv_async_t* asyncHandle = new uv_async_t;
105 uv_async_init(uv_default_loop(), asyncHandle, AsyncCb);
106 SetHandleData(asyncHandle->data);
107
108 return asyncHandle;
109 }
110
111 static uv_async_t* NewAsyncToken(Handle<Function> callback,
112 Handle<Value> receiver) {
113 uv_async_t* asyncHandle = NewAsyncToken();

Callers

nothing calls this directly

Calls

no outgoing calls

Tested by

no test coverage detected