*/
class Sender {
public:
- const char *msg = "GaBuZoMeu";
- Sender() {
+ std::string msg = "GaBuZoMeu";
+ explicit Sender() {
/* Constructor used when no parameter is passed to the actor */
};
- Sender(std::vector<std::string> args) {
+ explicit Sender(std::vector<std::string> args) {
/* This constructor is used when we pass parameters to the actor */
if (args.size() > 0)
- msg = args[0].c_str();
+ msg = args[0];
}
void operator()() {
XBT_INFO("Hello s4u, I have something to send");
simgrid::s4u::MailboxPtr mailbox = simgrid::s4u::Mailbox::byName("mb42");
- simgrid::s4u::this_actor::send(mailbox, xbt_strdup(msg), strlen(msg));
+ simgrid::s4u::this_actor::send(mailbox, xbt_strdup(msg.c_str()), msg.size());
XBT_INFO("I'm done. See you.");
}
};
public:
simgrid::s4u::MailboxPtr mailbox = simgrid::s4u::Mailbox::byName("thingy");
- Receiver() {};
- Receiver(std::vector<std::string> args) {
+ explicit Receiver() = default;
+ explicit Receiver(std::vector<std::string> args) {
/* This constructor is used when we pass parameters to the actor */
/* as with argc/argv, args[0] is the actor's name, so the first parameter is args[1] */
+
+ /* FIXME: this is a bug as this does not happen when starting the process directly
+ * We should fix it by not adding the process name as argv[0] from the deployment file,
+ * which is useless anyway since it's always the function name in this setting.
+ * But this will break MSG...
+ */
if (args.size() > 1)
- mailbox = simgrid::s4u::Mailbox::byName(args[1].c_str());
+ mailbox = simgrid::s4u::Mailbox::byName(args[1]);
}
void operator()() {
- XBT_INFO("Hello s4u, I'm ready to get any message you'd want on %s", mailbox->getName());
+ XBT_INFO("Hello s4u, I'm ready to get any message you'd want on %s", mailbox->name());
char *msg1 = static_cast<char*>(simgrid::s4u::this_actor::recv(mailbox));
char *msg2 = static_cast<char*>(simgrid::s4u::this_actor::recv(mailbox));