diff --git a/misc/main.cpp b/misc/main.cpp index fddbca6..009efb3 100644 --- a/misc/main.cpp +++ b/misc/main.cpp @@ -6,6 +6,7 @@ int main(int argc, char **argv) { struct PerSocketData { + char pad[256]; int hello; }; @@ -14,7 +15,7 @@ int main(int argc, char **argv) { const char *passphrase; const char *dh_params_file_name;*/ - uWS::App(/*SSLApp({ + uWS::/*SSL*/App(/*{ "/home/alexhultman/key.pem", "/home/alexhultman/cert.pem", "1234" @@ -28,11 +29,13 @@ int main(int argc, char **argv) { .open = [](auto *ws, auto *req) { std::cout << "WebSocket connected" << std::endl; /* Access per socket data */ - /*PerSocketData *perSocketData = *///ws->getUserData(); - /*perSocketData->hello = 13;*/ + PerSocketData *perSocketData = (PerSocketData *) ws->getUserData(); + perSocketData->hello = 13; }, .message = [](auto *ws, std::string_view message, uWS::OpCode opCode) { ws->send(message, opCode, true); + PerSocketData *perSocketData = (PerSocketData *) ws->getUserData(); + std::cout << "OK per socket data: " << (perSocketData->hello == 13) << std::endl; }, .drain = [](auto *ws) { std::cout << "Drainage: " << ws->getBufferedAmount() << std::endl; @@ -46,8 +49,8 @@ int main(int argc, char **argv) { .close = [](auto *ws, int code, std::string_view message) { std::cout << "WebSocket disconnected: " << code << "[" << message << "]" << std::endl; /* Access per socket data */ - //PerSocketData *perSocketData = ws->getUserData(); - //std::cout << "OK per socket data: " << (perSocketData->hello == 13) << std::endl; + PerSocketData *perSocketData = (PerSocketData *) ws->getUserData(); + std::cout << "OK per socket data: " << (perSocketData->hello == 13) << std::endl; } }).listen(9001, [](auto *token) { if (token) { diff --git a/src/App.h b/src/App.h index 9760e1f..ea959bc 100644 --- a/src/App.h +++ b/src/App.h @@ -149,7 +149,7 @@ public: /* Adopting a socket invalidates it, do not rely on it directly to carry any data */ WebSocket *webSocket = (WebSocket *) StaticDispatch::static_dispatch(us_ssl_socket_context_adopt_socket, us_socket_context_adopt_socket)( - (typename StaticDispatch::SOCKET_CONTEXT_TYPE *) webSocketContext, (typename StaticDispatch::SOCKET_TYPE *) res, sizeof(WebSocketData)); + (typename StaticDispatch::SOCKET_CONTEXT_TYPE *) webSocketContext, (typename StaticDispatch::SOCKET_TYPE *) res, sizeof(WebSocketData) + sizeof(UserData)); /* Update corked socket in case we got a new one (assuming we always are corked in handlers). */ webSocket->cork(); diff --git a/src/WebSocket.h b/src/WebSocket.h index 14e1f2d..b5a2e2a 100644 --- a/src/WebSocket.h +++ b/src/WebSocket.h @@ -40,11 +40,10 @@ private: public: /* Returns pointer to the per socket user data */ - //template void *getUserData() { WebSocketData *webSocketData = (WebSocketData *) static_dispatch(us_ssl_socket_ext, us_socket_ext)((SOCKET_TYPE *) this); - - return nullptr; + /* We just have it overallocated by sizeof type */ + return (webSocketData + 1); } /* See AsyncSocket */