Begin WebSocketWrapper nice struct

This commit is contained in:
Alex Hultman 2019-01-14 11:54:37 +01:00
parent a6b897cdbc
commit 31e7463c9b
3 changed files with 37 additions and 37 deletions

View File

@ -66,7 +66,7 @@ void uWS_App_ws(const FunctionCallbackInfo<Value> &args) {
HandleScope hs(isolate);
/* Create a new websocket object */
Local<Object> wsObject = getWsInstance<APP>();
Local<Object> wsObject = WebSocketWrapper::getWsInstance<APP>();
wsObject->SetAlignedPointerInInternalField(0, ws);
/* Attach a new V8 object with pointer to us, to us */

View File

@ -1,47 +1,47 @@
// ws.getBufferedAmount()
// ws.close(lalala)
// ws.?
/* Helping QtCreator */
#include "App.h"
#include <v8.h>
#include "Utilities.h"
using namespace v8;
// also wrap all of this in some common struct
Persistent<Object> wsTemplate[2];
struct WebSocketWrapper {
static Persistent<Object> wsTemplate[2];
/* WebSocket send */
// ws.getBufferedAmount()
// ws.close(lalala)
// ws.?
template <bool SSL>
void uWS_WebSocket_send(const FunctionCallbackInfo<Value> &args) {
NativeString nativeString(args.GetIsolate(), args[0]);
template <bool SSL>
static void uWS_WebSocket_send(const FunctionCallbackInfo<Value> &args) {
NativeString nativeString(args.GetIsolate(), args[0]);
bool isBinary = args[1]->Int32Value();
bool isBinary = args[1]->Int32Value();
bool ok = ((uWS::WebSocket<SSL, true> *) args.Holder()->GetAlignedPointerFromInternalField(0))->send(
std::string_view(nativeString.getData(), nativeString.getLength()), isBinary ? uWS::OpCode::BINARY : uWS::OpCode::TEXT
);
bool ok = ((uWS::WebSocket<SSL, true> *) args.Holder()->GetAlignedPointerFromInternalField(0))->send(
std::string_view(nativeString.getData(), nativeString.getLength()), isBinary ? uWS::OpCode::BINARY : uWS::OpCode::TEXT
);
args.GetReturnValue().Set(Boolean::New(isolate, ok));
}
template <bool SSL>
void initWsTemplate() {
Local<FunctionTemplate> wsTemplateLocal = FunctionTemplate::New(isolate);
if (SSL) {
wsTemplateLocal->SetClassName(String::NewFromUtf8(isolate, "uWS.SSLWebSocket"));
} else {
wsTemplateLocal->SetClassName(String::NewFromUtf8(isolate, "uWS.WebSocket"));
args.GetReturnValue().Set(Boolean::New(isolate, ok));
}
wsTemplateLocal->InstanceTemplate()->SetInternalFieldCount(1);
wsTemplateLocal->PrototypeTemplate()->Set(String::NewFromUtf8(isolate, "send"), FunctionTemplate::New(isolate, uWS_WebSocket_send<SSL>));
Local<Object> wsObjectLocal = wsTemplateLocal->GetFunction()->NewInstance(isolate->GetCurrentContext()).ToLocalChecked();
wsTemplate[SSL].Reset(isolate, wsObjectLocal);
}
template <bool SSL>
static void initWsTemplate() {
Local<FunctionTemplate> wsTemplateLocal = FunctionTemplate::New(isolate);
if (SSL) {
wsTemplateLocal->SetClassName(String::NewFromUtf8(isolate, "uWS.SSLWebSocket"));
} else {
wsTemplateLocal->SetClassName(String::NewFromUtf8(isolate, "uWS.WebSocket"));
}
wsTemplateLocal->InstanceTemplate()->SetInternalFieldCount(1);
wsTemplateLocal->PrototypeTemplate()->Set(String::NewFromUtf8(isolate, "send"), FunctionTemplate::New(isolate, uWS_WebSocket_send<SSL>));
template <class APP>
Local<Object> getWsInstance() {
return Local<Object>::New(isolate, wsTemplate[std::is_same<APP, uWS::SSLApp>::value])->Clone();
}
Local<Object> wsObjectLocal = wsTemplateLocal->GetFunction()->NewInstance(isolate->GetCurrentContext()).ToLocalChecked();
wsTemplate[SSL].Reset(isolate, wsObjectLocal);
}
template <class APP>
static Local<Object> getWsInstance() {
return Local<Object>::New(isolate, wsTemplate[std::is_same<APP, uWS::SSLApp>::value])->Clone();
}
};
Persistent<Object> WebSocketWrapper::wsTemplate[2];

View File

@ -76,8 +76,8 @@ void Main(Local<Object> exports) {
// these inits should probably happen elsewhere (in their respective struct's constructor)?
/* The template for websockets */
initWsTemplate<0>();
initWsTemplate<1>();
WebSocketWrapper::initWsTemplate<0>();
WebSocketWrapper::initWsTemplate<1>();
/* Initialize SSL and non-SSL templates */
initResTemplate<0>();