Core/Realms: Move build info (and auth seeds) to database

Port From (https://github.com/TrinityCore/TrinityCore/commit/61f2eed3531ebfd2585ab05add31ae9e97598233)
This commit is contained in:
hondacrx
2019-12-12 13:17:57 -05:00
parent 56819e632d
commit 4e3971df0f
5 changed files with 280 additions and 58 deletions
+41 -46
View File
@@ -35,11 +35,44 @@ public class RealmManager : Singleton<RealmManager>
_updateTimer = new Timer(TimeSpan.FromSeconds(updateInterval).TotalMilliseconds);
_updateTimer.Elapsed += UpdateRealms;
LoadBuildInfo();
UpdateRealms(null, null);
_updateTimer.Start();
}
void LoadBuildInfo()
{
// 0 1 2 3 4 5 6
SQLResult result = DB.Login.Query("SELECT majorVersion, minorVersion, bugfixVersion, hotfixVersion, build, win64AuthSeed, mac64AuthSeed FROM build_info ORDER BY build ASC");
if (!result.IsEmpty())
{
do
{
RealmBuildInfo build = new RealmBuildInfo();
build.MajorVersion = result.Read<uint>(0);
build.MinorVersion = result.Read<uint>(1);
build.BugfixVersion = result.Read<uint>(2);
string hotfixVersion = result.Read<string>(3);
if (hotfixVersion.Length < build.HotfixVersion.Length)
build.HotfixVersion = hotfixVersion.ToCharArray();
build.Build = result.Read<uint>(4);
string win64AuthSeedHexStr = result.Read<string>(5);
if (win64AuthSeedHexStr.Length == build.Win64AuthSeed.Length * 2)
build.Win64AuthSeed = win64AuthSeedHexStr.ToByteArray();
string mac64AuthSeedHexStr = result.Read<string>(6);
if (mac64AuthSeedHexStr.Length == build.Mac64AuthSeed.Length * 2)
build.Mac64AuthSeed = mac64AuthSeedHexStr.ToByteArray();
_builds.Add(build);
} while (result.NextRow());
}
}
public void Close()
{
_updateTimer.Close();
@@ -119,37 +152,9 @@ public class RealmManager : Singleton<RealmManager>
return _realms.LookupByKey(id);
}
// List of client builds for verbose version info in realmlist packet
RealmBuildInfo[] ClientBuilds =
public RealmBuildInfo GetBuildInfo(uint build)
{
new RealmBuildInfo(32722, 8, 2, 5, ' ' ),
new RealmBuildInfo(32638, 8, 2, 5, ' ' ),
new RealmBuildInfo(32580, 8, 2, 5, ' ' ),
new RealmBuildInfo(32494, 8, 2, 5, ' ' ),
new RealmBuildInfo(28938, 8, 1, 5, ' ' ),
new RealmBuildInfo(21355, 6, 2, 4, ' ' ),
new RealmBuildInfo(20726, 6, 2, 3, ' ' ),
new RealmBuildInfo(20574, 6, 2, 2, 'a' ),
new RealmBuildInfo(20490, 6, 2, 2, 'a' ),
new RealmBuildInfo(15595, 4, 3, 4, ' ' ),
new RealmBuildInfo(14545, 4, 2, 2, ' ' ),
new RealmBuildInfo(13623, 4, 0, 6, 'a' ),
new RealmBuildInfo(13930, 3, 3, 5, 'a' ), // 3.3.5a China Mainland build
new RealmBuildInfo(12340, 3, 3, 5, 'a' ),
new RealmBuildInfo(11723, 3, 3, 3, 'a' ),
new RealmBuildInfo(11403, 3, 3, 2, ' ' ),
new RealmBuildInfo(11159, 3, 3, 0, 'a' ),
new RealmBuildInfo(10505, 3, 2, 2, 'a' ),
new RealmBuildInfo(9947, 3, 1, 3, ' ' ),
new RealmBuildInfo(8606, 2, 4, 3, ' ' ),
new RealmBuildInfo(6141, 1, 12, 3, ' ' ),
new RealmBuildInfo(6005, 1, 12, 2, ' ' ),
new RealmBuildInfo(5875, 1, 12, 1, ' ' ),
};
RealmBuildInfo GetBuildInfo(uint build)
{
foreach (var clientBuild in ClientBuilds)
foreach (var clientBuild in _builds)
if (clientBuild.Build == build)
return clientBuild;
@@ -158,11 +163,7 @@ public class RealmManager : Singleton<RealmManager>
public uint GetMinorMajorBugfixVersionForBuild(uint build)
{
RealmBuildInfo buildInfo = ClientBuilds.FirstOrDefault(p =>
{
return p.Build < build;
});
RealmBuildInfo buildInfo = _builds.FirstOrDefault(p => p.Build < build);
return buildInfo != null ? (buildInfo.MajorVersion * 10000 + buildInfo.MinorVersion * 100 + buildInfo.BugfixVersion) : 0;
}
@@ -326,25 +327,19 @@ public class RealmManager : Singleton<RealmManager>
public ICollection<Realm> GetRealms() { return _realms.Values; }
List<string> GetSubRegions() { return _subRegions; }
List<RealmBuildInfo> _builds = new List<RealmBuildInfo>();
ConcurrentDictionary<RealmHandle, Realm> _realms = new ConcurrentDictionary<RealmHandle, Realm>();
List<string> _subRegions = new List<string>();
Timer _updateTimer;
}
class RealmBuildInfo
public class RealmBuildInfo
{
public RealmBuildInfo(uint build, uint majorVersion, uint minorVersion, uint bugfixVersion, char hotfixVersion = ' ')
{
Build = build;
MajorVersion = majorVersion;
MinorVersion = minorVersion;
BugfixVersion = bugfixVersion;
HotfixVersion = hotfixVersion;
}
public uint Build;
public uint MajorVersion;
public uint MinorVersion;
public uint BugfixVersion;
public char HotfixVersion;
public char[] HotfixVersion = new char[4];
public byte[] Win64AuthSeed = new byte[16];
public byte[] Mac64AuthSeed = new byte[16];
}