Fix up getUserData

This commit is contained in:
Alex Hultman
2018-12-26 14:35:09 +01:00
parent fb95abad71
commit de53d12bfe
3 changed files with 11 additions and 9 deletions
+8 -5
View File
@@ -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<PerSocketData>();
//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) {
+1 -1
View File
@@ -149,7 +149,7 @@ public:
/* Adopting a socket invalidates it, do not rely on it directly to carry any data */
WebSocket<SSL, true> *webSocket = (WebSocket<SSL, true> *) StaticDispatch<SSL>::static_dispatch(us_ssl_socket_context_adopt_socket, us_socket_context_adopt_socket)(
(typename StaticDispatch<SSL>::SOCKET_CONTEXT_TYPE *) webSocketContext, (typename StaticDispatch<SSL>::SOCKET_TYPE *) res, sizeof(WebSocketData));
(typename StaticDispatch<SSL>::SOCKET_CONTEXT_TYPE *) webSocketContext, (typename StaticDispatch<SSL>::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();
+2 -3
View File
@@ -40,11 +40,10 @@ private:
public:
/* Returns pointer to the per socket user data */
//template <typename K>
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 */