aboutsummaryrefslogtreecommitdiff
path: root/include
diff options
context:
space:
mode:
authordec05eba <0xdec05eba@gmail.com>2018-10-14 06:05:09 +0200
committerdec05eba <0xdec05eba@gmail.com>2018-10-14 06:05:12 +0200
commitefc7311893b0fb25129eb2b715992ba2ac43d65c (patch)
treed623dfe299f3ae1afec8238be09b5cd0542af7e1 /include
parent55405854c27417ec33797c9e2b438ce17ac70bf2 (diff)
Removed user from subscriptions on disconnect
Diffstat (limited to 'include')
-rw-r--r--include/sibs/BootstrapNode.hpp2
-rw-r--r--include/sibs/DirectConnection.hpp4
2 files changed, 6 insertions, 0 deletions
diff --git a/include/sibs/BootstrapNode.hpp b/include/sibs/BootstrapNode.hpp
index 48e527c..ab3d6b3 100644
--- a/include/sibs/BootstrapNode.hpp
+++ b/include/sibs/BootstrapNode.hpp
@@ -4,6 +4,7 @@
#include "IpAddress.hpp"
#include "PubsubKey.hpp"
#include <vector>
+#include <mutex>
namespace sibs
{
@@ -28,5 +29,6 @@ namespace sibs
int socket;
std::thread acceptConnectionsThread;
PubsubKeyMap<std::vector<std::shared_ptr<DirectConnectionPeer>>> subscribedPeers;
+ std::mutex subscribedPeersMutex;
};
}
diff --git a/include/sibs/DirectConnection.hpp b/include/sibs/DirectConnection.hpp
index 4b5c67f..8e3865f 100644
--- a/include/sibs/DirectConnection.hpp
+++ b/include/sibs/DirectConnection.hpp
@@ -31,6 +31,7 @@ namespace sibs
using PubSubConnectCallback = std::function<void(std::shared_ptr<DirectConnectionPeer> peer, PubSubResult result, const std::string &resultStr)>;
using PubSubReceiveDataCallback = std::function<void(std::shared_ptr<DirectConnectionPeer> peer, const void *data, const usize size)>;
using PubSubSendDataCallback = std::function<void(PubSubResult result, const std::string &resultStr)>;
+ using PubSubOnRemoveDisconnectedPeerCallback = std::function<void(std::shared_ptr<DirectConnectionPeer> peer)>;
struct DirectConnectionPeer
{
@@ -53,6 +54,8 @@ namespace sibs
void connect(const Ipv4 &address, PubSubConnectCallback connectCallbackFunc, PubSubReceiveDataCallback receiveDataCallbackFunc);
void send(const std::shared_ptr<DirectConnectionPeer> peer, std::shared_ptr<std::vector<u8>> data, PubSubSendDataCallback sendDataCallbackFunc = nullptr);
+
+ void onRemoveDisconnectedPeer(PubSubOnRemoveDisconnectedPeerCallback callbackFunc);
protected:
int createSocket(const Ipv4 &addressToBind, bool rendezvous, bool reuseAddr, bool bind = true);
private:
@@ -68,5 +71,6 @@ namespace sibs
std::thread receiveDataThread;
std::mutex peersMutex;
bool alive;
+ PubSubOnRemoveDisconnectedPeerCallback removeDisconnectedPeerCallback;
};
}