Make all websocket handlers move-only

This commit is contained in:
Alex Hultman
2019-01-23 12:19:44 +01:00
parent 02a6271980
commit 91925ccc37
2 changed files with 16 additions and 14 deletions
+11 -11
View File
@@ -92,12 +92,12 @@ public:
CompressOptions compression = DISABLED; CompressOptions compression = DISABLED;
int maxPayloadLength = 16 * 1024; int maxPayloadLength = 16 * 1024;
int idleTimeout = 120; int idleTimeout = 120;
std::function<void(uWS::WebSocket<SSL, true> *, HttpRequest *)> open = nullptr; fu2::unique_function<void(uWS::WebSocket<SSL, true> *, HttpRequest *)> open = nullptr;
std::function<void(uWS::WebSocket<SSL, true> *, std::string_view, uWS::OpCode)> message = nullptr; fu2::unique_function<void(uWS::WebSocket<SSL, true> *, std::string_view, uWS::OpCode)> message = nullptr;
std::function<void(uWS::WebSocket<SSL, true> *)> drain = nullptr; fu2::unique_function<void(uWS::WebSocket<SSL, true> *)> drain = nullptr;
std::function<void(uWS::WebSocket<SSL, true> *)> ping = nullptr; fu2::unique_function<void(uWS::WebSocket<SSL, true> *)> ping = nullptr;
std::function<void(uWS::WebSocket<SSL, true> *)> pong = nullptr; fu2::unique_function<void(uWS::WebSocket<SSL, true> *)> pong = nullptr;
std::function<void(uWS::WebSocket<SSL, true> *, int, std::string_view)> close = nullptr; fu2::unique_function<void(uWS::WebSocket<SSL, true> *, int, std::string_view)> close = nullptr;
}; };
template <class UserData> template <class UserData>
@@ -126,19 +126,19 @@ public:
} }
/* Copy all handlers */ /* Copy all handlers */
webSocketContext->getExt()->messageHandler = behavior.message; webSocketContext->getExt()->messageHandler = std::move(behavior.message);
webSocketContext->getExt()->drainHandler = behavior.drain; webSocketContext->getExt()->drainHandler = std::move(behavior.drain);
webSocketContext->getExt()->closeHandler = behavior.close; webSocketContext->getExt()->closeHandler = std::move(behavior.close);
/* Copy settings */ /* Copy settings */
webSocketContext->getExt()->maxPayloadLength = behavior.maxPayloadLength; webSocketContext->getExt()->maxPayloadLength = behavior.maxPayloadLength;
webSocketContext->getExt()->idleTimeout = behavior.idleTimeout; webSocketContext->getExt()->idleTimeout = behavior.idleTimeout;
return std::move(get(pattern, [webSocketContext, this, behavior](auto *res, auto *req) { return std::move(get(pattern, [webSocketContext, this, behavior = std::move(behavior)](auto *res, auto *req) mutable {
/* If we have this header set, it's a websocket */ /* If we have this header set, it's a websocket */
std::string_view secWebSocketKey = req->getHeader("sec-websocket-key"); std::string_view secWebSocketKey = req->getHeader("sec-websocket-key");
if (secWebSocketKey.length()) { if (secWebSocketKey.length()) {
// note: OpenSSL can be used here to speed this up somewhat /* Note: OpenSSL can be used here to speed this up somewhat */
char secWebSocketAccept[29] = {}; char secWebSocketAccept[29] = {};
WebSocketHandshake::generate(secWebSocketKey.data(), secWebSocketAccept); WebSocketHandshake::generate(secWebSocketKey.data(), secWebSocketAccept);
+5 -3
View File
@@ -23,6 +23,8 @@
#include "WebSocketProtocol.h" #include "WebSocketProtocol.h"
#include "f2/function2.hpp"
namespace uWS { namespace uWS {
template <bool, bool> struct WebSocket; template <bool, bool> struct WebSocket;
@@ -32,9 +34,9 @@ template <bool, bool> struct WebSocket;
template <bool SSL> template <bool SSL>
struct WebSocketContextData { struct WebSocketContextData {
/* The callbacks for this context */ /* The callbacks for this context */
std::function<void(WebSocket<SSL, true> *, std::string_view, uWS::OpCode)> messageHandler = nullptr; fu2::unique_function<void(WebSocket<SSL, true> *, std::string_view, uWS::OpCode)> messageHandler = nullptr;
std::function<void(WebSocket<SSL, true> *)> drainHandler = nullptr; fu2::unique_function<void(WebSocket<SSL, true> *)> drainHandler = nullptr;
std::function<void(WebSocket<SSL, true> *, int, std::string_view)> closeHandler = nullptr; fu2::unique_function<void(WebSocket<SSL, true> *, int, std::string_view)> closeHandler = nullptr;
/* Settings for this context */ /* Settings for this context */
size_t maxPayloadLength = 0; size_t maxPayloadLength = 0;