unique_ptr for sockets

This commit is contained in:
Benjamin Sergeant
2020-03-24 12:40:58 -07:00
parent 9f818c7acf
commit 179e17895d
25 changed files with 54 additions and 51 deletions

View File

@ -9,7 +9,6 @@
#include <cstring>
#include <iomanip>
#include <iostream>
#include <ixwebsocket/IXSocket.h>
#include <ixwebsocket/IXSocketFactory.h>
#include <ixwebsocket/IXSocketTLSOptions.h>
#include <sstream>

View File

@ -11,10 +11,10 @@
#include <memory>
#include <string>
#include <ixwebsocket/IXSocket.h>
namespace ix
{
class Socket;
class RedisClient
{
public:
@ -57,7 +57,7 @@ namespace ix
private:
std::string writeString(const std::string& str);
std::shared_ptr<Socket> _socket;
std::unique_ptr<Socket> _socket;
std::atomic<bool> _stop;
};
} // namespace ix

View File

@ -43,7 +43,7 @@ namespace ix
SocketServer::stop();
}
void RedisServer::handleConnection(std::shared_ptr<Socket> socket,
void RedisServer::handleConnection(std::unique_ptr<Socket> socket,
std::shared_ptr<ConnectionState> connectionState)
{
_connectedClientsCount++;
@ -102,13 +102,13 @@ namespace ix
_connectedClientsCount--;
}
void RedisServer::cleanupSubscribers(std::shared_ptr<Socket> socket)
void RedisServer::cleanupSubscribers(std::unique_ptr<Socket>& socket)
{
std::lock_guard<std::mutex> lock(_mutex);
for (auto&& it : _subscribers)
{
it.second.erase(socket);
it.second.erase(socket.get());
}
for (auto it : _subscribers)
@ -145,7 +145,7 @@ namespace ix
}
bool RedisServer::parseRequest(
std::shared_ptr<Socket> socket,
std::unique_ptr<Socket>& socket,
std::vector<std::string>& tokens)
{
// Parse first line
@ -191,7 +191,7 @@ namespace ix
}
bool RedisServer::handleCommand(
std::shared_ptr<Socket> socket,
std::unique_ptr<Socket>& socket,
const std::vector<std::string>& tokens)
{
if (tokens.size() != 1) return false;
@ -230,7 +230,7 @@ namespace ix
}
bool RedisServer::handleSubscribe(
std::shared_ptr<Socket> socket,
std::unique_ptr<Socket>& socket,
const std::vector<std::string>& tokens)
{
if (tokens.size() != 2) return false;
@ -245,13 +245,13 @@ namespace ix
socket->writeBytes(":1\r\n", cb);
std::lock_guard<std::mutex> lock(_mutex);
_subscribers[channel].insert(socket);
_subscribers[channel].insert(socket.get());
return true;
}
bool RedisServer::handlePublish(
std::shared_ptr<Socket> socket,
std::unique_ptr<Socket>& socket,
const std::vector<std::string>& tokens)
{
if (tokens.size() != 3) return false;

View File

@ -37,13 +37,13 @@ namespace ix
// Subscribers
// We could store connection states in there, to add better debugging
// since a connection state has a readable ID
std::map<std::string, std::set<std::shared_ptr<Socket>>> _subscribers;
std::map<std::string, std::set<Socket*>> _subscribers;
std::mutex _mutex;
std::atomic<bool> _stopHandlingConnections;
// Methods
virtual void handleConnection(std::shared_ptr<Socket>,
virtual void handleConnection(std::unique_ptr<Socket>,
std::shared_ptr<ConnectionState> connectionState) final;
virtual size_t getConnectedClientsCount() final;
@ -51,18 +51,18 @@ namespace ix
std::string writeString(const std::string& str);
bool parseRequest(
std::shared_ptr<Socket> socket,
std::unique_ptr<Socket>& socket,
std::vector<std::string>& tokens);
bool handlePublish(std::shared_ptr<Socket> socket,
bool handlePublish(std::unique_ptr<Socket>& socket,
const std::vector<std::string>& tokens);
bool handleSubscribe(std::shared_ptr<Socket> socket,
bool handleSubscribe(std::unique_ptr<Socket>& socket,
const std::vector<std::string>& tokens);
bool handleCommand(std::shared_ptr<Socket> socket,
bool handleCommand(std::unique_ptr<Socket>& socket,
const std::vector<std::string>& tokens);
void cleanupSubscribers(std::shared_ptr<Socket> socket);
void cleanupSubscribers(std::unique_ptr<Socket>& socket);
};
} // namespace ix