| [db03d9] | 1 | /* | 
|---|
|  | 2 | * FragmentController.hpp | 
|---|
|  | 3 | * | 
|---|
|  | 4 | *  Created on: Nov 27, 2011 | 
|---|
|  | 5 | *      Author: heber | 
|---|
|  | 6 | */ | 
|---|
|  | 7 |  | 
|---|
|  | 8 | #ifndef FRAGMENTCONTROLLER_HPP_ | 
|---|
|  | 9 | #define FRAGMENTCONTROLLER_HPP_ | 
|---|
|  | 10 |  | 
|---|
|  | 11 | // include config.h | 
|---|
|  | 12 | #ifdef HAVE_CONFIG_H | 
|---|
|  | 13 | #include <config.h> | 
|---|
|  | 14 | #endif | 
|---|
|  | 15 |  | 
|---|
|  | 16 | #include <boost/asio.hpp> | 
|---|
|  | 17 | #include <string> | 
|---|
|  | 18 | #include <vector> | 
|---|
|  | 19 |  | 
|---|
|  | 20 | #include "Connection.hpp" | 
|---|
| [d57585] | 21 | #include "ExitflagContainer.hpp" | 
|---|
| [4dd16e] | 22 | #include "JobId.hpp" | 
|---|
| [f0834d] | 23 | #include "Jobs/FragmentJob.hpp" | 
|---|
| [7670865] | 24 | #include "Results/FragmentResult.hpp" | 
|---|
| [db03d9] | 25 |  | 
|---|
| [6ee809] | 26 | #include "Operations/OperationRegistry.hpp" | 
|---|
| [73d6fc] | 27 |  | 
|---|
| [db03d9] | 28 | /** The FragmentController sends bunches of jobs to a FragmentScheduler, | 
|---|
|  | 29 | *  waits for their calculation and is called when they are done. Then, | 
|---|
|  | 30 | *  he loads the bunch of results from the Scheduler. | 
|---|
|  | 31 | * | 
|---|
|  | 32 | * While the FragmentScheduler and FragmentWorker rather act on their own | 
|---|
|  | 33 | * this is the piece to implant into the user software to allow for | 
|---|
|  | 34 | * communication with the Server/Worker duo to perform the calculation | 
|---|
|  | 35 | * of the fragments on distant computers. | 
|---|
|  | 36 | */ | 
|---|
| [d57585] | 37 | class FragmentController : public ExitflagContainer | 
|---|
| [db03d9] | 38 | { | 
|---|
|  | 39 | public: | 
|---|
| [96c83b] | 40 | FragmentController(boost::asio::io_service& io_service); | 
|---|
| [db03d9] | 41 | ~FragmentController(); | 
|---|
|  | 42 |  | 
|---|
| [c4f43e] | 43 | void requestIds(const std::string &host, const std::string &service, const size_t NumberIds); | 
|---|
| [4dd16e] | 44 | JobId_t getAvailableId(); | 
|---|
|  | 45 | void addJobs(std::vector<FragmentJob::ptr> &jobs); | 
|---|
|  | 46 | void sendJobs(const std::string &host, const std::string &service); | 
|---|
|  | 47 | void checkResults(const std::string &host, const std::string &service); | 
|---|
|  | 48 | void printDoneJobs(); | 
|---|
| [b15c4f] | 49 | void removeall(const std::string &host, const std::string &service); | 
|---|
| [4dd16e] | 50 | void receiveResults(const std::string &host, const std::string &service); | 
|---|
|  | 51 | std::vector<FragmentResult::ptr> getReceivedResults(); | 
|---|
|  | 52 | void shutdown(const std::string &host, const std::string &service); | 
|---|
|  | 53 |  | 
|---|
| [5adb84] | 54 | protected: | 
|---|
| [db03d9] | 55 | /// The Connection to the server. | 
|---|
|  | 56 | Connection connection_; | 
|---|
|  | 57 |  | 
|---|
| [5adb84] | 58 | public: | 
|---|
| [6ee809] | 59 | //!> registry with all operations of this controller | 
|---|
|  | 60 | OperationRegistry Commands; | 
|---|
| [d57585] | 61 |  | 
|---|
|  | 62 | private: | 
|---|
|  | 63 | //!> internally bound function that sets the Exitflag to ErrorFlag | 
|---|
|  | 64 | boost::function<void ()> failed; | 
|---|
| [db03d9] | 65 | }; | 
|---|
|  | 66 |  | 
|---|
|  | 67 | #endif /* FRAGMENTCONTROLLER_HPP_ */ | 
|---|