Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035 #ifndef _DB_TASK_DISPATCHER_H_
00036 #define _DB_TASK_DISPATCHER_H_
00037
00038 #include <vector>
00039 #include <string>
00040 #include <map>
00041
00042 #include "plugin.h"
00043
00044 namespace db_planner {
00045 class DatabaseManager;
00046 class TaskRecord;
00047 }
00048
00049 namespace graspit_dbase_tasks {
00050
00051 class DBTask;
00052 class DBTaskDispatcher;
00053
00055 class DBTaskCreator
00056 {
00057 public:
00058 virtual DBTask* operator()(DBTaskDispatcher *disp, db_planner::DatabaseManager *mgr, db_planner::TaskRecord rec) = 0;
00059 };
00060
00062
00084 class DBTaskDispatcher : public Plugin
00085 {
00086 public:
00087 enum Status {READY, NO_TASK, ERROR, RUNNING, DONE};
00088 private:
00090 std::map<std::string,DBTaskCreator*> mTaskCreators;
00091
00093 db_planner::DatabaseManager *mDBMgr;
00094
00096 DBTask *mCurrentTask;
00097
00099 Status mStatus;
00100
00102 int mCompletedTasks;
00103
00105 int mMaxTasks;
00106
00108 std::vector<std::string> mAcceptedTaskTypes;
00109
00111 int connect(std::string host, int port, std::string username,
00112 std::string password, std::string database);
00113
00114 public:
00115 DBTaskDispatcher();
00116 ~DBTaskDispatcher();
00117
00119 int init(int argc, char **argv);
00120
00122 void checkCurrentTask();
00123
00125 void startNewTask();
00126
00128 void registerTaskCreator(std::string task_name, DBTaskCreator* creator)
00129 {
00130 mTaskCreators[task_name] = creator;
00131 mAcceptedTaskTypes.push_back(task_name);
00132 }
00133
00135 int mainLoop();
00136
00138 Status getStatus() const {return mStatus;}
00139 };
00140
00141 }
00142
00143 #endif