forked from ably/xdelta-async-nodejs-addon
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathBaseXdeltaAsyncWorker.cc
53 lines (45 loc) · 1.28 KB
/
BaseXdeltaAsyncWorker.cc
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
#include <napi.h>
#include <xdelta3.h>
#include <BaseXdeltaAsyncWorker.h>
using namespace Napi;
BaseXdeltaAsyncWorker::BaseXdeltaAsyncWorker(Buffer<uint8_t> &dictionary,
Buffer<uint8_t> &input,
Buffer<uint8_t> &result,
Function& callback) : AsyncWorker(callback),
dictionary(ObjectReference::New(dictionary, 1)),
input(ObjectReference::New(input, 1)),
result(ObjectReference::New(result, 1)),
dictionaryPtr(dictionary.Data()),
inputPtr(input.Data()),
resultPtr(result.Data()),
dictionaryLength(dictionary.Length()),
inputLength(input.Length()),
resultLength(result.Length())
{
}
void BaseXdeltaAsyncWorker::OnOK()
{
HandleScope scope(Env());
if (res == 0)
{
Callback().Call({Env().Undefined(), Number::New(Env(), bytesWritten)});
}
else
{
Object err = Object::New(Env());
err.Set("code", res);
const char *errorMessage = xd3_strerror(res);
if (errorMessage != NULL)
{
err.Set("message", errorMessage);
}
else if (res == 28)
{
err.Set("message", "Insufficient output space.");
}
Callback().Call({err});
}
dictionary.Unref();
input.Unref();
result.Unref();
}