]> git.mxchange.org Git - simgear.git/commitdiff
Initial work on syncing non-scenery data.
authorJames Turner <zakalawe@mac.com>
Thu, 3 Oct 2013 20:42:18 +0000 (21:42 +0100)
committerJames Turner <zakalawe@mac.com>
Thu, 17 Oct 2013 15:39:29 +0000 (16:39 +0100)
This is some initial pieces to synchronise other pieces of base
data than scenery via the sync mechanism. An additional sync slot is
added to avoid scenery or other data blocking each other.

simgear/io/http_svn.cxx
simgear/scene/tsync/terrasync.cxx
simgear/scene/tsync/terrasync.hxx

index caa81e9982d16f9388809163ceb0fe9049e3e1dc..f39072d1ccfd590c3b04a9cf2fb2289debe46d82 100644 (file)
@@ -32,10 +32,12 @@ int main(int argc, char* argv[])
   httpClient = &cl;
 
   
-  SGPath p("/home/jmt/Desktop/scenemodels");
+  SGPath p("/Users/jmt/Desktop/traffic");
   SVNRepository airports(p, &cl);
  //  airports.setBaseUrl("http://svn.goneabitbursar.com/testproject1");
-  airports.setBaseUrl("http://terrascenery.googlecode.com/svn/trunk/data/Scenery/Models");
+//  airports.setBaseUrl("http://terrascenery.googlecode.com/svn/trunk/data/Scenery/Models");
+  
+  airports.setBaseUrl("http://fgfs.goneabitbursar.com/fgfsai/trunk/AI/Traffic");
   
 //  airports.setBaseUrl("http://terrascenery.googlecode.com/svn/trunk/data/Scenery/Airports");
   airports.update();
index 0011169130dade99cafe53bd99eea685053763e0..5765f481ba3863f9c813872458dda725f5dea4db 100644 (file)
@@ -118,7 +118,8 @@ public:
         Stop = 0,   ///< special item indicating to stop the SVNThread
         Tile,
         AirportData,
-        SharedModels
+        SharedModels,
+        AIData
     };
     
     enum Status
@@ -176,7 +177,8 @@ public:
 
 static const int SYNC_SLOT_TILES = 0; ///< Terrain and Objects sync
 static const int SYNC_SLOT_SHARED_DATA = 1; /// shared Models and Airport data
-static const unsigned int NUM_SYNC_SLOTS = 2;
+static const int SYNC_SLOT_AI_DATA = 2; /// AI traffic and models
+static const unsigned int NUM_SYNC_SLOTS = 3;
 
 /**
  * @brief translate a sync item type into one of the available slots.
@@ -189,6 +191,9 @@ static unsigned int syncSlotForType(SyncItem::Type ty)
     case SyncItem::SharedModels:
     case SyncItem::AirportData:
         return SYNC_SLOT_SHARED_DATA;
+    case SyncItem::AIData:
+        return SYNC_SLOT_AI_DATA;
+        
     default:
         return SYNC_SLOT_SHARED_DATA;
     }
@@ -214,6 +219,8 @@ public:
    SyncItem getNewTile() { return _freshTiles.pop_front();}
 
    void   setSvnServer(string server)       { _svn_server   = stripPath(server);}
+   void   setSvnDataServer(string server)   { _svn_data_server   = stripPath(server);}
+    
    void   setExtSvnUtility(string svn_util) { _svn_command  = simgear::strutils::strip(svn_util);}
    void   setRsyncServer(string server)     { _rsync_server = simgear::strutils::strip(server);}
    void   setLocalDir(string dir)           { _local_dir    = stripPath(dir);}
@@ -267,6 +274,7 @@ private:
    SGBlockingDeque <SyncItem> _freshTiles;
    bool _use_svn;
    string _svn_server;
+   string _svn_data_server;
    string _svn_command;
    string _rsync_server;
    string _local_dir;
@@ -580,8 +588,13 @@ void SGTerraSync::SvnThread::updateSyncSlot(SyncSlot &slot)
             }
         } // of creating directory step
         
+        string serverUrl(_svn_server);
+        if (slot.currentItem._type == SyncItem::AIData) {
+            serverUrl = _svn_data_server;
+        }
+        
         slot.repository.reset(new SVNRepository(path, &_http));
-        slot.repository->setBaseUrl(_svn_server + "/" + slot.currentItem._dir);
+        slot.repository->setBaseUrl(serverUrl + "/" + slot.currentItem._dir);
         slot.repository->update();
         
         slot.nextWarnTimeout = 20000;
@@ -779,6 +792,7 @@ void SGTerraSync::reinit()
     if (_terraRoot->getBoolValue("enabled",false))
     {
         _svnThread->setSvnServer(_terraRoot->getStringValue("svn-server",""));
+        _svnThread->setSvnDataServer(_terraRoot->getStringValue("svn-data-server",""));
         _svnThread->setRsyncServer(_terraRoot->getStringValue("rsync-server",""));
         _svnThread->setLocalDir(_terraRoot->getStringValue("scenery-dir",""));
         _svnThread->setAllowedErrorCount(_terraRoot->getIntValue("max-errors",5));
@@ -867,11 +881,7 @@ void SGTerraSync::update(double)
         {
             SyncItem next = _svnThread->getNewTile();
             
-            if (next._type == SyncItem::Tile) {
-                if (_activeTileDirs.find(next._dir) == _activeTileDirs.end()) {
-                    SG_LOG(SG_TERRAIN, SG_INFO, "TTTTTTTT: finished tile not found in active set!: " << next._dir);
-                }
-                
+            if ((next._type == SyncItem::Tile) || (next._type == SyncItem::AIData)) {
                 _activeTileDirs.erase(next._dir);
             }
         } // of freshly synced items
@@ -1062,3 +1072,19 @@ bool SGTerraSync::isTileDirPending(const std::string& sceneryDir) const
     return false;
 }
 
+void SGTerraSync::scheduleDataDir(const std::string& dataDir)
+{
+    if (_activeTileDirs.find(dataDir) != _activeTileDirs.end()) {
+        return;
+    }
+    
+    _activeTileDirs.insert(dataDir);
+    SyncItem w(dataDir, SyncItem::AIData);
+    _svnThread->request( w );
+
+}
+
+bool SGTerraSync::isDataDirPending(const std::string& dataDir) const
+{
+    return (_activeTileDirs.find(dataDir) != _activeTileDirs.end());
+}
index 49bb34e2f093476ea735b0395a7d6a16eb50f9fa..80efb1c6ce57afb395ef42ad8a9cad3183401ba6 100644 (file)
@@ -71,6 +71,11 @@ public:
      * 
      */
     bool isTileDirPending(const std::string& sceneryDir) const;
+    
+    
+    void scheduleDataDir(const std::string& dataDir);
+    
+    bool isDataDirPending(const std::string& dataDir) const;
 protected:
     void syncAirportsModels();
     void syncArea(int lat, int lon);