aboutsummaryrefslogtreecommitdiff
path: root/include/sibs/BootstrapConnection.hpp
diff options
context:
space:
mode:
Diffstat (limited to 'include/sibs/BootstrapConnection.hpp')
-rw-r--r--include/sibs/BootstrapConnection.hpp28
1 files changed, 20 insertions, 8 deletions
diff --git a/include/sibs/BootstrapConnection.hpp b/include/sibs/BootstrapConnection.hpp
index dd90b7d..08af775 100644
--- a/include/sibs/BootstrapConnection.hpp
+++ b/include/sibs/BootstrapConnection.hpp
@@ -19,8 +19,14 @@ namespace sibs
PubsubKeyAlreadyListeningException(const std::string &errMsg) : std::runtime_error(errMsg) {}
};
- // @peer is nullptr is data was sent by local user
- using BoostrapConnectionListenCallbackFunc = std::function<void(const DirectConnectionPeer *peer, const void *data, const usize size)>;
+ // @peer is nullptr is data was sent by local user.
+ // Return false if you want to stop listening on the key
+ using BoostrapConnectionListenCallbackFunc = std::function<bool(const DirectConnectionPeer *peer, const void *data, const usize size)>;
+
+ struct ListenHandle
+ {
+ PubsubKey key;
+ };
class BootstrapConnection
{
@@ -30,17 +36,23 @@ namespace sibs
BootstrapConnection(const Ipv4 &bootstrapAddress);
// Throws PubsubKeyAlreadyListeningException if we are already listening on the key @pubsubKey
- void listen(const PubsubKey &pubsubKey, BoostrapConnectionListenCallbackFunc callbackFunc);
- void put(const PubsubKey &pubsubKey, std::shared_ptr<std::vector<u8>> data);
+ ListenHandle listen(const PubsubKey &pubsubKey, BoostrapConnectionListenCallbackFunc callbackFunc);
+ // Returns false if data is larger than 800kb.
+ // Note: @data is copied in this function.
+ // Note: You can't put data on a pubsubkey that you are not listening on. Call @listen first.
+ bool put(const PubsubKey &pubsubKey, const void *data, const usize size);
+ bool cancelListen(const ListenHandle &listener);
+
+ std::vector<std::shared_ptr<DirectConnectionPeer>> getPeers();
private:
- void receiveDataFromServer(std::shared_ptr<DirectConnectionPeer> peer, const void *data, const usize size);
- void receiveDataFromPeer(BoostrapConnectionListenCallbackFunc listenCallbackFunc, std::shared_ptr<DirectConnectionPeer> peer, const void *data, const usize size);
+ void receiveDataFromServer(std::shared_ptr<DirectConnectionPeer> peer, MessageType messageType, const void *data, const usize size);
+ void receiveDataFromPeer(std::shared_ptr<DirectConnectionPeer> peer, MessageType messageType, const void *data, const usize size);
private:
DirectConnections connections;
std::shared_ptr<DirectConnectionPeer> serverPeer;
PubsubKeyMap<BoostrapConnectionListenCallbackFunc> listenCallbackFuncs;
PubsubKeyMap<std::vector<std::shared_ptr<DirectConnectionPeer>>> subscribedPeers;
- std::mutex listenerCallbackFuncMutex;
- std::mutex subscribedPeersMutex;
+ std::recursive_mutex listenerCallbackFuncMutex;
+ std::recursive_mutex subscribedPeersMutex;
};
}