Connection connect(const std::string& url) { log_debug("connect(\"" << url << "\")"); std::string::size_type n = url.find(':'); if (n == std::string::npos) throw Error("invalid dburl \"" + url + '"'); std::string driverName = url.substr(0, n); std::string libraryUrl = url.substr(n + 1); log_debug("driver \"" << driverName << "\" url=\"" << libraryUrl << '"'); cxxtools::MutexLock lock(mutex); // lookup library-manager LibraryManager libraryManager; librariesType::const_iterator it = libraries.find(driverName); if (it == libraries.end()) { libraryManager = LibraryManager(driverName); libraries[driverName] = libraryManager; } else libraryManager = it->second; lock.unlock(); return libraryManager.connect(libraryUrl); }
bool Engine::Initialize(EngineDescription& desc) { this->desc = desc; useShadows = desc.Graphics.UseShadows; #pragma region Database sqlite3_open( StringWtoA(this->HPath.CombineWorkingPath(L"Data/TikiData.sqlite")).CStr(), &dataBase ); #pragma endregion #pragma region Modules window = TIKI_NEW WindowModule(this); if (!initModule(window)) { MessageBox(window->GetHWND(), L"Can't create Window.", L"TikiEngine 2.0", MB_ICONERROR); return false; } librarys = TIKI_NEW LibraryManager(this); if (!initModule(librarys)) { MessageBox(window->GetHWND(), L"Can't create LibraryManager.", L"TikiEngine 2.0", MB_ICONERROR); return false; } content = librarys->CreateModule<IContentManager>(); if (!initModule(content)) { MessageBox(window->GetHWND(), L"Can't init ContentManager.", L"TikiEngine 2.0", MB_ICONERROR); return false; } graphics = librarys->CreateModule<IGraphics>(); if (!initModule(graphics)) { MessageBox(window->GetHWND(), L"Can't init Graphics.", L"TikiEngine 2.0", MB_ICONERROR); return false; } sprites = librarys->CreateModule<ISpriteBatch>(); if (!initModule(sprites)) { MessageBox(window->GetHWND(), L"Can't init SpriteBatch.", L"TikiEngine 2.0", MB_ICONERROR); return false; } input = librarys->CreateModule<IInput>(); if (!initModule(input)) { MessageBox(window->GetHWND(), L"Can't init Input.", L"TikiEngine 2.0", MB_ICONERROR); return false; } sound = librarys->CreateModule<ISoundSystem>(); if (!initModule(sound)) { MessageBox(window->GetHWND(), L"Can't init Sound.", L"TikiEngine 2.0", MB_ICONERROR); return false; } physics = librarys->CreateModule<IPhysics>(); if (!initModule(physics)) { MessageBox(window->GetHWND(), L"Can't init Physics.", L"TikiEngine 2.0", MB_ICONERROR); return false; } #pragma endregion return true; }