From de66a87a7cd852ca3016095abf2a9d9cddaa6c2c Mon Sep 17 00:00:00 2001 From: Benjamin Sergeant Date: Tue, 1 Jan 2019 13:53:13 -0800 Subject: [PATCH] use shared_ptr --- examples/echo_server/echo_server.cpp | 8 ++++---- ixwebsocket/IXWebSocketServer.cpp | 12 ++++++------ ixwebsocket/IXWebSocketServer.h | 7 ++++--- 3 files changed, 14 insertions(+), 13 deletions(-) diff --git a/examples/echo_server/echo_server.cpp b/examples/echo_server/echo_server.cpp index 7ef94e92..40a6ffe8 100644 --- a/examples/echo_server/echo_server.cpp +++ b/examples/echo_server/echo_server.cpp @@ -21,10 +21,10 @@ int main(int argc, char** argv) ix::WebSocketServer server(port); server.setOnConnectionCallback( - [&server](ix::WebSocket& webSocket) + [&server](std::shared_ptr webSocket) { - webSocket.setOnMessageCallback( - [&webSocket, &server](ix::WebSocketMessageType messageType, + webSocket->setOnMessageCallback( + [webSocket, &server](ix::WebSocketMessageType messageType, const std::string& str, size_t wireSize, const ix::WebSocketErrorInfo& error, @@ -49,7 +49,7 @@ int main(int argc, char** argv) for (auto&& client : server.getClients()) { - if (client != &webSocket) + if (client != webSocket) { client->send(str); } diff --git a/ixwebsocket/IXWebSocketServer.cpp b/ixwebsocket/IXWebSocketServer.cpp index 2a900aa1..0f0ba626 100644 --- a/ixwebsocket/IXWebSocketServer.cpp +++ b/ixwebsocket/IXWebSocketServer.cpp @@ -132,13 +132,13 @@ namespace ix // void WebSocketServer::handleConnection(int fd) { - ix::WebSocket webSocket; + std::shared_ptr webSocket(new WebSocket); _onConnectionCallback(webSocket); - _clients.insert(&webSocket); + _clients.insert(webSocket); - webSocket.start(); - auto status = webSocket.connectToSocket(fd); + webSocket->start(); + auto status = webSocket->connectToSocket(fd); if (!status.success) { std::cerr << "WebSocketServer::handleConnection() error: " @@ -148,13 +148,13 @@ namespace ix } // We can probably do better than this busy loop, with a condition variable. - while (webSocket.isConnected()) + while (webSocket->isConnected()) { std::chrono::duration wait(10); std::this_thread::sleep_for(wait); } - _clients.erase(&webSocket); + _clients.erase(webSocket); std::cerr << "WebSocketServer::handleConnection() done" << std::endl; } diff --git a/ixwebsocket/IXWebSocketServer.h b/ixwebsocket/IXWebSocketServer.h index e84eb3dc..182b797e 100644 --- a/ixwebsocket/IXWebSocketServer.h +++ b/ixwebsocket/IXWebSocketServer.h @@ -12,12 +12,13 @@ #include #include #include +#include #include "IXWebSocket.h" namespace ix { - using OnConnectionCallback = std::function; + using OnConnectionCallback = std::function)>; class WebSocketServer { public: @@ -30,7 +31,7 @@ namespace ix void run(); // FIXME: need mutex - std::set getClients() { return _clients; } + std::set> getClients() { return _clients; } private: void handleConnection(int fd); @@ -43,6 +44,6 @@ namespace ix // socket for accepting connections int _serverFd; - std::set _clients; + std::set> _clients; }; }