1 #include "hmbdc/Copyright.hpp" 3 #include "hmbdc/app/utils/NetContextUtil.hpp" 4 #include "hmbdc/app/Config.hpp" 5 #include "hmbdc/app/mcast/Messages.hpp" 6 #include "hmbdc/app/mcast/Sender.hpp" 7 #include "hmbdc/app/mcast/SendTransportEngine.hpp" 8 #include "hmbdc/app/mcast/RecvTransportEngine.hpp" 9 #include "hmbdc/app/mcast/DefaultUserConfig.hpp" 10 #include "hmbdc/comm/Topic.hpp" 11 #include "hmbdc/pattern/GuardedSingleton.hpp" 13 #include <boost/regex.hpp> 23 namespace hmbdc {
namespace app {
namespace mcast {
58 ,
size_t maxMessageSize) {
63 std::lock_guard<std::mutex> tlock(sendTransportsLock_);
65 sendTransports_.emplace_back(res);
74 ,
size_t maxMessageSize
75 , std::tuple<> args) {
99 template <
typename Buffer,
typename MsgArbitrator = RecvTransport::NoOpArb>
107 std::lock_guard<std::mutex> tlock(recvTransportsLock_);
110 , std::forward<MsgArbitrator>(arb));
111 recvTransports_.emplace_back(res);
120 template <
typename Buffer,
typename ArgsTuple>
124 , ArgsTuple&& args) {
139 std::lock_guard<std::mutex> lock(sendersLock_);
140 auto sender = senders_.find(t);
141 if ( sender != senders_.end()) {
142 return sender->second.get();
144 std::lock_guard<std::mutex> slock(sendTransportsLock_);
146 i < sendTransports_.size();
148 auto st = sendTransports_[i];
150 auto newSender =
new Sender(st, t);
151 senders_[t].reset(newSender);
168 std::lock_guard<std::mutex> tlock(recvTransportsLock_);
169 for (
auto ptr : recvTransports_) {
180 std::lock_guard<std::mutex> tlock(recvTransportsLock_);
181 for (
auto ptr : recvTransports_) {
182 ptr->stopListenTo(t);
209 template <
typename CcContext>
211 , Config::Base
const* cfgIn =
nullptr 212 ,
char const* sendSec =
nullptr 213 ,
char const* recvSec =
nullptr 214 ,
size_t maxMessageSize = 0
215 , uint8_t runningUsingThreadIndex = 0
216 ,
char const* listenToTopic =
"_")
217 : runningCtx(0u, 2ul) {
218 checkEpollTaskInitialization();
219 createMinimumNetContext(
220 *
this, runningCtx, ctx, cfgIn, sendSec, recvSec, maxMessageSize, runningUsingThreadIndex, listenToTopic);
228 checkEpollTaskInitialization();
234 std::vector<SendTransport::ptr> sendTransports_;
235 std::mutex sendTransportsLock_;
237 std::vector<RecvTransport::ptr> recvTransports_;
238 std::mutex recvTransportsLock_;
240 std::map<Topic, Sender::ptr> senders_;
241 std::mutex sendersLock_;
auto createRecvTransportEngine(Config const &cfgIn, Buffer &buffer, MsgArbitrator &&arb=RecvTransport::NoOpArb())
construct a send transport and remember it
Definition: NetContext.hpp:100
void setDefaultUserConfig(Config const &c)
internal use
Definition: Config.hpp:139
class to hold an hmbdc configuration
Definition: Config.hpp:44
topic as in the publish / subscribe communication paradigm
Definition: Topic.hpp:14
Definition: NetContextUtil.hpp:10
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
a take all arbitrator (no arbitration at all)
Definition: RecvTransportEngine.hpp:34
a singleton that holding mcast resources
Definition: NetContext.hpp:38
SendTransportEngine * createSendTransportEngine(Config const &cfgIn, size_t maxMessageSize)
construct a send transport engine (and remember it within the class)
Definition: NetContext.hpp:57
auto createRecvTransportEngineTuply(Config const &cfg, Buffer &buffer, ArgsTuple &&args)
same as above but to provide a unified interface - not preferred
Definition: NetContext.hpp:121
Sender * getSender(Topic const &t=Topic("_"))
get (or create for the first time) a Sender - whose function is to send messages on its associated To...
Definition: NetContext.hpp:138
NetContext(CcContext &ctx, Config::Base const *cfgIn=nullptr, char const *sendSec=nullptr, char const *recvSec=nullptr, size_t maxMessageSize=0, uint8_t runningUsingThreadIndex=0, char const *listenToTopic="_")
this ctor is to create some commonly used basic engine setup to start with. This is private and only ...
Definition: NetContext.hpp:210
void stopListenTo(Topic const &t)
undo the subscription
Definition: NetContext.hpp:179
NetContext()
this is for users that want finer control of engine creation - from a blank NetContext.
Definition: NetContext.hpp:227
char const *const DefaultUserConfig
Definition: DefaultUserConfig.hpp:10
void listenTo(Topic const &t)
This process is interested in a Topic.
Definition: NetContext.hpp:167
SendTransportEngine * createSendTransportEngineTuply(Config const &cfg, size_t maxMessageSize, std::tuple<> args)
same as above but provide a unified interface - not preferred
Definition: NetContext.hpp:73
Definition: SendTransportEngine.hpp:126
Definition: RecvTransportEngine.hpp:336
fascade class for sending network messages
Definition: Sender.hpp:14