Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
Examples of CPP versions of Msg
[simgrid.git] / examples / cxx / basic / Forwarder.cxx
1 #include "Forwarder.hpp"\r
2 #include "BasicTask.hpp"\r
3 #include "FinalizeTask.hpp"\r
4 #include <Host.hpp>\r
5 #include <HostNotFoundException.hpp>\r
6 \r
7 #include <iostream>\r
8 using namespace std;\r
9 \r
10 MSG_IMPLEMENT_DYNAMIC(Forwarder, Process);\r
11 \r
12 \r
13 int Forwarder::main(int argc, char** argv)\r
14 {\r
15         cout << "Hello I'm " << getName() << " on " << getHost().getName() << "!" << endl;\r
16         \r
17         int slavesCount = argc;\r
18         \r
19         Host* slaves = new Host[slavesCount];\r
20         \r
21         for (int i = 0; i < argc; i++) \r
22         {\r
23                 try \r
24                 {             \r
25                         slaves[i] = Host::getByName(argv[i]);\r
26                 } \r
27                 catch (HostNotFoundException e) \r
28                 {\r
29                         cerr << e.toString() << endl;\r
30                         cerr << "Buggy deployment file" << endl;\r
31                         exit(1);\r
32                 }\r
33         }\r
34         \r
35         int taskCount = 0;\r
36 \r
37         while(true) \r
38         {\r
39                 Task* t = Task::get(0); \r
40         \r
41                 if(t->isInstanceOf("FinalizeTask")) \r
42                 {\r
43                         cout << getName() << ":" << getHost().getName() << "All tasks have been dispatched. Let's tell everybody the computation is over." << endl;\r
44         \r
45                         for (int cpt = 0; cpt< slavesCount; cpt++) \r
46                         {\r
47                                 slaves[cpt].put(0, new FinalizeTask());\r
48                         }\r
49 \r
50                         delete t;\r
51 \r
52                         break;\r
53                 }\r
54 \r
55                 cout <<"[" << getName() << ":" << getHost().getName() << "] " << "Received \"" << t->getName() << "\" " << endl;\r
56         \r
57                 cout <<"[" << getName() << ":" << getHost().getName() << "] " << "Sending \"" << t->getName() << "\" to \"" << slaves[taskCount % slavesCount].getName() <<"\"" << endl;\r
58                 \r
59                 slaves[taskCount % slavesCount].put(0, t);\r
60         \r
61                 taskCount++;\r
62         }\r
63         \r
64         \r
65         cout <<"[" << getName() << ":" << getHost().getName() << "] " << "I'm done. See you!" << endl;\r
66         \r
67         delete[] slaves;\r
68       \r
69         return 0;\r
70 }