7 #ifndef CPPWAMP_RAWSOCKCONNECTOR_HPP
8 #define CPPWAMP_RAWSOCKCONNECTOR_HPP
14 #include <boost/asio/post.hpp>
15 #include <boost/asio/strand.hpp>
16 #include "../asiodefs.hpp"
17 #include "../connector.hpp"
18 #include "../error.hpp"
28 template <
typename TCodec,
typename TEndpo
int>
29 class RawsockConnector :
public Connector
33 using Endpoint = TEndpoint;
34 using Info =
typename Endpoint::Establisher::Info;
35 using Transport =
typename Endpoint::Transport;
36 using Ptr = std::shared_ptr<RawsockConnector>;
40 return Ptr(
new RawsockConnector(
IoStrand(exec), std::move(info)));
43 IoStrand strand()
const override {
return strand_;}
46 using Establisher =
typename Endpoint::Establisher;
53 virtual void establish(Handler&& handler)
override
60 void operator()(std::error_code ec,
int codecId,
61 typename Transport::Ptr trnsp)
64 internal::ClientInterface::Ptr client;
65 using ClientType = internal::Client<Codec, Transport>;
68 assert(codecId == Codec::id());
69 client = ClientType::create(std::move(trnsp));
71 boost::asio::post(me.strand_,
72 std::bind(std::move(handler), ec, client));
78 endpoint_.reset(
new Endpoint( Establisher(strand_, info_),
80 info_.maxRxLength() ));
82 std::static_pointer_cast<RawsockConnector>(shared_from_this());
83 endpoint_->establish(Established{std::move(
self), std::move(handler)});
86 virtual void cancel()
override
93 RawsockConnector(
IoStrand strand, Info info)
94 : strand_(std::move(strand)),
95 info_(std::move(info))
98 boost::asio::strand<AnyIoExecutor> strand_;
100 std::unique_ptr<Endpoint> endpoint_;
107 #endif // CPPWAMP_RAWSOCKCONNECTOR_HPP