--- /dev/null
+#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