|
|
|
@ -574,6 +574,14 @@ void Call::CompleteBatch(bool is_final_op) { |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
NAN_METHOD(Call::New) { |
|
|
|
|
/* Arguments:
|
|
|
|
|
* 0: Channel to make the call on |
|
|
|
|
* 1: Method |
|
|
|
|
* 2: Deadline |
|
|
|
|
* 3: host |
|
|
|
|
* 4: parent Call |
|
|
|
|
* 5: propagation flags |
|
|
|
|
*/ |
|
|
|
|
if (info.IsConstructCall()) { |
|
|
|
|
Call *call; |
|
|
|
|
if (info[0]->IsExternal()) { |
|
|
|
@ -618,25 +626,26 @@ NAN_METHOD(Call::New) { |
|
|
|
|
double deadline = Nan::To<double>(info[2]).FromJust(); |
|
|
|
|
grpc_channel *wrapped_channel = channel->GetWrappedChannel(); |
|
|
|
|
grpc_call *wrapped_call; |
|
|
|
|
grpc_slice method = CreateSliceFromString( |
|
|
|
|
Nan::To<String>(info[1]).ToLocalChecked()); |
|
|
|
|
if (info[3]->IsString()) { |
|
|
|
|
grpc_slice *host = new grpc_slice; |
|
|
|
|
*host = CreateSliceFromString( |
|
|
|
|
Nan::To<String>(info[3]).ToLocalChecked()); |
|
|
|
|
wrapped_call = grpc_channel_create_call( |
|
|
|
|
wrapped_channel, parent_call, propagate_flags, |
|
|
|
|
GetCompletionQueue(), CreateSliceFromString( |
|
|
|
|
Nan::To<String>(info[1]).ToLocalChecked()), |
|
|
|
|
GetCompletionQueue(), method, |
|
|
|
|
host, MillisecondsToTimespec(deadline), NULL); |
|
|
|
|
delete host; |
|
|
|
|
} else if (info[3]->IsUndefined() || info[3]->IsNull()) { |
|
|
|
|
wrapped_call = grpc_channel_create_call( |
|
|
|
|
wrapped_channel, parent_call, propagate_flags, |
|
|
|
|
GetCompletionQueue(), CreateSliceFromString( |
|
|
|
|
Nan::To<String>(info[1]).ToLocalChecked()), |
|
|
|
|
GetCompletionQueue(), method, |
|
|
|
|
NULL, MillisecondsToTimespec(deadline), NULL); |
|
|
|
|
} else { |
|
|
|
|
return Nan::ThrowTypeError("Call's fourth argument must be a string"); |
|
|
|
|
} |
|
|
|
|
grpc_slice_unref(method); |
|
|
|
|
call = new Call(wrapped_call); |
|
|
|
|
Nan::Set(info.This(), Nan::New("channel_").ToLocalChecked(), |
|
|
|
|
channel_object); |
|
|
|
|