From e9847bc21e1725d6f613fb2164882731763e3d74 Mon Sep 17 00:00:00 2001 From: Kevron Rees Date: Sat, 4 May 2013 00:52:23 -0700 Subject: [PATCH] fixed db playback --- examples/storage | Bin 21741568 -> 21760000 bytes plugins/database/databasesink.cpp | 53 ++++++++++++++++++++++++++++++++------ plugins/database/databasesink.h | 5 +++- 3 files changed, 49 insertions(+), 9 deletions(-) diff --git a/examples/storage b/examples/storage index e75b21b4423cba401d0acccd6d91e5b7585ea86b..65bd8a36b0b90c30fc20eb7c12ef74f50ccf41eb 100644 GIT binary patch delta 7471 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 delta 1199 zcmZ|PS3uAO6oqmAGDO@8qT;}*04E?s+>8x4LF^R(18NteU*^hLn_9TbAdSCJhUaM4Cvdq)EDD zNK?s_W|Ae%rG>PVR?=G9NLy(q?Il}sq=V#2N9iP;B~Q9YSLr6*C0}|-Pw6GSrH}NL ze$rnCNP!HLK{8l|$WR$3g)&@WUhE&Qf{EwQErl( zWrf@#x5{m@Qf`+!Lo*2rVBRvwpivR*GAWzFP@~k{3&&vz)qP!$8%PaD#ye1pvb$LVHl(*z*nS3r^$d~e!d@bL|xAL8QFF(kS@{??qEz%%A%P;b)Y?a^Sclks9l)vO}X_SBD zU)i>pWEn|l5>i82NDmpIX~+!CLRM%VT7;INRcIaBgtnnwXdkjePUsMFL&wl5bPjo; zOXwQ9h3+9g^awpeuh2X634KGq&_4_a1z}(q6b6SOVQ3f@3d8VF6pBMh7!gK>QDJl# z6UK&dVSJbnO2fo3DU^lDp*&0pQ^T|{Jye7l$yzFt6-Ak|lO-uTzDF$^a^}>{FRo0= zYd1DlEv((tSXHrZX-Q==Z&5~)TAz|y|KEM?j`IH_Ev2kxeQn|9-0ZrFm6b_B`ph+3 G-L@T^$MlB) diff --git a/plugins/database/databasesink.cpp b/plugins/database/databasesink.cpp index 67f06a3..fa28f2b 100644 --- a/plugins/database/databasesink.cpp +++ b/plugins/database/databasesink.cpp @@ -78,6 +78,9 @@ int getNextEvent(gpointer data) if(!pbshared) throw std::runtime_error("failed to cast PlaybackShared object"); + if(pbshared->stop) + return 0; + auto itr = pbshared->playbackQueue.begin(); if(itr == pbshared->playbackQueue.end()) @@ -104,10 +107,11 @@ int getNextEvent(gpointer data) if(t > 0) g_timeout_add((t*1000) / pbshared->playBackMultiplier, getNextEvent, pbshared); else - g_timeout_add(t, getNextEvent, pbshared); + g_timeout_add(1, getNextEvent, pbshared); } pbshared->playbackQueue.remove(obj); + DebugOut()<<"playback Queue size: "<playbackQueue.size()<(true); + request.value = new DatabaseLoggingType(true); setProperty(request); } @@ -172,7 +176,11 @@ DatabaseSink::DatabaseSink(AbstractRoutingEngine *engine, map > results = shared->db->select("SELECT * FROM "+tablename); + /// we are done with shared. clean up: + delete shared; + shared = NULL; + if(playbackShared) { delete playbackShared; @@ -313,6 +325,9 @@ void DatabaseSink::startPlayback() obj->value = results[i][1]; obj->source = results[i][2]; obj->time = boost::lexical_cast(results[i][3]); + + /// TODO: figure out why sequence is broken: + // obj->sequence = boost::lexical_cast(results[i][4]); playbackShared->playbackQueue.push_back(obj); @@ -329,6 +344,24 @@ void DatabaseSink::initDb() shared->db->init(databaseName, tablename, tablecreate); } +void DatabaseSink::setPlayback(bool v) +{ + AsyncSetPropertyRequest request; + request.property = DatabasePlaybackProperty; + request.value = new DatabasePlaybackType(v); + + setProperty(request); +} + +void DatabaseSink::setLogging(bool b) +{ + AsyncSetPropertyRequest request; + request.property = DatabaseLoggingProperty; + request.value = new DatabaseLoggingType(b); + + setProperty(request); +} + void DatabaseSink::propertyChanged(VehicleProperty::Property property, AbstractPropertyType *value, std::string uuid) { if(!shared) @@ -450,7 +483,7 @@ AsyncPropertyReply *DatabaseSink::setProperty(AsyncSetPropertyRequest request) { if(request.value->value()) { - ///TODO: start or stop logging thread + setPlayback(false); startDb(); reply->success = true; BasicPropertyType temp(true); @@ -481,19 +514,23 @@ AsyncPropertyReply *DatabaseSink::setProperty(AsyncSetPropertyRequest request) { if(request.value->value()) { + setLogging(false); startPlayback(); - BasicPropertyType temp(true); + BasicPropertyType temp(playback); routingEngine->updateProperty(DatabasePlaybackProperty,&temp,uuid()); } else { - /// TODO: stop playback + if(playbackShared) + playbackShared->stop = true; - BasicPropertyType temp(true); + playback = false; - routingEngine->updateProperty(DatabasePlaybackProperty,&temp,uuid()); + BasicPropertyType temp(playback); + + routingEngine->updateProperty(DatabasePlaybackProperty, &temp, uuid()); } reply->success = true; diff --git a/plugins/database/databasesink.h b/plugins/database/databasesink.h index aa88e82..6e22259 100644 --- a/plugins/database/databasesink.h +++ b/plugins/database/databasesink.h @@ -119,7 +119,7 @@ class PlaybackShared { public: PlaybackShared(AbstractRoutingEngine* re, std::string u, uint playbackMult) - :routingEngine(re),uuid(u),playBackMultiplier(playbackMult) {} + :routingEngine(re),uuid(u),playBackMultiplier(playbackMult),stop(false) {} ~PlaybackShared() { for(auto itr = playbackQueue.begin(); itr != playbackQueue.end(); itr++) @@ -136,6 +136,7 @@ public: std::list playbackQueue; uint playBackMultiplier; std::string uuid; + bool stop; }; class DatabaseSink : public AbstractSource @@ -164,6 +165,8 @@ private: //methods: void startDb(); void startPlayback(); void initDb(); + void setPlayback(bool v); + void setLogging(bool b); private: PropertyList mSubscriptions; -- 2.7.4