IServerSPtr ServersManager::createServer(IConnectionSettingsBaseSPtr settings) { DCHECK(settings); IServerSPtr result; connectionTypes conT = settings->connectionType(); IServerSPtr ser = findServerBySetting(settings); if(conT == REDIS){ RedisServer *newRed = NULL; if(!ser){ IDriverSPtr dr(new RedisDriver(settings)); dr->start(); newRed = new RedisServer(dr, true); } else{ newRed = new RedisServer(ser->driver(), false); } result.reset(newRed); servers_.push_back(result); } else if(conT == MEMCACHED){ MemcachedServer *newMem = NULL; if(!ser){ IDriverSPtr dr(new MemcachedDriver(settings)); dr->start(); newMem = new MemcachedServer(dr, true); } else{ newMem = new MemcachedServer(ser->driver(), false); } result.reset(newMem); servers_.push_back(result); } else if(conT == SSDB){ SsdbServer *newSsdb = NULL; if(!ser){ IDriverSPtr dr(new SsdbDriver(settings)); dr->start(); newSsdb = new SsdbServer(dr, true); } else{ newSsdb = new SsdbServer(ser->driver(), false); } result.reset(newSsdb); servers_.push_back(result); } DCHECK(result); if(ser && syncServers_){ result->syncWithServer(ser.get()); } return result; }
IServerSPtr ServersManager::createServer(IConnectionSettingsBaseSPtr settings) { DCHECK(settings); IServerSPtr result; connectionTypes conT = settings->connectionType(); IServerSPtr ser = findServerBySetting(settings); #ifdef BUILD_WITH_REDIS if(conT == REDIS){ result.reset(make_server<RedisServer, RedisDriver>(ser, settings)); } #endif #ifdef BUILD_WITH_MEMCACHED if(conT == MEMCACHED){ result.reset(make_server<MemcachedServer, MemcachedDriver>(ser, settings)); } #endif #ifdef BUILD_WITH_SSDB if(conT == SSDB){ result.reset(make_server<SsdbServer, SsdbDriver>(ser, settings)); } #endif #ifdef BUILD_WITH_LEVELDB if(conT == LEVELDB){ result.reset(make_server<LeveldbServer, LeveldbDriver>(ser, settings)); } #endif DCHECK(result); if(result){ servers_.push_back(result); if(ser && syncServers_){ result->syncWithServer(ser.get()); } } return result; }