New interface a la designated initializers
This commit is contained in:
+14
-18
@@ -5,32 +5,28 @@
|
||||
|
||||
int main(int argc, char **argv) {
|
||||
|
||||
// do websockets here
|
||||
|
||||
/*
|
||||
uWS::App().ws("/*", {
|
||||
.open = []() {
|
||||
// here we have it
|
||||
uWS::App().get("/hello", [](auto *res, auto *req) {
|
||||
res->end("Hello HTTP!");
|
||||
}).ws("/*", {
|
||||
/*.open = */[](auto *ws, auto *req) {
|
||||
|
||||
},
|
||||
.message = []() {
|
||||
/*.message = */[](auto *ws, std::string_view message, uWS::OpCode opCode) {
|
||||
ws->send(message, opCode);
|
||||
}
|
||||
/*.drain = []() {
|
||||
|
||||
},
|
||||
.drain = []() {
|
||||
.ping = []() {
|
||||
|
||||
},
|
||||
.pong = []() {
|
||||
|
||||
},
|
||||
.close = []() {
|
||||
|
||||
}
|
||||
}).listen().run();*/
|
||||
|
||||
|
||||
|
||||
uWS::App().get("/hello", [](auto *res, auto *req) {
|
||||
res->end("Hello HTTP!");
|
||||
}).ws("/*", [](auto *ws, auto *req) {
|
||||
std::cout << "WebSocket conntected to URL: " << req->getUrl() << std::endl;
|
||||
}, [](auto *ws, std::string_view message, uWS::OpCode opCode) {
|
||||
ws->send(message, opCode);
|
||||
}*/
|
||||
}).listen(9001, [](auto *token) {
|
||||
if (token) {
|
||||
std::cout << "Listening on port " << 3000 << std::endl;
|
||||
|
||||
@@ -28,6 +28,7 @@
|
||||
#include "libwshandshake.hpp"
|
||||
|
||||
namespace uWS {
|
||||
|
||||
template <bool SSL>
|
||||
struct TemplatedApp {
|
||||
private:
|
||||
@@ -51,14 +52,19 @@ public:
|
||||
// construct the websocket cintext? no! on demand!
|
||||
}
|
||||
|
||||
// this method creates a new websocket context and attaches it to a path
|
||||
TemplatedApp &ws(std::string pattern, std::function<void(void *, HttpRequest *)> connectHandler, std::function<void(uWS::WebSocket<SSL, true> *, std::string_view, uWS::OpCode)> messageHandler) {
|
||||
struct WebSocketBehavior {
|
||||
std::function<void(void *, HttpRequest *)> open = nullptr;
|
||||
std::function<void(uWS::WebSocket<false, true> *, std::string_view, uWS::OpCode)> message = nullptr;
|
||||
};
|
||||
|
||||
TemplatedApp &ws(std::string pattern, WebSocketBehavior &&behavior) {
|
||||
|
||||
// init the websocket context here!
|
||||
uWS::WebSocketContext<SSL, true> *webSocketContext = uWS::WebSocketContext<SSL, true>::create(uWS::Loop::defaultLoop(), (typename StaticDispatch<SSL>::SOCKET_CONTEXT_TYPE *) httpContext);
|
||||
|
||||
webSocketContext->getExt()->messageHandler = messageHandler;
|
||||
webSocketContext->getExt()->messageHandler = behavior.message;
|
||||
|
||||
return get(pattern, [webSocketContext, this, connectHandler](auto *res, auto *req) {
|
||||
return get(pattern, [webSocketContext, this, behavior](auto *res, auto *req) {
|
||||
|
||||
std::string_view secWebSocketKey = req->getHeader("sec-websocket-key");
|
||||
if (secWebSocketKey.length()) {
|
||||
@@ -91,7 +97,7 @@ public:
|
||||
);
|
||||
|
||||
// we should hand the new socket to the handler
|
||||
connectHandler(webSocket, req);
|
||||
behavior.open(webSocket, req);
|
||||
|
||||
} else {
|
||||
|
||||
@@ -105,6 +111,8 @@ public:
|
||||
|
||||
|
||||
});
|
||||
|
||||
return *this;
|
||||
}
|
||||
|
||||
TemplatedApp &get(std::string pattern, std::function<void(HttpResponse<SSL> *, HttpRequest *)> handler) {
|
||||
|
||||
Reference in New Issue
Block a user