aboutsummaryrefslogtreecommitdiff
path: root/include/sibs/DirectConnection.hpp
diff options
context:
space:
mode:
authordec05eba <dec05eba@protonmail.com>2018-06-07 22:00:42 +0200
committerdec05eba <dec05eba@protonmail.com>2020-08-18 22:56:48 +0200
commitc2187ca6b61c701c281cc528db43f6b97c50f3d8 (patch)
treef0baf317846902ae628c2e12cf8c25b6eb235c77 /include/sibs/DirectConnection.hpp
parented71e8adf36e3d0c3f6f2b54794fe069091d3376 (diff)
Add bootstrap node, listen method
Diffstat (limited to 'include/sibs/DirectConnection.hpp')
-rw-r--r--include/sibs/DirectConnection.hpp24
1 files changed, 12 insertions, 12 deletions
diff --git a/include/sibs/DirectConnection.hpp b/include/sibs/DirectConnection.hpp
index c4431a5..0e8b961 100644
--- a/include/sibs/DirectConnection.hpp
+++ b/include/sibs/DirectConnection.hpp
@@ -7,6 +7,7 @@
#include <memory>
#include <thread>
#include <mutex>
+#include <vector>
#include "IpAddress.hpp"
#include "../types.hpp"
#include "../utils.hpp"
@@ -19,25 +20,22 @@ namespace sibs
ConnectionException(const std::string &errMsg) : std::runtime_error(errMsg) {}
};
- class SendException : public std::runtime_error
- {
- public:
- SendException(const std::string &errMsg) : std::runtime_error(errMsg) {}
- };
-
-
- enum class PubSubConnectResult
+ enum class PubSubResult
{
OK,
ERROR
};
- using PubSubConnectCallback = std::function<void(PubSubConnectResult result, const std::string &resultStr)>;
- using PubSubReceiveDataCallback = std::function<void(const void *data, const usize size)>;
+ struct DirectConnectionPeer;
+
+ using PubSubConnectCallback = std::function<void(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)>;
struct DirectConnectionPeer
{
int socket;
+ Ipv4 address;
PubSubReceiveDataCallback receiveDataCallbackFunc;
};
@@ -50,12 +48,14 @@ namespace sibs
~DirectConnections();
// Throws ConnectionException on error
+ std::shared_ptr<DirectConnectionPeer> connectServer(const Ipv4 &address, PubSubReceiveDataCallback receiveDataCallbackFunc);
+ // Throws ConnectionException on error
std::shared_ptr<DirectConnectionPeer> connect(const Ipv4 &address, PubSubReceiveDataCallback receiveDataCallbackFunc);
- // Throws SendException on error
- void send(const std::shared_ptr<DirectConnectionPeer> &peer, const void *data, const usize size);
+ void send(const std::shared_ptr<DirectConnectionPeer> &peer, std::shared_ptr<std::vector<u8>> data, PubSubSendDataCallback sendDataCallbackFunc = nullptr);
protected:
int createSocket(const Ipv4 &addressToBind, bool rendezvous, bool reuseAddr);
private:
+ std::shared_ptr<DirectConnectionPeer> connect(const Ipv4 &address, bool rendezvous, bool reuseAddr, PubSubReceiveDataCallback receiveDataCallbackFunc);
void receiveData();
bool receiveDataFromPeer(const int socket, char *output);
private: