Wrap getTopics as special case for JS
This commit is contained in:
parent
53db43250e
commit
703311649c
@ -233,6 +233,26 @@ struct WebSocketWrapper {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* This one is wrapped instead of iterateTopics as JS-people will put their hands in wood chipper for sure. */
|
||||||
|
template <bool SSL>
|
||||||
|
static void uWS_WebSocket_getTopics(const FunctionCallbackInfo<Value> &args) {
|
||||||
|
Isolate *isolate = args.GetIsolate();
|
||||||
|
auto *ws = getWebSocket<SSL>(args);
|
||||||
|
if (ws) {
|
||||||
|
|
||||||
|
Local<Array> topicsArray = Array::New(isolate, 0);
|
||||||
|
|
||||||
|
ws->iterateTopics([&topicsArray, isolate](std::string_view topic) {
|
||||||
|
Local<String> topicString = String::NewFromUtf8(isolate, topic.data(), NewStringType::kNormal, topic.length()).ToLocalChecked();
|
||||||
|
|
||||||
|
topicsArray->Set(isolate->GetCurrentContext(), topicsArray->Length(), topicString).IsNothing();
|
||||||
|
});
|
||||||
|
|
||||||
|
/* Todo: we need to pass a copy here */
|
||||||
|
args.GetReturnValue().Set(topicsArray);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
template <bool SSL>
|
template <bool SSL>
|
||||||
static Local<Object> init(Isolate *isolate) {
|
static Local<Object> init(Isolate *isolate) {
|
||||||
Local<FunctionTemplate> wsTemplateLocal = FunctionTemplate::New(isolate);
|
Local<FunctionTemplate> wsTemplateLocal = FunctionTemplate::New(isolate);
|
||||||
@ -257,6 +277,9 @@ struct WebSocketWrapper {
|
|||||||
wsTemplateLocal->PrototypeTemplate()->Set(String::NewFromUtf8(isolate, "getRemoteAddressAsText", NewStringType::kNormal).ToLocalChecked(), FunctionTemplate::New(isolate, uWS_WebSocket_getRemoteAddressAsText<SSL>));
|
wsTemplateLocal->PrototypeTemplate()->Set(String::NewFromUtf8(isolate, "getRemoteAddressAsText", NewStringType::kNormal).ToLocalChecked(), FunctionTemplate::New(isolate, uWS_WebSocket_getRemoteAddressAsText<SSL>));
|
||||||
wsTemplateLocal->PrototypeTemplate()->Set(String::NewFromUtf8(isolate, "isSubscribed", NewStringType::kNormal).ToLocalChecked(), FunctionTemplate::New(isolate, uWS_WebSocket_isSubscribed<SSL>));
|
wsTemplateLocal->PrototypeTemplate()->Set(String::NewFromUtf8(isolate, "isSubscribed", NewStringType::kNormal).ToLocalChecked(), FunctionTemplate::New(isolate, uWS_WebSocket_isSubscribed<SSL>));
|
||||||
|
|
||||||
|
/* This one does not exist in C++ */
|
||||||
|
wsTemplateLocal->PrototypeTemplate()->Set(String::NewFromUtf8(isolate, "getTopics", NewStringType::kNormal).ToLocalChecked(), FunctionTemplate::New(isolate, uWS_WebSocket_getTopics<SSL>));
|
||||||
|
|
||||||
/* Create the template */
|
/* Create the template */
|
||||||
Local<Object> wsObjectLocal = wsTemplateLocal->GetFunction(isolate->GetCurrentContext()).ToLocalChecked()->NewInstance(isolate->GetCurrentContext()).ToLocalChecked();
|
Local<Object> wsObjectLocal = wsTemplateLocal->GetFunction(isolate->GetCurrentContext()).ToLocalChecked()->NewInstance(isolate->GetCurrentContext()).ToLocalChecked();
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user