aboutsummaryrefslogtreecommitdiff
path: root/apps/SoilMoistureIo.h
diff options
context:
space:
mode:
Diffstat (limited to 'apps/SoilMoistureIo.h')
-rw-r--r--apps/SoilMoistureIo.h58
1 files changed, 52 insertions, 6 deletions
diff --git a/apps/SoilMoistureIo.h b/apps/SoilMoistureIo.h
index 739758a..aff7c85 100644
--- a/apps/SoilMoistureIo.h
+++ b/apps/SoilMoistureIo.h
@@ -4,24 +4,54 @@
#include <ostream>
#include <vector>
#include <map>
+#include <memory>
+#include <boost/asio/buffer.hpp>
+#include <functional>
namespace trygvis {
namespace soil_moisture {
using namespace std;
+using namespace boost::asio;
-class SampleOutputStream {
+class Sample {
public:
- typedef map<string, string> it;
+ Sample() : entries() {
+ }
+
+ Sample(map<string, string> entries) : entries(entries) {
+ }
+
+ map<string, string>::iterator find(string &s) {
+ return entries.find(s);
+ }
+
+ map<string, string>::iterator begin() {
+ return entries.begin();
+ }
+
+ map<string, string>::iterator end() {
+ return entries.end();
+ }
- virtual void write(it values) = 0;
+ string& operator[](string key) {
+ return entries[key];
+ }
+
+private:
+ map<string, string> entries;
+};
+
+class SampleOutputStream {
+public:
+ virtual void write(Sample sample) = 0;
};
class CsvSampleOutputStream : public SampleOutputStream {
public:
CsvSampleOutputStream(ostream& stream, vector<string> fields);
- void write(it values);
+ void write(Sample values);
private:
ostream& stream;
@@ -32,7 +62,7 @@ class JsonSampleOutputStream : public SampleOutputStream {
public:
JsonSampleOutputStream(ostream& stream, vector<string> fields);
- void write(it values);
+ void write(Sample values);
private:
ostream& stream;
@@ -43,13 +73,29 @@ class SqlSampleOutputStream : public SampleOutputStream {
public:
SqlSampleOutputStream(ostream& stream, vector<string> fields);
- void write(it values);
+ void write(Sample values);
private:
ostream& stream;
vector<string> fields;
};
+class CsvParser {
+
+public:
+ CsvParser(shared_ptr<SampleOutputStream> output) : output(output), line(make_shared<vector<uint8_t>>()) {
+ }
+
+ void process(mutable_buffers_1 buffer);
+
+private:
+ void process_line(shared_ptr<vector<uint8_t>> packet);
+
+ static const uint8_t packet_delimiter = '\n';
+ shared_ptr<SampleOutputStream> output;
+ shared_ptr<vector<uint8_t>> line;
+};
+
}
}