]> git.mxchange.org Git - flightgear.git/commitdiff
PropertyChangeWebsocket: fire change after subscribe
authorTorsten Dreyer <torsten@t3r.de>
Fri, 14 Mar 2014 20:36:29 +0000 (21:36 +0100)
committerTorsten Dreyer <torsten@t3r.de>
Fri, 14 Mar 2014 20:36:29 +0000 (21:36 +0100)
src/Network/http/PropertyChangeObserver.cxx
src/Network/http/PropertyChangeObserver.hxx
src/Network/http/PropertyChangeWebsocket.cxx
src/Network/http/httpd.cxx

index 85272ff7d9c04fd6c5302337c6042665dde58fdc..6594c2d0aad38fa882627eaba687c3eb7c6da1f6 100644 (file)
@@ -50,6 +50,14 @@ void PropertyChangeObserver::check()
     if ((*it)->_changed) (*it)->_prevValue = (*it)->_node->getStringValue();
   }
 }
+
+void PropertyChangeObserver::uncheck()
+{
+  for (Entries_t::iterator it = _entries.begin(); it != _entries.end(); ++it) {
+    (*it)->_changed = false;
+  }
+}
+
 const SGPropertyNode_ptr PropertyChangeObserver::addObservation( const string propertyName)
 {
   for (Entries_t::iterator it = _entries.begin(); it != _entries.end(); ++it) {
@@ -72,14 +80,12 @@ const SGPropertyNode_ptr PropertyChangeObserver::addObservation( const string pr
   return empty;
 }
 
-bool PropertyChangeObserver::getChangedValue(const SGPropertyNode_ptr node, string & out)
+bool PropertyChangeObserver::isChangedValue(const SGPropertyNode_ptr node)
 {
   for (Entries_t::iterator it = _entries.begin(); it != _entries.end(); ++it) {
     PropertyChangeObserverEntryRef entry = *it;
 
     if( entry->_node == node && entry->_changed ) {
-      out = entry->_node->getStringValue();
-      entry->_changed = false;
       return true;
     }
   }
index d57637338d341023a3afe8cb26ad60b862b3be00..a815715835ce079049cc7d17975d66a345e23ace 100644 (file)
@@ -46,9 +46,10 @@ public:
   virtual ~PropertyChangeObserver();
 
   const SGPropertyNode_ptr addObservation( const std::string propertyName);
-  bool getChangedValue(const SGPropertyNode_ptr node, std::string & out);
+  bool isChangedValue(const SGPropertyNode_ptr node);
 
   void check();
+  void uncheck();
 
 private:
   typedef std::vector<PropertyChangeObserverEntryRef> Entries_t;
index 2bd77acad049218ecdf9c60f447e76e01ebaebc8..bfe5841b6f09d1090fff58a6f78e400d7cacd724 100644 (file)
@@ -95,8 +95,8 @@ void PropertyChangeWebsocket::update(WebsocketWriter & writer)
     SGPropertyNode_ptr node = *it;
 
     string newValue;
-    if (_propertyChangeObserver->getChangedValue(node, newValue)) {
-      SG_LOG(SG_NETWORK, SG_ALERT, "httpd: new Value for " << node->getPath(true) << " '" << newValue << "' #" << id);
+    if (_propertyChangeObserver->isChangedValue(node)) {
+      SG_LOG(SG_NETWORK, SG_ALERT, "httpd: new Value for " << node->getPath(true) << " '" << node->getStringValue() << "' #" << id);
       writer.writeText( JSON::toJsonString( false, node, 0 ) );
     }
   }
index 6575b0b83aa30d87d051dad9759fd136050a2edc..c85b7d43a437a1f55789c36c4ae76a89e5794564 100644 (file)
@@ -172,6 +172,7 @@ void MongooseHttpd::update(double dt)
   _propertyChangeObserver.check();
   mg_poll_server(_server, 0);
   mg_iterate_over_connections(_server, &MongooseHttpd::staticIterateCallback);
+  _propertyChangeObserver.uncheck();
 }
 
 class MongooseHTTPRequest: public HTTPRequest {