Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
7953686088759cc8858e93e78df9b01076c71303
[simgrid.git] / examples / cxx / autoDestination / Forwarder.cxx
1 #include "Forwarder.hpp"\r
2 #include "BasicTask.hpp"\r
3 #include "FinalizeTask.hpp"\r
4 \r
5 #include <Host.hpp>\r
6 #include <HostNotFoundException.hpp>\r
7 \r
8 #include <Msg.hpp>\r
9 \r
10 MSG_IMPLEMENT_DYNAMIC(Forwarder, Process);\r
11 \r
12 int Forwarder::main(int argc, char** argv)\r
13 {\r
14         info("Hello");\r
15         \r
16         int aliasCount = argc;\r
17         \r
18         int taskCount = 0;\r
19         \r
20         Task* taskReceived;\r
21         Task* finalizeTask;\r
22         BasicTask* basicTask;\r
23         \r
24         while(true) \r
25         {\r
26                 taskReceived = Task::receive();\r
27         \r
28                 if(taskReceived->isInstanceOf("FinalizeTask")) \r
29                 {\r
30                         info("All tasks have been dispatched. Let's tell everybody the computation is over.");\r
31         \r
32                         for (int i = 0; i < aliasCount; i++) \r
33                         {\r
34                                 finalizeTask = new FinalizeTask();\r
35                                 finalizeTask->send(argv[i]);\r
36                         }\r
37                         \r
38                         delete taskReceived;\r
39         \r
40                         break;\r
41                 }\r
42         \r
43                 basicTask = reinterpret_cast<BasicTask*>(taskReceived);\r
44         \r
45                 info(TEXT_("Received \"") + TEXT_(basicTask->getName()) + TEXT_("\" "));\r
46         \r
47                 info(TEXT_("Sending \"") + TEXT_(basicTask->getName()) + TEXT_("\" to \"") + TEXT_(argv[taskCount % aliasCount]));\r
48         \r
49                 basicTask->send(argv[taskCount % aliasCount]);\r
50         \r
51                 taskCount++;\r
52         }\r
53         \r
54         \r
55         info("I'm done. See you!");\r
56 \r
57         delete this;\r
58         \r
59         return 0;\r
60 }