aboutsummaryrefslogtreecommitdiffhomepage
path: root/node_modules/uws/src/Hub.h
diff options
context:
space:
mode:
Diffstat (limited to 'node_modules/uws/src/Hub.h')
-rw-r--r--node_modules/uws/src/Hub.h97
1 files changed, 97 insertions, 0 deletions
diff --git a/node_modules/uws/src/Hub.h b/node_modules/uws/src/Hub.h
new file mode 100644
index 0000000..f879579
--- /dev/null
+++ b/node_modules/uws/src/Hub.h
@@ -0,0 +1,97 @@
+#ifndef HUB_UWS_H
+#define HUB_UWS_H
+
+#include "Group.h"
+#include "Node.h"
+#include <string>
+#include <zlib.h>
+#include <mutex>
+#include <map>
+
+namespace uWS {
+
+struct WIN32_EXPORT Hub : private uS::Node, public Group<SERVER>, public Group<CLIENT> {
+protected:
+ struct ConnectionData {
+ std::string path;
+ void *user;
+ Group<CLIENT> *group;
+ };
+
+ z_stream inflationStream = {};
+ char *inflationBuffer;
+ char *inflate(char *data, size_t &length, size_t maxPayload);
+ std::string dynamicInflationBuffer;
+ static const int LARGE_BUFFER_SIZE = 300 * 1024;
+
+ static void onServerAccept(uS::Socket *s);
+ static void onClientConnection(uS::Socket *s, bool error);
+
+public:
+ template <bool isServer>
+ Group<isServer> *createGroup(int extensionOptions = 0, unsigned int maxPayload = 16777216) {
+ return new Group<isServer>(extensionOptions, maxPayload, this, nodeData);
+ }
+
+ template <bool isServer>
+ Group<isServer> &getDefaultGroup() {
+ return static_cast<Group<isServer> &>(*this);
+ }
+
+ bool listen(int port, uS::TLS::Context sslContext = nullptr, int options = 0, Group<SERVER> *eh = nullptr);
+ bool listen(const char *host, int port, uS::TLS::Context sslContext = nullptr, int options = 0, Group<SERVER> *eh = nullptr);
+ void connect(std::string uri, void *user = nullptr, std::map<std::string, std::string> extraHeaders = {}, int timeoutMs = 5000, Group<CLIENT> *eh = nullptr);
+ void upgrade(uv_os_sock_t fd, const char *secKey, SSL *ssl, const char *extensions, size_t extensionsLength, const char *subprotocol, size_t subprotocolLength, Group<SERVER> *serverGroup = nullptr);
+
+ Hub(int extensionOptions = 0, bool useDefaultLoop = false, unsigned int maxPayload = 16777216) : uS::Node(LARGE_BUFFER_SIZE, WebSocketProtocol<SERVER, WebSocket<SERVER>>::CONSUME_PRE_PADDING, WebSocketProtocol<SERVER, WebSocket<SERVER>>::CONSUME_POST_PADDING, useDefaultLoop),
+ Group<SERVER>(extensionOptions, maxPayload, this, nodeData), Group<CLIENT>(0, maxPayload, this, nodeData) {
+ inflateInit2(&inflationStream, -15);
+ inflationBuffer = new char[LARGE_BUFFER_SIZE];
+
+#ifdef UWS_THREADSAFE
+ getLoop()->preCbData = nodeData;
+ getLoop()->preCb = [](void *nodeData) {
+ static_cast<uS::NodeData *>(nodeData)->asyncMutex->lock();
+ };
+
+ getLoop()->postCbData = nodeData;
+ getLoop()->postCb = [](void *nodeData) {
+ static_cast<uS::NodeData *>(nodeData)->asyncMutex->unlock();
+ };
+#endif
+ }
+
+ ~Hub() {
+ inflateEnd(&inflationStream);
+ delete [] inflationBuffer;
+ }
+
+ using uS::Node::run;
+ using uS::Node::getLoop;
+ using Group<SERVER>::onConnection;
+ using Group<CLIENT>::onConnection;
+ using Group<SERVER>::onTransfer;
+ using Group<SERVER>::onMessage;
+ using Group<CLIENT>::onMessage;
+ using Group<SERVER>::onDisconnection;
+ using Group<CLIENT>::onDisconnection;
+ using Group<SERVER>::onPing;
+ using Group<CLIENT>::onPing;
+ using Group<SERVER>::onPong;
+ using Group<CLIENT>::onPong;
+ using Group<SERVER>::onError;
+ using Group<CLIENT>::onError;
+ using Group<SERVER>::onHttpRequest;
+ using Group<SERVER>::onHttpData;
+ using Group<SERVER>::onHttpConnection;
+ using Group<SERVER>::onHttpDisconnection;
+ using Group<SERVER>::onHttpUpgrade;
+ using Group<SERVER>::onCancelledHttpRequest;
+
+ friend struct WebSocket<SERVER>;
+ friend struct WebSocket<CLIENT>;
+};
+
+}
+
+#endif // HUB_UWS_H