aboutsummaryrefslogtreecommitdiff
path: root/include/sibs/DirectConnection.hpp
diff options
context:
space:
mode:
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: