added missing stuff
This commit is contained in:
@@ -1,4 +1,100 @@
|
||||
#ifndef DUMMYAPI_H
|
||||
#define DUMMYAPI_H
|
||||
|
||||
#include "api.h"
|
||||
|
||||
class DummyAPI : public API {
|
||||
|
||||
private:
|
||||
|
||||
/** all attached listeners */
|
||||
std::vector<APIListener*> listeners;
|
||||
|
||||
int dstID = -1;
|
||||
bool enabled;
|
||||
std::thread thread;
|
||||
std::string dataFolder;
|
||||
float speed = 1.0f;
|
||||
std::vector<Point3> points;
|
||||
|
||||
|
||||
public:
|
||||
|
||||
/** ctor with the folder where the data-files reside */
|
||||
DummyAPI(const std::string& dataFolder) : dataFolder(dataFolder) {
|
||||
;
|
||||
}
|
||||
|
||||
void setSpeed(const float speed) {
|
||||
this->speed = speed;
|
||||
}
|
||||
|
||||
void setTarget(const Point3 p) override {
|
||||
(void) p;
|
||||
throw Exception("not yet implemented!");
|
||||
}
|
||||
|
||||
void setTarget(const int id) override {
|
||||
|
||||
const std::string fileName = dataFolder + "/" + std::to_string(id) + ".dat";
|
||||
std::ifstream in(fileName);
|
||||
|
||||
if (id == -1) {throw Exception("call setTarget(id) first!");}
|
||||
if (!in.good()) {throw Exception("failed to load file: '" + fileName + "'");}
|
||||
|
||||
// load
|
||||
while (in.good() && !in.eof()) {
|
||||
float x, y, z;
|
||||
in >> x;
|
||||
in >> y;
|
||||
in >> z;
|
||||
points.push_back(Point3(x,y,z));
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
void startNavigation() override {
|
||||
enabled = true;
|
||||
dummySender();
|
||||
}
|
||||
|
||||
void stopNavigation() override {
|
||||
enabled = false;
|
||||
thread.join();
|
||||
}
|
||||
|
||||
void addListener(APIListener* l) override {
|
||||
listeners.push_back(l);
|
||||
}
|
||||
|
||||
Point3 getDst() {
|
||||
return points[points.size() - 2];
|
||||
}
|
||||
|
||||
private:
|
||||
|
||||
/** send dummy data using the given file */
|
||||
void dummySender() {
|
||||
|
||||
// run-loop
|
||||
auto run = [&] () {
|
||||
|
||||
std::vector<Point3> pts = points; // local copy
|
||||
|
||||
while(!pts.empty() && enabled) {
|
||||
Point3 cur = pts.front();
|
||||
pts.erase(pts.begin());
|
||||
for (APIListener* l : listeners) {l->onPositionUpdate(cur);}
|
||||
std::this_thread::sleep_for(std::chrono::milliseconds( (int)(500/speed) ));
|
||||
}
|
||||
|
||||
};
|
||||
|
||||
// run
|
||||
thread = std::thread(run);
|
||||
|
||||
}
|
||||
|
||||
|
||||
};
|
||||
#endif // DUMMYAPI_H
|
||||
|
||||
48
api/api.h
48
api/api.h
@@ -1,4 +1,52 @@
|
||||
#ifndef API_H
|
||||
#define API_H
|
||||
|
||||
#include <vector>
|
||||
#include <thread>
|
||||
#include <chrono>
|
||||
#include <fstream>
|
||||
|
||||
#include "../geo/Point3.h"
|
||||
|
||||
class APIListener {
|
||||
|
||||
public:
|
||||
|
||||
/** dtor */
|
||||
virtual ~APIListener() {;}
|
||||
|
||||
/** the currently estimated path to the target has changed */
|
||||
virtual void onPathUpdate(const std::vector<Point3>& curPath) = 0;
|
||||
|
||||
/** the currently estimated position has changed */
|
||||
virtual void onPositionUpdate(const Point3 curPos) = 0;
|
||||
|
||||
};
|
||||
|
||||
class API {
|
||||
|
||||
public:
|
||||
|
||||
/** dtor */
|
||||
virtual ~API() {;}
|
||||
|
||||
/** set the desired target by using the given position */
|
||||
virtual void setTarget(const Point3 p) = 0;
|
||||
|
||||
/** set the desired target by using the given POI-ID */
|
||||
virtual void setTarget(const int id) = 0;
|
||||
|
||||
/** start the navigation process */
|
||||
virtual void startNavigation() = 0;
|
||||
|
||||
/** stop the navigation process */
|
||||
virtual void stopNavigation() = 0;
|
||||
|
||||
/** attach as listener to the API */
|
||||
virtual void addListener(APIListener* l) = 0;
|
||||
|
||||
};
|
||||
|
||||
|
||||
|
||||
#endif // API_H
|
||||
|
||||
Reference in New Issue
Block a user