1 #include "hmbdc/Copyright.hpp" 3 #include "hmbdc/app/Config.hpp" 4 #include "hmbdc/app/tcpcast/Messages.hpp" 5 #include "hmbdc/app/tcpcast/Sender.hpp" 6 #include "hmbdc/app/tcpcast/SendTransportEngine.hpp" 7 #include "hmbdc/app/tcpcast/RecvTransportEngine.hpp" 8 #include "hmbdc/app/tcpcast/DefaultUserConfig.hpp" 10 #include "hmbdc/comm/Topic.hpp" 11 #include "hmbdc/pattern/GuardedSingleton.hpp" 13 #include <boost/regex.hpp> 25 namespace hmbdc {
namespace app {
namespace tcpcast {
64 ,
size_t maxMessageSize
65 ,
size_t minRecvToStart = 1u) {
70 std::lock_guard<std::mutex> tlock(sendTransportEnginesLock_);
72 cfg, maxMessageSize, minRecvToStart);
73 sendTransports_.emplace_back(res);
82 ,
size_t maxMessageSize
83 , std::tuple<size_t> args) {
103 template <
typename Buffer,
typename MsgArbitrator = RecvTransport::NoOpArb>
111 std::lock_guard<std::mutex> tlock(recvTransportsLock_);
113 cfg, buffer, std::forward<MsgArbitrator>(arb));
114 recvTransports_.emplace_back(res);
123 template <
typename Buffer,
typename ArgsTuple>
127 , ArgsTuple&& args) {
142 std::lock_guard<std::mutex> lock(sendersLock_);
143 auto sender = senders_.find(t);
144 if ( sender != senders_.end()) {
145 return sender->second.get();
147 std::lock_guard<std::mutex> slock(sendTransportEnginesLock_);
149 i < sendTransports_.size();
151 auto st = sendTransports_[i];
153 auto newSender =
new Sender(st, t);
154 senders_[t].reset(newSender);
171 std::lock_guard<std::mutex> tlock(recvTransportsLock_);
172 for (
auto ptr : recvTransports_) {
183 std::lock_guard<std::mutex> tlock(recvTransportsLock_);
184 for (
auto ptr : recvTransports_) {
185 ptr->stopListenTo(t);
197 std::vector<SendTransport::ptr> sendTransports_;
198 std::mutex sendTransportEnginesLock_;
200 std::vector<RecvTransport::ptr> recvTransports_;
201 std::mutex recvTransportsLock_;
203 std::map<comm::Topic, Sender::ptr> senders_;
204 std::mutex sendersLock_;
char const *const DefaultUserConfig
Definition: DefaultUserConfig.hpp:10
void setDefaultUserConfig(Config const &c)
internal use
Definition: Config.hpp:136
class to hold an hmbdc configuration
Definition: Config.hpp:43
fascade class for sending network messages
Definition: Sender.hpp:11
topic as in the publish / subscribe communication paradigm
Definition: Topic.hpp:14
SendTransportEngine * createSendTransportEngine(Config const &cfgIn, size_t maxMessageSize, size_t minRecvToStart=1u)
construct a send transport enngine (and remember it)
Definition: NetContext.hpp:62
base for the Singleton that works with SingletonGuardian
Definition: GuardedSingleton.hpp:35
RAII representing the lifespan of the underlying Singleton which also ganrantees the singularity of u...
Definition: GuardedSingleton.hpp:20
auto createRecvTransportEngine(Config const &cfgIn, Buffer &buffer, MsgArbitrator &&arb=RecvTransport::NoOpArb())
construct a send transport and remember it
Definition: NetContext.hpp:104
void listenTo(comm::Topic const &t)
This process is interested in a Topic.
Definition: NetContext.hpp:170
Definition: SendTransportEngine.hpp:193
SendTransportEngine * createSendTransportEngineTuply(Config const &cfg, size_t maxMessageSize, std::tuple< size_t > args)
same as above but provide an unified interface - not preferred
Definition: NetContext.hpp:81
a singleton that holding tcpcast resources
Definition: NetContext.hpp:43
void stopListenTo(comm::Topic const &t)
undo the subscription
Definition: NetContext.hpp:182
a take all arbitrator (no arbitration at all)
Definition: RecvTransportEngine.hpp:36
auto createRecvTransportEngineTuply(Config const &cfg, Buffer &buffer, ArgsTuple &&args)
same as above but to provide a unified interface - not preferred
Definition: NetContext.hpp:124
Sender * getSender(comm::Topic const &t)
get (or create for the first time) a Sender - whose function is to send messages on its associated To...
Definition: NetContext.hpp:141
impl class
Definition: RecvTransportEngine.hpp:61