From e22adde24fb3dd1147948afb99519110c359063e Mon Sep 17 00:00:00 2001 From: dec05eba Date: Sat, 13 Oct 2018 19:58:17 +0200 Subject: Test --- src/DirectConnection.cpp | 32 +++++++++++++++++++++++++++++++- 1 file changed, 31 insertions(+), 1 deletion(-) (limited to 'src/DirectConnection.cpp') diff --git a/src/DirectConnection.cpp b/src/DirectConnection.cpp index 36d2d16..c19fa63 100644 --- a/src/DirectConnection.cpp +++ b/src/DirectConnection.cpp @@ -75,13 +75,43 @@ namespace sibs void DirectConnections::connectServer(const Ipv4 &address, PubSubConnectCallback connectCallbackFunc, PubSubReceiveDataCallback receiveDataCallbackFunc) { - connect(address, false, true, connectCallbackFunc, receiveDataCallbackFunc, false); + connect(address, true, true, connectCallbackFunc, receiveDataCallbackFunc, true); } void DirectConnections::connect(const Ipv4 &address, PubSubConnectCallback connectCallbackFunc, PubSubReceiveDataCallback receiveDataCallbackFunc) { connect(address, true, true, connectCallbackFunc, receiveDataCallbackFunc, true); } + + void DirectConnections::connect(const Ipv4 &address, std::shared_ptr serverPeer, PubSubConnectCallback connectCallbackFunc, PubSubReceiveDataCallback receiveDataCallbackFunc) + { + std::thread([this, address, connectCallbackFunc, receiveDataCallbackFunc, serverPeer]() + { + if(UDT::bind(serverPeer->socket, (sockaddr*)&address.address, sizeof(address.address)) == UDT::ERROR) + { + std::string errMsg = "UDT: Failed to bind, error: "; + errMsg += UDT::getlasterror_desc(); + throw SocketCreateException(errMsg); + } + + Log::debug("DirectConnections: Connecting to peer (ip: %s, port: %d, rendezvous: yes)", address.getAddress().c_str(), address.getPort()); + if(UDT::connect(serverPeer->socket, (sockaddr*)&address.address, sizeof(address.address)) == UDT::ERROR) + { + if(connectCallbackFunc) + connectCallbackFunc(serverPeer, PubSubResult::ERROR, UDT::getlasterror_desc()); + return; + } + + serverPeer->address = address; + serverPeer->receiveDataCallbackFunc = receiveDataCallbackFunc; + peersMutex.lock(); + peers[serverPeer->socket] = serverPeer; + peersMutex.unlock(); + + if(connectCallbackFunc) + connectCallbackFunc(serverPeer, PubSubResult::OK, ""); + }).detach(); + } void DirectConnections::connect(const Ipv4 &address, bool rendezvous, bool reuseAddr, PubSubConnectCallback connectCallbackFunc, PubSubReceiveDataCallback receiveDataCallbackFunc, bool bind) { -- cgit v1.2.3