| [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);
 | 
|---|
| [311137] | 48 |   std::pair<size_t, size_t> getJobStatus() const;
 | 
|---|
| [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_ */
 | 
|---|