Changeset 5adb84 for src/Fragmentation/Automation/FragmentController.hpp
- Timestamp:
- May 17, 2012, 3:21:12 PM (13 years ago)
- Branches:
- Action_Thermostats, Add_AtomRandomPerturbation, Add_FitFragmentPartialChargesAction, Add_RotateAroundBondAction, Add_SelectAtomByNameAction, Added_ParseSaveFragmentResults, AddingActions_SaveParseParticleParameters, Adding_Graph_to_ChangeBondActions, Adding_MD_integration_tests, Adding_ParticleName_to_Atom, Adding_StructOpt_integration_tests, AtomFragments, Automaking_mpqc_open, AutomationFragmentation_failures, Candidate_v1.5.4, Candidate_v1.6.0, Candidate_v1.6.1, ChangeBugEmailaddress, ChangingTestPorts, ChemicalSpaceEvaluator, CombiningParticlePotentialParsing, Combining_Subpackages, Debian_Package_split, Debian_package_split_molecuildergui_only, Disabling_MemDebug, Docu_Python_wait, EmpiricalPotential_contain_HomologyGraph, EmpiricalPotential_contain_HomologyGraph_documentation, Enable_parallel_make_install, Enhance_userguide, Enhanced_StructuralOptimization, Enhanced_StructuralOptimization_continued, Example_ManyWaysToTranslateAtom, Exclude_Hydrogens_annealWithBondGraph, FitPartialCharges_GlobalError, Fix_BoundInBox_CenterInBox_MoleculeActions, Fix_ChargeSampling_PBC, Fix_ChronosMutex, Fix_FitPartialCharges, Fix_FitPotential_needs_atomicnumbers, Fix_ForceAnnealing, Fix_IndependentFragmentGrids, Fix_ParseParticles, Fix_ParseParticles_split_forward_backward_Actions, Fix_PopActions, Fix_QtFragmentList_sorted_selection, Fix_Restrictedkeyset_FragmentMolecule, Fix_StatusMsg, Fix_StepWorldTime_single_argument, Fix_Verbose_Codepatterns, Fix_fitting_potentials, Fixes, ForceAnnealing_goodresults, ForceAnnealing_oldresults, ForceAnnealing_tocheck, ForceAnnealing_with_BondGraph, ForceAnnealing_with_BondGraph_continued, ForceAnnealing_with_BondGraph_continued_betteresults, ForceAnnealing_with_BondGraph_contraction-expansion, FragmentAction_writes_AtomFragments, FragmentMolecule_checks_bonddegrees, GeometryObjects, Gui_Fixes, Gui_displays_atomic_force_velocity, ImplicitCharges, IndependentFragmentGrids, IndependentFragmentGrids_IndividualZeroInstances, IndependentFragmentGrids_IntegrationTest, IndependentFragmentGrids_Sole_NN_Calculation, JobMarket_RobustOnKillsSegFaults, JobMarket_StableWorkerPool, JobMarket_unresolvable_hostname_fix, MoreRobust_FragmentAutomation, ODR_violation_mpqc_open, PartialCharges_OrthogonalSummation, PdbParser_setsAtomName, PythonUI_with_named_parameters, QtGui_reactivate_TimeChanged_changes, Recreated_GuiChecks, Rewrite_FitPartialCharges, RotateToPrincipalAxisSystem_UndoRedo, SaturateAtoms_findBestMatching, SaturateAtoms_singleDegree, StoppableMakroAction, Subpackage_CodePatterns, Subpackage_JobMarket, Subpackage_LinearAlgebra, Subpackage_levmar, Subpackage_mpqc_open, Subpackage_vmg, Switchable_LogView, ThirdParty_MPQC_rebuilt_buildsystem, TrajectoryDependenant_MaxOrder, TremoloParser_IncreasedPrecision, TremoloParser_MultipleTimesteps, TremoloParser_setsAtomName, Ubuntu_1604_changes, stable
- Children:
- 1dc209
- Parents:
- fb2324
- git-author:
- Frederik Heber <heber@…> (12/10/11 15:17:06)
- git-committer:
- Frederik Heber <heber@…> (05/17/12 15:21:12)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
TabularUnified src/Fragmentation/Automation/FragmentController.hpp ¶
rfb2324 r5adb84 34 34 { 35 35 public: 36 FragmentController(boost::asio::io_service& io_service, const std::string& host, const std::string&service);36 FragmentController(boost::asio::io_service& io_service, const std::string& _host, const std::string& _service); 37 37 ~FragmentController(); 38 38 39 /// Handle completion of a calculate operation. 40 void handle_connect_calc(const boost::system::error_code& e, 41 boost::asio::ip::tcp::resolver::iterator endpoint_iterator); 42 43 /// Handle completion of a CheckResults operation. 44 void handle_connect_check(const boost::system::error_code& e, 45 boost::asio::ip::tcp::resolver::iterator endpoint_iterator); 46 47 /// Handle completion of a GetResults operation. 48 void handle_connect_get(const boost::system::error_code& e, 49 boost::asio::ip::tcp::resolver::iterator endpoint_iterator); 50 51 /// Handle completion of a Shutdown operation. 52 void handle_connect_shutdown(const boost::system::error_code& e, 53 boost::asio::ip::tcp::resolver::iterator endpoint_iterator); 54 55 /// Handle completion of an operation. 56 void handle_FinishOperation(const boost::system::error_code& e); 57 58 /// Callback function when bunch of jobs have been sent. 59 void handle_SendJobs(const boost::system::error_code& e); 60 61 /// Callback function when doneJobs have been received. 62 void handle_ReceiveDoneJobs(const boost::system::error_code& e); 63 64 /// Callback function when results are about to be received. 65 void handle_ReceivingResults(const boost::system::error_code& e); 66 67 /// Callback function when results have been received. 68 void handle_ReceivedResults(const boost::system::error_code& e); 69 70 /// place number of jobs into this controller 71 void addJobs(const std::vector<FragmentJob> &jobs); 72 73 /// prepares the calculation of the results 74 void calculateResults(); 75 76 enum Exitflag_t { 77 OkFlag = 0, 78 ErrorFlag = 255 79 }; 39 class Operation { 40 public: 41 Operation(Connection &_connection, const std::string& _host, const std::string& _service); 42 virtual ~Operation(); 43 public: 44 /// The Connection to the server. 45 Connection &connection_; 46 47 // virtual function pointer to the operation to do 48 virtual void operator()() = 0; 49 50 /// Handle completion of an operation. 51 void handle_FinishOperation(const boost::system::error_code& e); 52 53 enum Exitflag_t { 54 OkFlag = 0, 55 ErrorFlag = 255 56 }; 57 58 // get the exit flag of the last operations 59 size_t getExitflag() const 60 { 61 return Exitflag; 62 } 63 64 protected: 65 /// internal function to resolve host name and ip address 66 boost::asio::ip::tcp::resolver::iterator getEndpointIterator(); 67 68 /// internal function to disconnect from server 69 void disconnect(); 70 71 protected: 72 /// host name of server 73 const std::string host; 74 75 // service to connect to to 76 const std::string service; 77 78 /// flag of operation to give on program exit 79 enum Exitflag_t Exitflag; 80 }; 81 82 class ReceiveJobsOperation : public Operation { 83 public: 84 /// Constructor for class ReceiveJobsOperation. 85 ReceiveJobsOperation(Connection &_connection, const std::string& _host, const std::string& _service) : 86 Operation(_connection, _host, _service) {} 87 /// Destructor for class ReceiveJobsOperation 88 ~ReceiveJobsOperation() {} 89 90 public: 91 /// Placing receive jobs operations into an io_service 92 virtual void operator()(); 93 94 /// Handle completion of a calculate operation. 95 void handle_connect_calc(const boost::system::error_code& e, 96 boost::asio::ip::tcp::resolver::iterator endpoint_iterator); 97 98 /// Callback function when bunch of jobs have been sent. 99 void handle_SendJobs(const boost::system::error_code& e); 100 101 /// Handle completion of an operation. 102 void handle_FinishOperation(const boost::system::error_code& e); 103 104 /// internal function to connect to server and send jobs for calculation 105 void connect_calc(); 106 107 /// Setter for jobs 108 void addJobs(const std::vector<FragmentJob> &jobs); 109 110 /// Getter for number of size of jobs 111 size_t getPresentJobs() const; 112 113 protected: 114 /// bunch of jobs 115 std::vector<FragmentJob> jobs; 116 }; 117 118 struct CheckResultsOperation : public Operation { 119 public: 120 /// Constructor for class CheckResultsOperation. 121 CheckResultsOperation(Connection &_connection, const std::string& _host, const std::string& _service) : 122 Operation(_connection, _host, _service), 123 doneJobs(0) 124 {} 125 /// Destructor for class CheckResultsOperation 126 ~CheckResultsOperation() {} 127 128 public: 129 // placing receive jobs operations into an io_service 130 virtual void operator()(); 131 132 /// Handle completion of a CheckResults operation. 133 void handle_connect_check(const boost::system::error_code& e, 134 boost::asio::ip::tcp::resolver::iterator endpoint_iterator); 135 136 /// Callback function when doneJobs have been received. 137 void handle_ReceiveDoneJobs(const boost::system::error_code& e); 138 139 /// Handle completion of an operation. 140 void handle_FinishOperation(const boost::system::error_code& e); 141 142 /// internal function to connect to server and check done jobs 143 void connect_check(); 144 145 /// Getter for doneJobs 146 size_t getDoneJobs() const; 147 148 protected: 149 /// currently calculated results 150 size_t doneJobs; 151 }; 152 153 struct SendResultsOperation : public Operation { 154 public: 155 /// Constructor for class SendResultsOperation. 156 SendResultsOperation(Connection &_connection, const std::string& _host, const std::string& _service) : 157 Operation(_connection, _host, _service) {} 158 /// Destructor for class SendResultsOperation 159 ~SendResultsOperation() {} 160 161 public: 162 // placing receive jobs operations into an io_service 163 virtual void operator()(); 164 165 /// Handle completion of a GetResults operation. 166 void handle_connect_get(const boost::system::error_code& e, 167 boost::asio::ip::tcp::resolver::iterator endpoint_iterator); 168 169 /// Callback function when results are about to be received. 170 void handle_ReceivingResults(const boost::system::error_code& e); 171 172 /// Callback function when results have been received. 173 void handle_ReceivedResults(const boost::system::error_code& e); 174 175 /// internal function to connect to server and receive calculated results 176 void connect_get(); 177 178 /// Getter for results 179 std::vector<FragmentResult> getResults(); 180 181 protected: 182 /// bunch of results 183 std::vector<FragmentResult> results; 184 }; 185 186 struct ShutdownOperation : public Operation { 187 public: 188 /// Constructor for class ShutdownOperation. 189 ShutdownOperation(Connection &_connection, const std::string& _host, const std::string& _service) : 190 Operation(_connection, _host, _service) {} 191 /// Destructor for class ShutdownOperation 192 ~ShutdownOperation() {} 193 194 public: 195 // placing receive jobs operations into an io_service 196 virtual void operator()(); 197 198 /// Handle completion of a Shutdown operation. 199 void handle_connect_shutdown(const boost::system::error_code& e, 200 boost::asio::ip::tcp::resolver::iterator endpoint_iterator); 201 202 /// internal function to connect to server and receive calculated results 203 void connect_shutdown(); 204 205 }; 206 207 protected: 208 /// The Connection to the server. 209 Connection connection_; 210 211 public: 212 213 ReceiveJobsOperation recjobs; 214 CheckResultsOperation checkres; 215 SendResultsOperation sendres; 216 ShutdownOperation shutdown; 80 217 81 218 // get the exit flag of the last operations 82 219 size_t getExitflag() const 83 220 { 84 return Exitflag; 85 } 86 87 /// prepares the receival of the results 88 void obtainResults(); 89 90 /// prepares the server's shutdown 91 void shutdown(); 221 if (recjobs.getExitflag() != 0) 222 return recjobs.getExitflag(); 223 if (checkres.getExitflag() != 0) 224 return checkres.getExitflag(); 225 if (sendres.getExitflag() != 0) 226 return sendres.getExitflag(); 227 if (shutdown.getExitflag() != 0) 228 return shutdown.getExitflag(); 229 return 0; 230 } 231 232 /// place number of jobs into this controller 233 void addJobs(const std::vector<FragmentJob> &jobs) 234 { 235 recjobs.addJobs(jobs); 236 } 92 237 93 238 /// get the results for the current jobs 94 std::vector<FragmentResult> getResults() ;95 96 /// get the number of finished results for the current jobs97 void checkResults();239 std::vector<FragmentResult> getResults() 240 { 241 return sendres.getResults(); 242 } 98 243 99 244 /// Getter for doneJobs 100 size_t getDoneJobs() const; 245 size_t getDoneJobs() const 246 { 247 return checkres.getDoneJobs(); 248 } 101 249 102 250 /// Getter for number of jobs in the queue 103 size_t getPresentJobs() const; 251 size_t getPresentJobs() const 252 { 253 return recjobs.getPresentJobs(); 254 } 104 255 105 256 private: 106 /// internal function to resolve host name and ip address107 boost::asio::ip::tcp::resolver::iterator getEndpointIterator();108 109 /// internal function to connect to server and send jobs for calculation110 void connect_calc();111 112 /// internal function to connect to server and check done jobs113 void connect_check();114 115 /// internal function to connect to server and receive calculated results116 void connect_get();117 118 /// internal function to connect to server and receive calculated results119 void connect_shutdown();120 121 /// internal function to disconnect from server122 void disconnect();123 124 private:125 /// The Connection to the server.126 Connection connection_;127 128 257 /// host name of server 129 258 const std::string host; … … 131 260 // service to connect to to 132 261 const std::string service; 133 134 /// bunch of jobs135 std::vector<FragmentJob> jobs;136 137 /// flag to give on program exit138 enum Exitflag_t Exitflag;139 140 /// bunch of results141 std::vector<FragmentResult> results;142 143 /// currently calculated results144 size_t doneJobs;145 262 }; 146 263
Note:
See TracChangeset
for help on using the changeset viewer.