Initial work on syncing non-scenery data.

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.
This commit is contained in:
James Turner 2013-10-03 21:42:18 +01:00
parent b596e62a61
commit f75730f165
3 changed files with 43 additions and 10 deletions

View 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();

View 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());
}

View 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);