bool LoadRealmInfo() { boost::asio::ip::tcp::resolver resolver(_ioService); boost::asio::ip::tcp::resolver::iterator end; QueryResult result = LoginDatabase.PQuery("SELECT id, name, address, localAddress, localSubnetMask, port, icon, flag, timezone, allowedSecurityLevel, population, gamebuild, Region, Battlegroup FROM realmlist WHERE id = %u", realmHandle.Index); if (!result) return false; Field* fields = result->Fetch(); realm.Name = fields[1].GetString(); boost::asio::ip::tcp::resolver::query externalAddressQuery(ip::tcp::v4(), fields[2].GetString(), ""); boost::system::error_code ec; boost::asio::ip::tcp::resolver::iterator endPoint = resolver.resolve(externalAddressQuery, ec); if (endPoint == end || ec) { TC_LOG_ERROR("server.worldserver", "Could not resolve address %s", fields[2].GetString().c_str()); return false; } realm.ExternalAddress = (*endPoint).endpoint().address(); boost::asio::ip::tcp::resolver::query localAddressQuery(ip::tcp::v4(), fields[3].GetString(), ""); endPoint = resolver.resolve(localAddressQuery, ec); if (endPoint == end || ec) { TC_LOG_ERROR("server.worldserver", "Could not resolve address %s", fields[3].GetString().c_str()); return false; } realm.LocalAddress = (*endPoint).endpoint().address(); boost::asio::ip::tcp::resolver::query localSubmaskQuery(ip::tcp::v4(), fields[4].GetString(), ""); endPoint = resolver.resolve(localSubmaskQuery, ec); if (endPoint == end || ec) { TC_LOG_ERROR("server.worldserver", "Could not resolve address %s", fields[4].GetString().c_str()); return false; } realm.LocalSubnetMask = (*endPoint).endpoint().address(); realm.Port = fields[5].GetUInt16(); realm.Type = fields[6].GetUInt8(); realm.Flags = RealmFlags(fields[7].GetUInt8()); realm.Timezone = fields[8].GetUInt8(); realm.AllowedSecurityLevel = AccountTypes(fields[9].GetUInt8()); realm.PopulationLevel = fields[10].GetFloat(); realm.Id.Index = fields[0].GetUInt32(); realm.Id.Build = fields[11].GetUInt32(); realm.Id.Region = fields[12].GetUInt8(); realm.Id.Battlegroup = fields[13].GetUInt8(); return true; }
/// Initialize connection to the databases bool StartDB() { MySQL::Library_Init(); // Load databases DatabaseLoader loader("server.worldserver", DatabaseLoader::DATABASE_NONE); loader .AddDatabase(HotfixDatabase, "Hotfix") .AddDatabase(WorldDatabase, "World") .AddDatabase(CharacterDatabase, "Character") .AddDatabase(LoginDatabase, "Login"); if (!loader.Load()) return false; ///- Get the realm Id from the configuration file realmHandle.Index = sConfigMgr->GetIntDefault("RealmID", 0); if (!realmHandle.Index) { TC_LOG_ERROR("server.worldserver", "Realm ID not defined in configuration file"); return false; } // Realm Handles QueryResult realmIdQuery = LoginDatabase.PQuery("SELECT `Region`,`Battlegroup` FROM `realmlist` WHERE `id`=%u", realmHandle.Index); if (!realmIdQuery) { TC_LOG_ERROR("server.worldserver", "Realm id %u not defined in realmlist table", realmHandle.Index); return false; } realmHandle.Region = (*realmIdQuery)[0].GetUInt8(); realmHandle.Battlegroup = (*realmIdQuery)[1].GetUInt8(); TC_LOG_INFO("server.worldserver", "Realm running as realm ID %u region %u battlegroup %u", realmHandle.Index, uint32(realmHandle.Region), uint32(realmHandle.Battlegroup)); ///- Clean the database before starting ClearOnlineAccounts(); ///- Insert version info into DB WorldDatabase.PExecute("UPDATE version SET core_version = '%s', core_revision = '%s'", GitRevision::GetFullVersion(), GitRevision::GetHash()); // One-time query sWorld->LoadDBVersion(); TC_LOG_INFO("server.worldserver", "Using World DB: %s", sWorld->GetDBVersion()); return true; }