Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
65fbbfe5ea939927ae83fa1bd86b43532fc571a8
[simgrid.git] / teshsuite / s4u / ns3-simultaneous-send-rcv / ns3-simultaneous-send-rcv.cpp
1 #include "simgrid/s4u.hpp"
2
3 XBT_LOG_NEW_DEFAULT_CATEGORY(s4u_test, "Messages specific for this s4u tests");
4
5 int payload = 1000;
6 int nb_message_to_send = 100;
7 double sleep_time = 1;
8 int nb_sender = 50;
9
10 int nb_messages_sent = 0;
11
12 simgrid::s4u::Mailbox* box;
13
14 static void test_send(){
15
16   int nb_message = 0;
17
18   while(nb_message < nb_message_to_send){
19     
20     nb_messages_sent++;
21     nb_message++;
22     int id_message = nb_messages_sent;
23     XBT_INFO("start sending test #%i", id_message); 
24     box->put(new int(id_message), payload);
25     XBT_INFO("done sending test #%i", id_message);
26     simgrid::s4u::this_actor::sleep_for(sleep_time);
27   }
28 }
29
30 static void test_receive(){
31
32   int nb_message = 0;
33
34   while(nb_message < nb_message_to_send * nb_sender){
35     XBT_INFO("waiting for messages");
36     int id = *(int*)(box->get());
37     nb_message++;
38     XBT_INFO("received messages #%i", id);
39   }
40 }
41
42
43 int main(int argc, char *argv[])
44 {
45   simgrid::s4u::Engine e(&argc, argv);
46  
47   e.load_platform(argv[1]);
48
49   for(int i=0;i<nb_sender;i++)
50     simgrid::s4u::Actor::create("sender_"+std::to_string(i), e.get_all_hosts()[i], test_send);
51
52   simgrid::s4u::ActorPtr receiver = simgrid::s4u::Actor::create("receiver", e.get_all_hosts()[nb_sender+1], test_receive);
53   
54   box = simgrid::s4u::Mailbox::by_name("test");
55   box->set_receiver(receiver);
56
57   e.run();
58
59   return 0;
60 }