TrinityCore
RealmList.h
Go to the documentation of this file.
1/*
2 * This file is part of the TrinityCore Project. See AUTHORS file for Copyright information
3 *
4 * This program is free software; you can redistribute it and/or modify it
5 * under the terms of the GNU General Public License as published by the
6 * Free Software Foundation; either version 2 of the License, or (at your
7 * option) any later version.
8 *
9 * This program is distributed in the hope that it will be useful, but WITHOUT
10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
11 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
12 * more details.
13 *
14 * You should have received a copy of the GNU General Public License along
15 * with this program. If not, see <http://www.gnu.org/licenses/>.
16 */
17
18#ifndef _REALMLIST_H
19#define _REALMLIST_H
20
21#include "Define.h"
22#include "Duration.h"
23#include "Realm.h"
24#include <array>
25#include <map>
26#include <memory>
27#include <shared_mutex>
28#include <unordered_set>
29#include <vector>
30
32{
37 std::array<char, 4> HotfixVersion;
38 std::array<uint8, 16> Win64AuthSeed;
39 std::array<uint8, 16> Mac64AuthSeed;
40};
41
43{
44class ClientResponse;
45class GetAllValuesForAttributeResponse;
46}
47
48namespace JSON::RealmList
49{
50class RealmListUpdates;
51}
52
55{
56public:
57 typedef std::map<Battlenet::RealmHandle, Realm> RealmMap;
58
59 static RealmList* Instance();
60
62
63 void Initialize(Trinity::Asio::IoContext& ioContext, uint32 updateInterval);
64 void Close();
65
66 Realm const* GetRealm(Battlenet::RealmHandle const& id) const;
67 bool GetRealmNames(Battlenet::RealmHandle const& id, std::string* name, std::string* normalizedName) const;
68
69 RealmBuildInfo const* GetBuildInfo(uint32 build) const;
70 uint32 GetMinorMajorBugfixVersionForBuild(uint32 build) const;
72 std::vector<uint8> GetRealmEntryJSON(Battlenet::RealmHandle const& id, uint32 build) const;
73 std::vector<uint8> GetRealmList(uint32 build, std::string const& subRegion) const;
74 uint32 JoinRealm(uint32 realmAddress, uint32 build, boost::asio::ip::address const& clientAddress, std::array<uint8, 32> const& clientSecret,
75 LocaleConstant locale, std::string const& os, Minutes timezoneOffset, std::string const& accountName,
77
78private:
79 RealmList();
80
81 void LoadBuildInfo();
82 void UpdateRealms();
83 void UpdateRealm(Realm& realm, Battlenet::RealmHandle const& id, uint32 build, std::string const& name,
84 boost::asio::ip::address&& address, boost::asio::ip::address&& localAddr,
85 uint16 port, uint8 icon, RealmFlags flag, uint8 timezone, AccountTypes allowedSecurityLevel, float population);
86
87 std::vector<RealmBuildInfo> _builds;
88 mutable std::shared_mutex _realmsMutex;
90 std::unordered_set<std::string> _subRegions;
92 std::unique_ptr<Trinity::Asio::DeadlineTimer> _updateTimer;
93 std::unique_ptr<Trinity::Asio::Resolver> _resolver;
94};
95
96#define sRealmList RealmList::Instance()
97
98#endif
LocaleConstant
Definition: Common.h:48
AccountTypes
Definition: Common.h:39
uint8_t uint8
Definition: Define.h:144
#define TC_SHARED_API
Definition: Define.h:117
uint16_t uint16
Definition: Define.h:143
uint32_t uint32
Definition: Define.h:142
std::chrono::minutes Minutes
Minutes shorthand typedef.
Definition: Duration.h:35
RealmFlags
Definition: Realm.h:27
Storage object for the list of realms on the server.
Definition: RealmList.h:55
std::unique_ptr< Trinity::Asio::Resolver > _resolver
Definition: RealmList.h:93
std::map< Battlenet::RealmHandle, Realm > RealmMap
Definition: RealmList.h:57
RealmMap _realms
Definition: RealmList.h:89
std::vector< RealmBuildInfo > _builds
Definition: RealmList.h:87
std::unordered_set< std::string > _subRegions
Definition: RealmList.h:90
uint32 _updateInterval
Definition: RealmList.h:91
std::shared_mutex _realmsMutex
Definition: RealmList.h:88
std::unique_ptr< Trinity::Asio::DeadlineTimer > _updateTimer
Definition: RealmList.h:92
Realm realm
Definition: World.cpp:3966
std::array< char, 4 > HotfixVersion
Definition: RealmList.h:37
uint32 MajorVersion
Definition: RealmList.h:34
uint32 BugfixVersion
Definition: RealmList.h:36
uint32 Build
Definition: RealmList.h:33
uint32 MinorVersion
Definition: RealmList.h:35
std::array< uint8, 16 > Mac64AuthSeed
Definition: RealmList.h:39
std::array< uint8, 16 > Win64AuthSeed
Definition: RealmList.h:38
Definition: Realm.h:81