--- /dev/null
+#include "Master.hpp"\r
+#include "BasicTask.hpp"\r
+#include "FinalizeTask.hpp"\r
+\r
+#include <Host.hpp>\r
+#include <HostNotFoundException.hpp>\r
+\r
+#include <iostream>\r
+using namespace std;\r
+\r
+\r
+#ifndef BUFFMAX\r
+#define BUFFMAX 260\r
+#endif\r
+\r
+MSG_IMPLEMENT_DYNAMIC(Master, Process);\r
+\r
+int Master::main(int argc, char** argv)\r
+{\r
+ char buff[BUFFMAX + 1] = {0};\r
+ int taskCount; \r
+ double taskComputeSize; \r
+ double taskCommunicateSize;\r
+ \r
+ cout << "Hello I'm " << getName() << " on " << getHost().getName() << "!" << endl;\r
+ \r
+ \r
+ cout <<"[" << getName() << ":" << getHost().getName() << "] " << "argc=" << argc << endl;\r
+ \r
+ for (int i = 0; i< argc; i++) \r
+ cout << "argv:" << argv[i] << endl;\r
+ \r
+ sscanf(argv[0],"%d", &taskCount);\r
+ \r
+ sscanf(argv[1],"%lg", &taskComputeSize);\r
+ \r
+ sscanf(argv[2],"%lg", &taskCommunicateSize);\r
+ \r
+ BasicTaskPtr* basicTasks = new BasicTaskPtr[taskCount];\r
+ \r
+ for (int i = 0; i < taskCount; i++) \r
+ {\r
+ sprintf(buff,"Task_%d",i);\r
+ basicTasks[i] = new BasicTask(buff, taskComputeSize, taskCommunicateSize);\r
+ memset(buff, 0 , BUFFMAX + 1); \r
+ } \r
+ \r
+ int aliasCount = argc - 3;\r
+ \r
+ \r
+ char** aliases = (char**) calloc(aliasCount, sizeof(char*));\r
+ \r
+ for(int i = 3; i < argc ; i++) \r
+ aliases[i - 3] = _strdup(argv[i]);\r
+ \r
+ cout <<"[" << getName() << ":" << getHost().getName() << "] " << "Got "<< aliasCount << " alias(es) :" << endl;\r
+ \r
+ for (int i = 0; i < aliasCount; i++)\r
+ cout <<"[" << getName() << ":" << getHost().getName() << "] " << "\t" << aliases[i] << endl;\r
+ \r
+ cout <<"[" << getName() << ":" << getHost().getName() << "] " << "Got "<< taskCount << " task to process." << endl;\r
+ \r
+ for (int i = 0; i < taskCount; i++) \r
+ { \r
+ cout <<"[" << getName() << ":" << getHost().getName() << "] " << "Sending \"" << basicTasks[i]->getName() << "\" to \"" << aliases[i % aliasCount] << "\"" << endl;\r
+ \r
+ /*if((Host::currentHost().getName()).equals((aliases[i % aliasCount].split(":"))[0]))\r
+ cout <<"[" << getName() << ":" << getHost().getName() << "] " << "Hey ! It's me ! ";\r
+ */\r
+ \r
+ basicTasks[i]->send(aliases[i % aliasCount]);\r
+ }\r
+ \r
+ cout <<"[" << getName() << ":" << getHost().getName() << "] " << "Send completed" << endl;\r
+ \r
+ cout <<"[" << getName() << ":" << getHost().getName() << "] " << "All tasks have been dispatched. Let's tell everybody the computation is over." << endl;\r
+ \r
+ FinalizeTask* finalizeTask;\r
+ \r
+ for (int i = 0; i < aliasCount; i++) \r
+ {\r
+ finalizeTask = new FinalizeTask();\r
+ finalizeTask->send(aliases[i]);\r
+ \r
+ }\r
+ \r
+ cout <<"[" << getName() << ":" << getHost().getName() << "] " << "Goodbye now!" << endl;\r
+\r
+ delete[] basicTasks;\r
+ delete[] aliases;\r
+\r
+ return 0;\r
+}
\ No newline at end of file