Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
Examples of CPP versions of Msg
[simgrid.git] / examples / cxx / basic / Forwarder.cxx
diff --git a/examples/cxx/basic/Forwarder.cxx b/examples/cxx/basic/Forwarder.cxx
new file mode 100644 (file)
index 0000000..1fa5c2d
--- /dev/null
@@ -0,0 +1,70 @@
+#include "Forwarder.hpp"\r
+#include "BasicTask.hpp"\r
+#include "FinalizeTask.hpp"\r
+#include <Host.hpp>\r
+#include <HostNotFoundException.hpp>\r
+\r
+#include <iostream>\r
+using namespace std;\r
+\r
+MSG_IMPLEMENT_DYNAMIC(Forwarder, Process);\r
+\r
+\r
+int Forwarder::main(int argc, char** argv)\r
+{\r
+       cout << "Hello I'm " << getName() << " on " << getHost().getName() << "!" << endl;\r
+       \r
+       int slavesCount = argc;\r
+       \r
+       Host* slaves = new Host[slavesCount];\r
+       \r
+       for (int i = 0; i < argc; i++) \r
+       {\r
+               try \r
+               {             \r
+                       slaves[i] = Host::getByName(argv[i]);\r
+               } \r
+               catch (HostNotFoundException e) \r
+               {\r
+                       cerr << e.toString() << endl;\r
+                       cerr << "Buggy deployment file" << endl;\r
+                       exit(1);\r
+               }\r
+       }\r
+       \r
+       int taskCount = 0;\r
+\r
+       while(true) \r
+       {\r
+               Task* t = Task::get(0); \r
+       \r
+               if(t->isInstanceOf("FinalizeTask")) \r
+               {\r
+                       cout << getName() << ":" << getHost().getName() << "All tasks have been dispatched. Let's tell everybody the computation is over." << endl;\r
+       \r
+                       for (int cpt = 0; cpt< slavesCount; cpt++) \r
+                       {\r
+                               slaves[cpt].put(0, new FinalizeTask());\r
+                       }\r
+\r
+                       delete t;\r
+\r
+                       break;\r
+               }\r
+\r
+               cout <<"[" << getName() << ":" << getHost().getName() << "] " << "Received \"" << t->getName() << "\" " << endl;\r
+       \r
+               cout <<"[" << getName() << ":" << getHost().getName() << "] " << "Sending \"" << t->getName() << "\" to \"" << slaves[taskCount % slavesCount].getName() <<"\"" << endl;\r
+               \r
+               slaves[taskCount % slavesCount].put(0, t);\r
+       \r
+               taskCount++;\r
+       }\r
+       \r
+       \r
+       cout <<"[" << getName() << ":" << getHost().getName() << "] " << "I'm done. See you!" << endl;\r
+       \r
+       delete[] slaves;\r
+      \r
+       return 0;\r
+}
\ No newline at end of file