From d43e9fc265f30662811b81a3cc149b509c1172e8 Mon Sep 17 00:00:00 2001 From: Alex Hultman Date: Sun, 6 May 2018 18:29:33 +0200 Subject: [PATCH] Wrap Hub and Http --- 15.pro | 11 +++++++++-- Http.cpp | 2 ++ Http.h | 60 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Hub.cpp | 2 ++ Hub.h | 50 ++++++++++++++++++++++++++++++++++++++++++++++ main.cpp | 47 ++++---------------------------------------- 6 files changed, 127 insertions(+), 45 deletions(-) create mode 100644 Http.cpp create mode 100644 Http.h create mode 100644 Hub.cpp create mode 100644 Hub.h diff --git a/15.pro b/15.pro index 371b6da..0a8e482 100644 --- a/15.pro +++ b/15.pro @@ -9,7 +9,14 @@ SOURCES += \ uSockets/src/libusockets.c \ uSockets/src/socket.c \ uSockets/src/backends/epoll.c \ - uSockets/src/backends/libuv.c + uSockets/src/backends/libuv.c \ + Hub.cpp \ + Http.cpp INCLUDEPATH += uSockets/src -QMAKE_CXXFLAGS += -std=c++14 +QMAKE_CXXFLAGS += -fsanitize=address -std=c++14 +LIBS += -lasan + +HEADERS += \ + Hub.h \ + Http.h diff --git a/Http.cpp b/Http.cpp new file mode 100644 index 0000000..590e691 --- /dev/null +++ b/Http.cpp @@ -0,0 +1,2 @@ +#include "Http.h" + diff --git a/Http.h b/Http.h new file mode 100644 index 0000000..424cb46 --- /dev/null +++ b/Http.h @@ -0,0 +1,60 @@ +#ifndef HTTP_H +#define HTTP_H + +#include "libusockets.h" + +struct HttpRequest { + +}; + +struct HttpResponse { + + void write() { + + } + +}; + +#include + +// basically a HttpServer +struct HttpContext { + us_socket_context *context; + struct Data { + + } *data; + + static void httpBegin(us_socket *s) { + // yep + std::cout << "Accepted a connection" << std::endl; + } + + static void httpData(us_socket *s, void *data, int size) { + // yep + std::cout << "got data" << std::endl; + + //us_loop_userdata(s->context->loop) + + // call into Hub::Data::onHttpRequest + // us_loop_userdata(s->context->loop) = Hub::Data + } + + static void httpEnd(us_socket *s) { + // yep + std::cout << "Disconnection of a connection" << std::endl; + } + + HttpContext(us_loop *loop) { + context = us_create_socket_context(loop, sizeof(us_socket_context)); + + context->on_accepted = httpBegin; + context->on_data = httpData; + context->on_end = httpEnd; + } + + void listen(const char *host, int port, int options) { + us_socket_context_listen(context, host, port, options, sizeof(us_socket)); + } +}; + +#endif // HTTP_H diff --git a/Hub.cpp b/Hub.cpp new file mode 100644 index 0000000..dd97762 --- /dev/null +++ b/Hub.cpp @@ -0,0 +1,2 @@ +#include "Hub.h" + diff --git a/Hub.h b/Hub.h new file mode 100644 index 0000000..0f63b78 --- /dev/null +++ b/Hub.h @@ -0,0 +1,50 @@ +#ifndef HUB_H +#define HUB_H + +#include "libusockets.h" +#include +#include + +#include "Http.h" + +struct Hub { + us_loop *loop; + + static void wakeupCb(us_loop *loop) { + + } + + struct Data { + Data(us_loop *loop) : httpContext(loop) { + + } + + HttpContext httpContext; + std::function onHttpRequest; + } *data; + + void onHttpRequest(decltype(Data::onHttpRequest) handler) { + data->onHttpRequest = handler; + } + + Hub() { + loop = us_create_loop(wakeupCb, sizeof(Data)); + new (data = (Data *) us_loop_userdata(loop)) Data(loop); + } + + // should we expose us_listen_socket here? + // us_listen_socket_close(listen_socket) is easy so why not? + void listen(const char *host, int port, int options) { + data->httpContext.listen(host, port, options); + } + + void run() { + us_loop_run(loop); + } + + ~Hub() { + // us_loop_delete(loop); + } +}; + +#endif // HUB_H diff --git a/main.cpp b/main.cpp index 710ff6b..c32bb1a 100644 --- a/main.cpp +++ b/main.cpp @@ -1,45 +1,5 @@ -#include "libusockets.h" - -#include -#include -using namespace std; - -struct HttpRequest { - -}; - -struct HttpResponse { - - void write() { - - } - -}; - -struct Hub { - us_loop *loop; - - static void wakeup_cb(us_loop *loop) { - - } - - struct Data { - std::function onHttpRequest; - } *data; - - void onHttpRequest(decltype(Data::onHttpRequest) handler) { - data->onHttpRequest = handler; - } - - Hub() { - loop = us_create_loop(wakeup_cb, sizeof(Data)); - data = (Data *) us_loop_userdata(loop); - } - - ~Hub() { - // us_loop_delete(loop); - } -}; +// uWS.h +#include "Hub.h" int main() { @@ -55,5 +15,6 @@ int main() { }); - + h.listen(nullptr, 3000, 0); + h.run(); }