Project SkyFire Core
SkyFire 5.4.8 server core API documentation
Toggle main menu visibility
Loading...
Searching...
No Matches
AddonMgr.cpp
Go to the documentation of this file.
1
/*
2
* This file is part of Project SkyFire https://www.projectskyfire.org.
3
* See LICENSE.md file for Copyright information
4
*/
5
6
#include "
AddonMgr.h
"
7
#include "
DatabaseEnv.h
"
8
#include "
DBCStores.h
"
9
#include "
Log.h
"
10
#include "
Timer.h
"
11
#include <openssl/md5.h>
12
13
namespace
AddonMgr
14
{
15
16
// Anonymous namespace ensures file scope of all the stuff inside it, even
17
// if you add something more to this namespace somewhere else.
18
namespace
19
{
20
// List of saved addons (in DB).
21
typedef
std::list<SavedAddon> SavedAddonsList;
22
23
SavedAddonsList m_knownAddons;
24
25
BannedAddonList
m_bannedAddons;
26
}
27
28
void
LoadFromDB
()
29
{
30
uint32
oldMSTime =
getMSTime
();
31
32
QueryResult
result =
CharacterDatabase
.Query(
"SELECT name, crc FROM addons"
);
33
if
(result)
34
{
35
uint32
count = 0;
36
37
do
38
{
39
Field
* fields = result->Fetch();
40
41
std::string name = fields[0].
GetString
();
42
uint32
crc = fields[1].
GetUInt32
();
43
44
m_knownAddons.push_back(
SavedAddon
(name, crc));
45
46
++count;
47
}
while
(result->NextRow());
48
49
SF_LOG_INFO
(
"server.loading"
,
">> Loaded %u known addons in %u ms"
, count,
GetMSTimeDiffToNow
(oldMSTime));
50
}
51
else
52
SF_LOG_INFO
(
"server.loading"
,
">> Loaded 0 known addons. DB table `addons` is empty!"
);
53
54
oldMSTime =
getMSTime
();
55
result =
CharacterDatabase
.Query(
"SELECT id, name, version, UNIX_TIMESTAMP(timestamp) FROM banned_addons"
);
56
if
(result)
57
{
58
uint32
count = 0;
59
uint32
dbcMaxBannedAddon =
sBannedAddOnsStore
.GetNumRows();
60
61
do
62
{
63
Field
* fields = result->Fetch();
64
65
BannedAddon
addon;
66
addon.
Id
= fields[0].
GetUInt32
() + dbcMaxBannedAddon;
67
addon.
Timestamp
=
uint32
(fields[3].GetUInt64());
68
69
std::string name = fields[1].
GetString
();
70
std::string version = fields[2].
GetString
();
71
72
MD5(
reinterpret_cast<
uint8
const*
>
(name.c_str()), name.length(), addon.
NameMD5
);
73
MD5(
reinterpret_cast<
uint8
const*
>
(version.c_str()), version.length(), addon.
VersionMD5
);
74
75
m_bannedAddons.push_back(addon);
76
77
++count;
78
}
while
(result->NextRow());
79
80
SF_LOG_INFO
(
"server.loading"
,
">> Loaded %u banned addons in %u ms"
, count,
GetMSTimeDiffToNow
(oldMSTime));
81
}
82
}
83
84
void
SaveAddon
(
AddonInfo
const
& addon)
85
{
86
std::string name = addon.
Name
;
87
88
PreparedStatement
* stmt =
CharacterDatabase
.GetPreparedStatement(
CHAR_INS_ADDON
);
89
90
stmt->
setString
(0, name);
91
stmt->
setUInt32
(1, addon.
CRC
);
92
93
CharacterDatabase
.Execute(stmt);
94
95
m_knownAddons.push_back(
SavedAddon
(addon.
Name
, addon.
CRC
));
96
}
97
98
SavedAddon
const
*
GetAddonInfo
(
const
std::string& name)
99
{
100
for
(SavedAddonsList::const_iterator it = m_knownAddons.begin(); it != m_knownAddons.end(); ++it)
101
{
102
SavedAddon
const
& addon = (*it);
103
if
(addon.
Name
== name)
104
return
&addon;
105
}
106
107
return
NULL;
108
}
109
110
BannedAddonList
const
*
GetBannedAddons
()
111
{
112
return
&m_bannedAddons;
113
}
114
115
}
// Namespace
AddonMgr.h
CHAR_INS_ADDON
@ CHAR_INS_ADDON
Definition
CharacterDatabase.h:343
sBannedAddOnsStore
DBCStorage< BannedAddOnsEntry > sBannedAddOnsStore(BannedAddOnsfmt)
DBCStores.h
DatabaseEnv.h
uint8
std::uint8_t uint8
Definition
Define.h:79
uint32
std::uint32_t uint32
Definition
Define.h:77
Log.h
SF_LOG_INFO
#define SF_LOG_INFO(filterType__,...)
Definition
Log.h:137
QueryResult
Skyfire::AutoPtr< ResultSet, Skyfire::Mutex > QueryResult
Definition
QueryResult.h:48
Timer.h
GetMSTimeDiffToNow
uint32 GetMSTimeDiffToNow(uint32 oldMSTime)
Definition
Timer.h:22
getMSTime
uint32 getMSTime()
Definition
Timer.h:12
Field
Definition
Field.h:16
Field::GetString
std::string GetString() const
Definition
Field.h:228
Field::GetUInt32
uint32 GetUInt32() const
Definition
Field.h:105
PreparedStatement
Definition
PreparedStatement.h:63
PreparedStatement::setString
void setString(const uint8 index, const std::string &value)
Definition
PreparedStatement.cpp:175
PreparedStatement::setUInt32
void setUInt32(const uint8 index, const uint32 value)
Definition
PreparedStatement.cpp:103
CharacterDatabase
CharacterDatabaseWorkerPool CharacterDatabase
Accessor to the character database.
Definition
Main.cpp:41
AddonMgr
Definition
AddonMgr.cpp:14
AddonMgr::BannedAddonList
std::list< BannedAddon > BannedAddonList
Definition
AddonMgr.h:53
AddonMgr::GetAddonInfo
SavedAddon const * GetAddonInfo(const std::string &name)
Definition
AddonMgr.cpp:98
AddonMgr::SaveAddon
void SaveAddon(AddonInfo const &addon)
Definition
AddonMgr.cpp:84
AddonMgr::LoadFromDB
void LoadFromDB()
Definition
AddonMgr.cpp:28
AddonMgr::GetBannedAddons
BannedAddonList const * GetBannedAddons()
Definition
AddonMgr.cpp:110
AddonInfo
Definition
AddonMgr.h:14
AddonInfo::Name
std::string Name
Definition
AddonMgr.h:19
AddonInfo::CRC
uint32 CRC
Definition
AddonMgr.h:21
BannedAddon
Definition
AddonMgr.h:38
BannedAddon::NameMD5
uint8 NameMD5[16]
Definition
AddonMgr.h:40
BannedAddon::Id
uint32 Id
Definition
AddonMgr.h:39
BannedAddon::Timestamp
uint32 Timestamp
Definition
AddonMgr.h:42
BannedAddon::VersionMD5
uint8 VersionMD5[16]
Definition
AddonMgr.h:41
SavedAddon
Definition
AddonMgr.h:27
SavedAddon::Name
std::string Name
Definition
AddonMgr.h:33
src
server
game
Addons
AddonMgr.cpp
Generated on
for Project SkyFire Core by
1.17.0