aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/server/authserver/Main.cpp1
-rw-r--r--src/server/collision/Management/VMapManager2.cpp2
-rw-r--r--src/server/game/AI/SmartScripts/SmartScriptMgr.h28
-rw-r--r--src/server/game/Accounts/AccountMgr.h11
-rw-r--r--src/server/game/Achievements/AchievementMgr.h10
-rw-r--r--src/server/game/AuctionHouse/AuctionHouseMgr.h11
-rw-r--r--src/server/game/Battlefield/BattlefieldMgr.h17
-rw-r--r--src/server/game/Battlegrounds/ArenaTeam.h1
-rw-r--r--src/server/game/Battlegrounds/ArenaTeamMgr.h10
-rw-r--r--src/server/game/Battlegrounds/BattlegroundMgr.h11
-rw-r--r--src/server/game/Calendar/CalendarMgr.h11
-rw-r--r--src/server/game/Chat/Channels/ChannelMgr.cpp6
-rw-r--r--src/server/game/Chat/Channels/ChannelMgr.h14
-rw-r--r--src/server/game/Conditions/ConditionMgr.h12
-rw-r--r--src/server/game/DataStores/DBCStructure.h10
-rw-r--r--src/server/game/DungeonFinding/LFGMgr.h11
-rw-r--r--src/server/game/Entities/Creature/CreatureGroups.h13
-rw-r--r--src/server/game/Entities/Item/Item.cpp4
-rw-r--r--src/server/game/Entities/Player/Player.cpp6
-rw-r--r--src/server/game/Entities/Player/SocialMgr.h11
-rw-r--r--src/server/game/Events/GameEventMgr.h11
-rw-r--r--src/server/game/Globals/ObjectMgr.h10
-rw-r--r--src/server/game/Groups/GroupMgr.h9
-rw-r--r--src/server/game/Guilds/GuildMgr.h10
-rw-r--r--src/server/game/Handlers/AddonHandler.cpp4
-rw-r--r--src/server/game/Handlers/AddonHandler.h19
-rw-r--r--src/server/game/Maps/MapManager.h14
-rw-r--r--src/server/game/Maps/TransportMgr.h10
-rwxr-xr-xsrc/server/game/Movement/MovementGenerator.h1
-rw-r--r--src/server/game/Movement/Waypoints/WaypointManager.h13
-rw-r--r--src/server/game/OutdoorPvP/OutdoorPvPMgr.h11
-rw-r--r--src/server/game/Pools/PoolMgr.h11
-rw-r--r--src/server/game/Scripting/ScriptMgr.h10
-rw-r--r--src/server/game/Scripting/ScriptSystem.h11
-rw-r--r--src/server/game/Server/Protocol/PacketLog.h11
-rw-r--r--src/server/game/Server/WorldSession.cpp2
-rw-r--r--src/server/game/Server/WorldSocketMgr.h12
-rw-r--r--src/server/game/Spells/SpellMgr.h12
-rw-r--r--src/server/game/Texts/CreatureTextMgr.h14
-rw-r--r--src/server/game/Tickets/TicketMgr.h11
-rw-r--r--src/server/game/Warden/WardenCheckMgr.h14
-rw-r--r--src/server/game/Weather/WeatherMgr.cpp2
-rw-r--r--src/server/game/World/World.cpp4
-rw-r--r--src/server/game/World/World.h17
-rw-r--r--src/server/shared/Cryptography/ARC4.h2
-rw-r--r--src/server/shared/Cryptography/BigNumber.h1
-rw-r--r--src/server/shared/Database/DatabaseWorkerPool.h10
-rw-r--r--src/server/shared/Database/MySQLConnection.h8
-rw-r--r--src/server/shared/Database/QueryResult.h8
-rw-r--r--src/server/shared/Database/Transaction.h2
-rw-r--r--src/server/shared/Debugging/Errors.cpp11
-rw-r--r--src/server/shared/Logging/Appender.h4
-rw-r--r--src/server/shared/Logging/AppenderConsole.h2
-rw-r--r--src/server/shared/Logging/AppenderFile.h2
-rw-r--r--src/server/shared/Threading/Callback.h6
-rw-r--r--src/server/shared/Threading/DelayExecutor.cpp18
-rw-r--r--src/server/shared/Threading/DelayExecutor.h2
-rw-r--r--src/server/worldserver/Master.cpp55
-rw-r--r--src/server/worldserver/Master.h8
-rw-r--r--src/server/worldserver/WorldThread/WorldRunnable.cpp4
-rw-r--r--src/server/worldserver/WorldThread/WorldRunnable.h4
61 files changed, 347 insertions, 243 deletions
diff --git a/src/server/authserver/Main.cpp b/src/server/authserver/Main.cpp
index 3901480c70d..ad04a52c7db 100644
--- a/src/server/authserver/Main.cpp
+++ b/src/server/authserver/Main.cpp
@@ -178,7 +178,6 @@ int main(int argc, char** argv)
SetProcessPriority();
-
_dbPingInterval = sConfigMgr->GetIntDefault("MaxPingTime", 30);
_dbPingTimer.expires_from_now(boost::posix_time::seconds(_dbPingInterval));
diff --git a/src/server/collision/Management/VMapManager2.cpp b/src/server/collision/Management/VMapManager2.cpp
index 2aa3b6ab40d..00381cb1205 100644
--- a/src/server/collision/Management/VMapManager2.cpp
+++ b/src/server/collision/Management/VMapManager2.cpp
@@ -26,8 +26,6 @@
#include "ModelInstance.h"
#include "WorldModel.h"
#include <G3D/Vector3.h>
-#include <ace/Null_Mutex.h>
-#include <ace/Singleton.h>
#include "DisableMgr.h"
#include "DBCStores.h"
#include "Log.h"
diff --git a/src/server/game/AI/SmartScripts/SmartScriptMgr.h b/src/server/game/AI/SmartScripts/SmartScriptMgr.h
index 3d14b8f69e9..0380ec8bae9 100644
--- a/src/server/game/AI/SmartScripts/SmartScriptMgr.h
+++ b/src/server/game/AI/SmartScripts/SmartScriptMgr.h
@@ -1396,11 +1396,17 @@ typedef std::unordered_map<uint32, ObjectGuidList*> ObjectListMap;
class SmartWaypointMgr
{
- friend class ACE_Singleton<SmartWaypointMgr, ACE_Null_Mutex>;
- SmartWaypointMgr() { }
- public:
+ private:
+ SmartWaypointMgr() { }
~SmartWaypointMgr();
+ public:
+ static SmartWaypointMgr* instance()
+ {
+ static SmartWaypointMgr* instance = new SmartWaypointMgr();
+ return instance;
+ }
+
void LoadFromDB();
WPPath* GetPath(uint32 id)
@@ -1426,11 +1432,17 @@ typedef std::pair<CacheSpellContainer::const_iterator, CacheSpellContainer::cons
class SmartAIMgr
{
- friend class ACE_Singleton<SmartAIMgr, ACE_Null_Mutex>;
- SmartAIMgr() { }
- public:
+ private:
+ SmartAIMgr() { }
~SmartAIMgr() { }
+ public:
+ static SmartAIMgr* instance()
+ {
+ static SmartAIMgr* instance = new SmartAIMgr();
+ return instance;
+ }
+
void LoadSmartAIFromDB();
SmartAIEventList GetScript(int32 entry, SmartScriptType type)
@@ -1598,6 +1610,6 @@ class SmartAIMgr
CacheSpellContainer KillCreditSpellStore;
};
-#define sSmartScriptMgr ACE_Singleton<SmartAIMgr, ACE_Null_Mutex>::instance()
-#define sSmartWaypointMgr ACE_Singleton<SmartWaypointMgr, ACE_Null_Mutex>::instance()
+#define sSmartScriptMgr SmartAIMgr::instance()
+#define sSmartWaypointMgr SmartWaypointMgr::instance()
#endif
diff --git a/src/server/game/Accounts/AccountMgr.h b/src/server/game/Accounts/AccountMgr.h
index b3012ace177..2f3137ae3cd 100644
--- a/src/server/game/Accounts/AccountMgr.h
+++ b/src/server/game/Accounts/AccountMgr.h
@@ -20,7 +20,6 @@
#define _ACCMGR_H
#include "RBAC.h"
-#include <ace/Singleton.h>
enum AccountOpResult
{
@@ -51,13 +50,17 @@ typedef std::map<uint8, rbac::RBACPermissionContainer> RBACDefaultPermissionsCon
class AccountMgr
{
- friend class ACE_Singleton<AccountMgr, ACE_Null_Mutex>;
-
private:
AccountMgr();
~AccountMgr();
public:
+ static AccountMgr* instance()
+ {
+ static AccountMgr* instance = new AccountMgr();
+ return instance;
+ }
+
AccountOpResult CreateAccount(std::string username, std::string password, std::string email);
static AccountOpResult DeleteAccount(uint32 accountId);
static AccountOpResult ChangeUsername(uint32 accountId, std::string newUsername, std::string newPassword);
@@ -95,5 +98,5 @@ class AccountMgr
rbac::RBACDefaultPermissionsContainer _defaultPermissions;
};
-#define sAccountMgr ACE_Singleton<AccountMgr, ACE_Null_Mutex>::instance()
+#define sAccountMgr AccountMgr::instance()
#endif
diff --git a/src/server/game/Achievements/AchievementMgr.h b/src/server/game/Achievements/AchievementMgr.h
index c3a1481bb2e..7128b8d6318 100644
--- a/src/server/game/Achievements/AchievementMgr.h
+++ b/src/server/game/Achievements/AchievementMgr.h
@@ -23,7 +23,6 @@
#include <string>
#include "Common.h"
-#include <ace/Singleton.h>
#include "DatabaseEnv.h"
#include "DBCEnums.h"
#include "DBCStores.h"
@@ -305,11 +304,16 @@ class AchievementMgr
class AchievementGlobalMgr
{
- friend class ACE_Singleton<AchievementGlobalMgr, ACE_Null_Mutex>;
AchievementGlobalMgr() { }
~AchievementGlobalMgr() { }
public:
+ static AchievementGlobalMgr* instance()
+ {
+ static AchievementGlobalMgr* instance = new AchievementGlobalMgr();
+ return instance;
+ }
+
AchievementCriteriaEntryList const& GetAchievementCriteriaByType(AchievementCriteriaTypes type) const
{
return m_AchievementCriteriasByType[type];
@@ -389,6 +393,6 @@ class AchievementGlobalMgr
AchievementRewardLocales m_achievementRewardLocales;
};
-#define sAchievementMgr ACE_Singleton<AchievementGlobalMgr, ACE_Null_Mutex>::instance()
+#define sAchievementMgr AchievementGlobalMgr::instance()
#endif
diff --git a/src/server/game/AuctionHouse/AuctionHouseMgr.h b/src/server/game/AuctionHouse/AuctionHouseMgr.h
index f45fc4100de..0f42a5833a2 100644
--- a/src/server/game/AuctionHouse/AuctionHouseMgr.h
+++ b/src/server/game/AuctionHouse/AuctionHouseMgr.h
@@ -19,8 +19,6 @@
#ifndef _AUCTION_HOUSE_MGR_H
#define _AUCTION_HOUSE_MGR_H
-#include <ace/Singleton.h>
-
#include "Common.h"
#include "DatabaseEnv.h"
#include "DBCStructure.h"
@@ -137,13 +135,16 @@ class AuctionHouseObject
class AuctionHouseMgr
{
- friend class ACE_Singleton<AuctionHouseMgr, ACE_Null_Mutex>;
-
private:
AuctionHouseMgr();
~AuctionHouseMgr();
public:
+ static AuctionHouseMgr* instance()
+ {
+ static AuctionHouseMgr* instance = new AuctionHouseMgr();
+ return instance;
+ }
typedef std::unordered_map<uint32, Item*> ItemMap;
@@ -193,6 +194,6 @@ class AuctionHouseMgr
ItemMap mAitems;
};
-#define sAuctionMgr ACE_Singleton<AuctionHouseMgr, ACE_Null_Mutex>::instance()
+#define sAuctionMgr AuctionHouseMgr::instance()
#endif
diff --git a/src/server/game/Battlefield/BattlefieldMgr.h b/src/server/game/Battlefield/BattlefieldMgr.h
index bb8a076d5d0..9b51fd7710e 100644
--- a/src/server/game/Battlefield/BattlefieldMgr.h
+++ b/src/server/game/Battlefield/BattlefieldMgr.h
@@ -19,7 +19,6 @@
#define BATTLEFIELD_MGR_H_
#include "Battlefield.h"
-#include <ace/Singleton.h>
class Player;
class ZoneScript;
@@ -28,11 +27,12 @@ class ZoneScript;
class BattlefieldMgr
{
public:
- // ctor
- BattlefieldMgr();
- // dtor
- ~BattlefieldMgr();
-
+ static BattlefieldMgr* instance()
+ {
+ static BattlefieldMgr* instance = new BattlefieldMgr();
+ return instance;
+ }
+
// create battlefield events
void InitBattlefield();
@@ -52,6 +52,9 @@ class BattlefieldMgr
void Update(uint32 diff);
private:
+ BattlefieldMgr();
+ ~BattlefieldMgr();
+
typedef std::vector<Battlefield*> BattlefieldSet;
typedef std::map<uint32 /*zoneId*/, Battlefield*> BattlefieldMap;
// contains all initiated battlefield events
@@ -64,6 +67,6 @@ class BattlefieldMgr
uint32 _updateTimer;
};
-#define sBattlefieldMgr ACE_Singleton<BattlefieldMgr, ACE_Null_Mutex>::instance()
+#define sBattlefieldMgr BattlefieldMgr::instance()
#endif // BATTLEFIELD_MGR_H_
diff --git a/src/server/game/Battlegrounds/ArenaTeam.h b/src/server/game/Battlegrounds/ArenaTeam.h
index cd9e2be4318..85372c35daa 100644
--- a/src/server/game/Battlegrounds/ArenaTeam.h
+++ b/src/server/game/Battlegrounds/ArenaTeam.h
@@ -20,7 +20,6 @@
#define TRINITYCORE_ARENATEAM_H
#include "QueryResult.h"
-#include <ace/Singleton.h>
#include <list>
#include <map>
diff --git a/src/server/game/Battlegrounds/ArenaTeamMgr.h b/src/server/game/Battlegrounds/ArenaTeamMgr.h
index 946824fb656..9a4c1184133 100644
--- a/src/server/game/Battlegrounds/ArenaTeamMgr.h
+++ b/src/server/game/Battlegrounds/ArenaTeamMgr.h
@@ -22,11 +22,17 @@
class ArenaTeamMgr
{
- friend class ACE_Singleton<ArenaTeamMgr, ACE_Null_Mutex>;
+private:
ArenaTeamMgr();
~ArenaTeamMgr();
public:
+ static ArenaTeamMgr* instance()
+ {
+ static ArenaTeamMgr* instance = new ArenaTeamMgr();
+ return instance;
+ }
+
typedef std::unordered_map<uint32, ArenaTeam*> ArenaTeamContainer;
ArenaTeam* GetArenaTeamById(uint32 arenaTeamId) const;
@@ -50,6 +56,6 @@ protected:
ArenaTeamContainer ArenaTeamStore;
};
-#define sArenaTeamMgr ACE_Singleton<ArenaTeamMgr, ACE_Null_Mutex>::instance()
+#define sArenaTeamMgr ArenaTeamMgr::instance()
#endif
diff --git a/src/server/game/Battlegrounds/BattlegroundMgr.h b/src/server/game/Battlegrounds/BattlegroundMgr.h
index 786e664c3f3..046e2588ad3 100644
--- a/src/server/game/Battlegrounds/BattlegroundMgr.h
+++ b/src/server/game/Battlegrounds/BattlegroundMgr.h
@@ -23,7 +23,6 @@
#include "DBCEnums.h"
#include "Battleground.h"
#include "BattlegroundQueue.h"
-#include <ace/Singleton.h>
typedef std::map<uint32, Battleground*> BattlegroundContainer;
typedef std::set<uint32> BattlegroundClientIdsContainer;
@@ -64,13 +63,17 @@ struct BattlegroundData
class BattlegroundMgr
{
- friend class ACE_Singleton<BattlegroundMgr, ACE_Null_Mutex>;
-
private:
BattlegroundMgr();
~BattlegroundMgr();
public:
+ static BattlegroundMgr* instance()
+ {
+ static BattlegroundMgr* instance = new BattlegroundMgr();
+ return instance;
+ }
+
void Update(uint32 diff);
/* Packet Building */
@@ -158,5 +161,5 @@ class BattlegroundMgr
BattleMastersMap mBattleMastersMap;
};
-#define sBattlegroundMgr ACE_Singleton<BattlegroundMgr, ACE_Null_Mutex>::instance()
+#define sBattlegroundMgr BattlegroundMgr::instance()
#endif
diff --git a/src/server/game/Calendar/CalendarMgr.h b/src/server/game/Calendar/CalendarMgr.h
index 8f44b013e5c..9c7882fe4b7 100644
--- a/src/server/game/Calendar/CalendarMgr.h
+++ b/src/server/game/Calendar/CalendarMgr.h
@@ -18,7 +18,6 @@
#ifndef TRINITY_CALENDARMGR_H
#define TRINITY_CALENDARMGR_H
-#include <ace/Singleton.h>
#include "Common.h"
#include "DatabaseEnv.h"
#include "WorldPacket.h"
@@ -268,8 +267,6 @@ typedef std::map<uint64 /* eventId */, CalendarInviteStore > CalendarEventInvite
class CalendarMgr
{
- friend class ACE_Singleton<CalendarMgr, ACE_Null_Mutex>;
-
private:
CalendarMgr();
~CalendarMgr();
@@ -283,6 +280,12 @@ class CalendarMgr
uint64 _maxInviteId;
public:
+ static CalendarMgr* instance()
+ {
+ static CalendarMgr* instance = new CalendarMgr();
+ return instance;
+ }
+
void LoadFromDB();
CalendarEvent* GetEvent(uint64 eventId) const;
@@ -329,6 +332,6 @@ class CalendarMgr
void SendPacketToAllEventRelatives(WorldPacket packet, CalendarEvent const& calendarEvent);
};
-#define sCalendarMgr ACE_Singleton<CalendarMgr, ACE_Null_Mutex>::instance()
+#define sCalendarMgr CalendarMgr::instance()
#endif
diff --git a/src/server/game/Chat/Channels/ChannelMgr.cpp b/src/server/game/Chat/Channels/ChannelMgr.cpp
index 0975a690889..00824ae2056 100644
--- a/src/server/game/Chat/Channels/ChannelMgr.cpp
+++ b/src/server/game/Chat/Channels/ChannelMgr.cpp
@@ -29,13 +29,13 @@ ChannelMgr::~ChannelMgr()
ChannelMgr* ChannelMgr::forTeam(uint32 team)
{
if (sWorld->getBoolConfig(CONFIG_ALLOW_TWO_SIDE_INTERACTION_CHANNEL))
- return ACE_Singleton<AllianceChannelMgr, ACE_Null_Mutex>::instance(); // cross-faction
+ return AllianceChannelMgr::instance(); // cross-faction
if (team == ALLIANCE)
- return ACE_Singleton<AllianceChannelMgr, ACE_Null_Mutex>::instance();
+ return AllianceChannelMgr::instance();
if (team == HORDE)
- return ACE_Singleton<HordeChannelMgr, ACE_Null_Mutex>::instance();
+ return HordeChannelMgr::instance();
return NULL;
}
diff --git a/src/server/game/Chat/Channels/ChannelMgr.h b/src/server/game/Chat/Channels/ChannelMgr.h
index 603eb52f589..0fd5cdbfe24 100644
--- a/src/server/game/Chat/Channels/ChannelMgr.h
+++ b/src/server/game/Chat/Channels/ChannelMgr.h
@@ -20,7 +20,6 @@
#include "Common.h"
#include "Channel.h"
-#include <ace/Singleton.h>
#include <map>
#include <string>
@@ -31,12 +30,17 @@ class ChannelMgr
{
typedef std::map<std::wstring, Channel*> ChannelMap;
- public:
- ChannelMgr() : team(0)
- { }
-
+ protected:
+ ChannelMgr() : team(0) { }
~ChannelMgr();
+ public:
+ static ChannelMgr* instance()
+ {
+ static ChannelMgr* instance = new ChannelMgr();
+ return instance;
+ }
+
static ChannelMgr * forTeam(uint32 team);
void setTeam(uint32 newTeam) { team = newTeam; }
diff --git a/src/server/game/Conditions/ConditionMgr.h b/src/server/game/Conditions/ConditionMgr.h
index 876b922d243..a78434776e0 100644
--- a/src/server/game/Conditions/ConditionMgr.h
+++ b/src/server/game/Conditions/ConditionMgr.h
@@ -21,7 +21,6 @@
#include "Define.h"
#include "Errors.h"
-#include <ace/Singleton.h>
#include <list>
#include <map>
@@ -223,13 +222,18 @@ typedef std::map<uint32, ConditionList> ConditionReferenceContainer;//only used
class ConditionMgr
{
- friend class ACE_Singleton<ConditionMgr, ACE_Null_Mutex>;
-
private:
ConditionMgr();
~ConditionMgr();
public:
+
+ static ConditionMgr* instance()
+ {
+ static ConditionMgr* instance = new ConditionMgr();
+ return instance;
+ }
+
void LoadConditions(bool isReload = false);
bool isConditionTypeValid(Condition* cond);
ConditionList GetConditionReferences(uint32 refId);
@@ -265,6 +269,6 @@ class ConditionMgr
SmartEventConditionContainer SmartEventConditionStore;
};
-#define sConditionMgr ACE_Singleton<ConditionMgr, ACE_Null_Mutex>::instance()
+#define sConditionMgr ConditionMgr::instance()
#endif
diff --git a/src/server/game/DataStores/DBCStructure.h b/src/server/game/DataStores/DBCStructure.h
index 5d6c8c7aa89..ec9d2dafbd2 100644
--- a/src/server/game/DataStores/DBCStructure.h
+++ b/src/server/game/DataStores/DBCStructure.h
@@ -535,7 +535,7 @@ struct AreaTableEntry
{
if (mapid == 609)
return true;
- return (flags & AREA_FLAG_SANCTUARY);
+ return (flags & AREA_FLAG_SANCTUARY) != 0;
}
};
@@ -1367,7 +1367,7 @@ struct MapEntry
return MapID == 0 || MapID == 1 || MapID == 530 || MapID == 571;
}
- bool IsDynamicDifficultyMap() const { return Flags & MAP_FLAG_DYNAMIC_DIFFICULTY; }
+ bool IsDynamicDifficultyMap() const { return (Flags & MAP_FLAG_DYNAMIC_DIFFICULTY) != 0; }
};
struct MapDifficultyEntry
@@ -2047,12 +2047,12 @@ struct VehicleSeatEntry
uint32 m_flagsB; // 45
// 46-57 added in 3.1, floats mostly
- bool CanEnterOrExit() const { return m_flags & VEHICLE_SEAT_FLAG_CAN_ENTER_OR_EXIT; }
- bool CanSwitchFromSeat() const { return m_flags & VEHICLE_SEAT_FLAG_CAN_SWITCH; }
+ bool CanEnterOrExit() const { return (m_flags & VEHICLE_SEAT_FLAG_CAN_ENTER_OR_EXIT) != 0; }
+ bool CanSwitchFromSeat() const { return (m_flags & VEHICLE_SEAT_FLAG_CAN_SWITCH) != 0; }
bool IsUsableByOverride() const { return (m_flags & (VEHICLE_SEAT_FLAG_UNCONTROLLED | VEHICLE_SEAT_FLAG_UNK18)
|| (m_flagsB & (VEHICLE_SEAT_FLAG_B_USABLE_FORCED | VEHICLE_SEAT_FLAG_B_USABLE_FORCED_2 |
VEHICLE_SEAT_FLAG_B_USABLE_FORCED_3 | VEHICLE_SEAT_FLAG_B_USABLE_FORCED_4))); }
- bool IsEjectable() const { return m_flagsB & VEHICLE_SEAT_FLAG_B_EJECTABLE; }
+ bool IsEjectable() const { return (m_flagsB & VEHICLE_SEAT_FLAG_B_EJECTABLE) != 0; }
};
struct WMOAreaTableEntry
diff --git a/src/server/game/DungeonFinding/LFGMgr.h b/src/server/game/DungeonFinding/LFGMgr.h
index 2c31fe37d4d..03ac5254057 100644
--- a/src/server/game/DungeonFinding/LFGMgr.h
+++ b/src/server/game/DungeonFinding/LFGMgr.h
@@ -18,7 +18,6 @@
#ifndef _LFGMGR_H
#define _LFGMGR_H
-#include <ace/Singleton.h>
#include "DBCStructure.h"
#include "Field.h"
#include "LFG.h"
@@ -292,13 +291,17 @@ struct LFGDungeonData
class LFGMgr
{
- friend class ACE_Singleton<LFGMgr, ACE_Null_Mutex>;
-
private:
LFGMgr();
~LFGMgr();
public:
+ static LFGMgr* instance()
+ {
+ static LFGMgr* instance = new LFGMgr();
+ return instance;
+ }
+
// Functions used outside lfg namespace
void Update(uint32 diff);
@@ -466,5 +469,5 @@ class LFGMgr
} // namespace lfg
-#define sLFGMgr ACE_Singleton<lfg::LFGMgr, ACE_Null_Mutex>::instance()
+#define sLFGMgr lfg::LFGMgr::instance()
#endif
diff --git a/src/server/game/Entities/Creature/CreatureGroups.h b/src/server/game/Entities/Creature/CreatureGroups.h
index b790853f5e1..29832e4ff76 100644
--- a/src/server/game/Entities/Creature/CreatureGroups.h
+++ b/src/server/game/Entities/Creature/CreatureGroups.h
@@ -40,10 +40,17 @@ typedef std::unordered_map<uint32/*memberDBGUID*/, FormationInfo*> CreatureGro
class FormationMgr
{
- friend class ACE_Singleton<FormationMgr, ACE_Null_Mutex>;
- public:
+ private:
FormationMgr() { }
~FormationMgr();
+
+ public:
+ static FormationMgr* instance()
+ {
+ static FormationMgr* instance = new FormationMgr();
+ return instance;
+ }
+
void AddCreatureToGroup(uint32 group_id, Creature* creature);
void RemoveCreatureFromGroup(CreatureGroup* group, Creature* creature);
void LoadCreatureFormations();
@@ -78,6 +85,6 @@ class CreatureGroup
void MemberAttackStart(Creature* member, Unit* target);
};
-#define sFormationMgr ACE_Singleton<FormationMgr, ACE_Null_Mutex>::instance()
+#define sFormationMgr FormationMgr::instance()
#endif
diff --git a/src/server/game/Entities/Item/Item.cpp b/src/server/game/Entities/Item/Item.cpp
index 4573b85c7f3..e041e063080 100644
--- a/src/server/game/Entities/Item/Item.cpp
+++ b/src/server/game/Entities/Item/Item.cpp
@@ -310,7 +310,7 @@ void Item::UpdateDuration(Player* owner, uint32 diff)
void Item::SaveToDB(SQLTransaction& trans)
{
- bool isInTransaction = !(trans.null());
+ bool isInTransaction = !trans;
if (!isInTransaction)
trans = CharacterDatabase.BeginTransaction();
@@ -1129,7 +1129,7 @@ void Item::SaveRefundDataToDB()
void Item::DeleteRefundDataFromDB(SQLTransaction* trans)
{
- if (trans && !trans->null())
+ if (trans)
{
PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_DEL_ITEM_REFUND_INSTANCE);
stmt->setUInt32(0, GetGUIDLow());
diff --git a/src/server/game/Entities/Player/Player.cpp b/src/server/game/Entities/Player/Player.cpp
index 9733c0f2b52..f2823cc1435 100644
--- a/src/server/game/Entities/Player/Player.cpp
+++ b/src/server/game/Entities/Player/Player.cpp
@@ -7326,7 +7326,7 @@ void Player::ModifyHonorPoints(int32 value, SQLTransaction* trans /*=NULL*/)
newValue = 0;
SetHonorPoints(uint32(newValue));
- if (trans && !trans->null())
+ if (trans && !trans)
{
PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_UPD_CHAR_HONOR_POINTS);
stmt->setUInt32(0, newValue);
@@ -7342,7 +7342,7 @@ void Player::ModifyArenaPoints(int32 value, SQLTransaction* trans /*=NULL*/)
newValue = 0;
SetArenaPoints(uint32(newValue));
- if (trans && !trans->null())
+ if (trans && !trans)
{
PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_UPD_CHAR_ARENA_POINTS);
stmt->setUInt32(0, newValue);
@@ -19769,7 +19769,7 @@ void Player::_SaveMail(SQLTransaction& trans)
void Player::_SaveQuestStatus(SQLTransaction& trans)
{
- bool isTransaction = !trans.null();
+ bool isTransaction = !trans;
if (!isTransaction)
trans = CharacterDatabase.BeginTransaction();
diff --git a/src/server/game/Entities/Player/SocialMgr.h b/src/server/game/Entities/Player/SocialMgr.h
index 910c9164738..68c25fbf648 100644
--- a/src/server/game/Entities/Player/SocialMgr.h
+++ b/src/server/game/Entities/Player/SocialMgr.h
@@ -19,7 +19,6 @@
#ifndef __TRINITY_SOCIALMGR_H
#define __TRINITY_SOCIALMGR_H
-#include <ace/Singleton.h>
#include "DatabaseEnv.h"
#include "Common.h"
@@ -123,13 +122,17 @@ class PlayerSocial
class SocialMgr
{
- friend class ACE_Singleton<SocialMgr, ACE_Null_Mutex>;
-
private:
SocialMgr();
~SocialMgr();
public:
+ static SocialMgr* instance()
+ {
+ static SocialMgr* instance = new SocialMgr();
+ return instance;
+ }
+
// Misc
void RemovePlayerSocial(uint32 guid) { m_socialMap.erase(guid); }
@@ -144,5 +147,5 @@ class SocialMgr
SocialMap m_socialMap;
};
-#define sSocialMgr ACE_Singleton<SocialMgr, ACE_Null_Mutex>::instance()
+#define sSocialMgr SocialMgr::instance()
#endif
diff --git a/src/server/game/Events/GameEventMgr.h b/src/server/game/Events/GameEventMgr.h
index df062c6f660..94beb9912d5 100644
--- a/src/server/game/Events/GameEventMgr.h
+++ b/src/server/game/Events/GameEventMgr.h
@@ -22,7 +22,6 @@
#include "Common.h"
#include "SharedDefines.h"
#include "Define.h"
-#include <ace/Singleton.h>
#define max_ge_check_delay DAY // 1 day in seconds
@@ -95,13 +94,17 @@ class Quest;
class GameEventMgr
{
- friend class ACE_Singleton<GameEventMgr, ACE_Null_Mutex>;
-
private:
GameEventMgr();
~GameEventMgr() { };
public:
+ static GameEventMgr* instance()
+ {
+ static GameEventMgr* instance = new GameEventMgr();
+ return instance;
+ }
+
typedef std::set<uint16> ActiveEvents;
typedef std::vector<GameEventData> GameEventDataMap;
ActiveEvents const& GetActiveEventList() const { return m_ActiveEvents; }
@@ -180,7 +183,7 @@ class GameEventMgr
GameEventGuidMap mGameEventGameobjectGuids;
};
-#define sGameEventMgr ACE_Singleton<GameEventMgr, ACE_Null_Mutex>::instance()
+#define sGameEventMgr GameEventMgr::instance()
bool IsHolidayActive(HolidayIds id);
bool IsEventActive(uint16 event_id);
diff --git a/src/server/game/Globals/ObjectMgr.h b/src/server/game/Globals/ObjectMgr.h
index ba5940d7e12..20941901731 100644
--- a/src/server/game/Globals/ObjectMgr.h
+++ b/src/server/game/Globals/ObjectMgr.h
@@ -35,7 +35,6 @@
#include "Map.h"
#include "ObjectAccessor.h"
#include "ObjectDefines.h"
-#include <ace/Singleton.h>
#include "VehicleDefines.h"
#include <string>
#include <map>
@@ -687,13 +686,18 @@ class PlayerDumpReader;
class ObjectMgr
{
friend class PlayerDumpReader;
- friend class ACE_Singleton<ObjectMgr, ACE_Null_Mutex>;
private:
ObjectMgr();
~ObjectMgr();
public:
+ static ObjectMgr* instance()
+ {
+ static ObjectMgr* instance = new ObjectMgr();
+ return instance;
+ }
+
typedef std::unordered_map<uint32, Item*> ItemMap;
typedef std::unordered_map<uint32, Quest*> QuestMap;
@@ -1442,6 +1446,6 @@ class ObjectMgr
std::set<uint32> _transportMaps; // Helper container storing map ids that are for transports only, loaded from gameobject_template
};
-#define sObjectMgr ACE_Singleton<ObjectMgr, ACE_Null_Mutex>::instance()
+#define sObjectMgr ObjectMgr::instance()
#endif
diff --git a/src/server/game/Groups/GroupMgr.h b/src/server/game/Groups/GroupMgr.h
index a805b7514da..4bf440c881e 100644
--- a/src/server/game/Groups/GroupMgr.h
+++ b/src/server/game/Groups/GroupMgr.h
@@ -22,12 +22,17 @@
class GroupMgr
{
- friend class ACE_Singleton<GroupMgr, ACE_Null_Mutex>;
private:
GroupMgr();
~GroupMgr();
public:
+ static GroupMgr* instance()
+ {
+ static GroupMgr* instance = new GroupMgr();
+ return instance;
+ }
+
typedef std::map<uint32, Group*> GroupContainer;
typedef std::vector<Group*> GroupDbContainer;
@@ -53,6 +58,6 @@ protected:
GroupDbContainer GroupDbStore;
};
-#define sGroupMgr ACE_Singleton<GroupMgr, ACE_Null_Mutex>::instance()
+#define sGroupMgr GroupMgr::instance()
#endif
diff --git a/src/server/game/Guilds/GuildMgr.h b/src/server/game/Guilds/GuildMgr.h
index e8e6acb1bf0..032a8864e3e 100644
--- a/src/server/game/Guilds/GuildMgr.h
+++ b/src/server/game/Guilds/GuildMgr.h
@@ -22,13 +22,17 @@
class GuildMgr
{
- friend class ACE_Singleton<GuildMgr, ACE_Null_Mutex>;
-
private:
GuildMgr();
~GuildMgr();
public:
+ static GuildMgr* instance()
+ {
+ static GuildMgr* instance = new GuildMgr();
+ return instance;
+ }
+
Guild* GetGuildByLeader(uint64 guid) const;
Guild* GetGuildById(uint32 guildId) const;
Guild* GetGuildByName(std::string const& guildName) const;
@@ -48,6 +52,6 @@ protected:
GuildContainer GuildStore;
};
-#define sGuildMgr ACE_Singleton<GuildMgr, ACE_Null_Mutex>::instance()
+#define sGuildMgr GuildMgr::instance()
#endif
diff --git a/src/server/game/Handlers/AddonHandler.cpp b/src/server/game/Handlers/AddonHandler.cpp
index 806cbd1c7fc..8a00ddc22f4 100644
--- a/src/server/game/Handlers/AddonHandler.cpp
+++ b/src/server/game/Handlers/AddonHandler.cpp
@@ -22,10 +22,6 @@
#include "Opcodes.h"
#include "Log.h"
-AddonHandler::AddonHandler() { }
-
-AddonHandler::~AddonHandler() { }
-
bool AddonHandler::BuildAddonPacket(WorldPacket* source, WorldPacket* target)
{
ByteBuffer AddOnPacked;
diff --git a/src/server/game/Handlers/AddonHandler.h b/src/server/game/Handlers/AddonHandler.h
index 97a541753d0..31bbfa01900 100644
--- a/src/server/game/Handlers/AddonHandler.h
+++ b/src/server/game/Handlers/AddonHandler.h
@@ -21,20 +21,23 @@
#include "Common.h"
#include "Config.h"
-#include <ace/Singleton.h>
#include "WorldPacket.h"
class AddonHandler
{
- /* Construction */
- friend class ACE_Singleton<AddonHandler, ACE_Null_Mutex>;
- AddonHandler();
-
public:
- ~AddonHandler();
- //build addon packet
+ static AddonHandler* instance()
+ {
+ static AddonHandler* instance = new AddonHandler();
+ return instance;
+ }
+
bool BuildAddonPacket(WorldPacket* Source, WorldPacket* Target);
+
+ private:
+ AddonHandler() { }
+ ~AddonHandler() { }
};
-#define sAddOnHandler ACE_Singleton<AddonHandler, ACE_Null_Mutex>::instance()
+#define sAddOnHandler AddonHandler::instance()
#endif
diff --git a/src/server/game/Maps/MapManager.h b/src/server/game/Maps/MapManager.h
index 91becb88dfe..990d5e80c1a 100644
--- a/src/server/game/Maps/MapManager.h
+++ b/src/server/game/Maps/MapManager.h
@@ -24,18 +24,18 @@
#include "GridStates.h"
#include "MapUpdater.h"
-#include <ace/Singleton.h>
-#include <ace/Thread_Mutex.h>
-
-
class Transport;
struct TransportCreatureProto;
class MapManager
{
- friend class ACE_Singleton<MapManager, ACE_Thread_Mutex>;
-
public:
+ static MapManager* instance()
+ {
+ static MapManager* instance = new MapManager();
+ return instance;
+ }
+
Map* CreateBaseMap(uint32 mapId);
Map* FindBaseNonInstanceMap(uint32 mapId) const;
Map* CreateMap(uint32 mapId, Player* player);
@@ -150,5 +150,5 @@ class MapManager
uint32 _nextInstanceId;
MapUpdater m_updater;
};
-#define sMapMgr ACE_Singleton<MapManager, ACE_Thread_Mutex>::instance()
+#define sMapMgr MapManager::instance()
#endif
diff --git a/src/server/game/Maps/TransportMgr.h b/src/server/game/Maps/TransportMgr.h
index 5da856b185c..6ebc6316710 100644
--- a/src/server/game/Maps/TransportMgr.h
+++ b/src/server/game/Maps/TransportMgr.h
@@ -18,7 +18,6 @@
#ifndef TRANSPORTMGR_H
#define TRANSPORTMGR_H
-#include <ace/Singleton.h>
#include <G3D/Quat.h>
#include "Spline.h"
#include "DBCStores.h"
@@ -96,10 +95,15 @@ typedef std::map<uint32, TransportAnimation> TransportAnimationContainer;
class TransportMgr
{
- friend class ACE_Singleton<TransportMgr, ACE_Thread_Mutex>;
friend void LoadDBCStores(std::string const&);
public:
+ static TransportMgr* instance()
+ {
+ static TransportMgr* instance = new TransportMgr();
+ return instance;
+ }
+
void Unload();
void LoadTransportTemplates();
@@ -155,6 +159,6 @@ class TransportMgr
TransportAnimationContainer _transportAnimations;
};
-#define sTransportMgr ACE_Singleton<TransportMgr, ACE_Thread_Mutex>::instance()
+#define sTransportMgr TransportMgr::instance()
#endif // TRANSPORTMGR_H
diff --git a/src/server/game/Movement/MovementGenerator.h b/src/server/game/Movement/MovementGenerator.h
index 5c74bef8d8c..12116b5505d 100755
--- a/src/server/game/Movement/MovementGenerator.h
+++ b/src/server/game/Movement/MovementGenerator.h
@@ -20,7 +20,6 @@
#define TRINITY_MOVEMENTGENERATOR_H
#include "Define.h"
-#include <ace/Singleton.h>
#include "ObjectRegistry.h"
#include "FactoryHolder.h"
#include "Common.h"
diff --git a/src/server/game/Movement/Waypoints/WaypointManager.h b/src/server/game/Movement/Waypoints/WaypointManager.h
index bafc6322e71..b12396293aa 100644
--- a/src/server/game/Movement/Waypoints/WaypointManager.h
+++ b/src/server/game/Movement/Waypoints/WaypointManager.h
@@ -19,8 +19,6 @@
#ifndef TRINITY_WAYPOINTMANAGER_H
#define TRINITY_WAYPOINTMANAGER_H
-#include <ace/Singleton.h>
-#include <ace/Null_Mutex.h>
#include <vector>
struct WaypointData
@@ -38,9 +36,13 @@ typedef std::unordered_map<uint32, WaypointPath> WaypointPathContainer;
class WaypointMgr
{
- friend class ACE_Singleton<WaypointMgr, ACE_Null_Mutex>;
-
public:
+ static WaypointMgr* instance()
+ {
+ static WaypointMgr* instance = new WaypointMgr();
+ return instance;
+ }
+
// Attempts to reload a single path from database
void ReloadPath(uint32 id);
@@ -58,13 +60,12 @@ class WaypointMgr
}
private:
- // Only allow instantiation from ACE_Singleton
WaypointMgr();
~WaypointMgr();
WaypointPathContainer _waypointStore;
};
-#define sWaypointMgr ACE_Singleton<WaypointMgr, ACE_Null_Mutex>::instance()
+#define sWaypointMgr WaypointMgr::instance()
#endif
diff --git a/src/server/game/OutdoorPvP/OutdoorPvPMgr.h b/src/server/game/OutdoorPvP/OutdoorPvPMgr.h
index 54ea2f3ba1d..ab1908e273d 100644
--- a/src/server/game/OutdoorPvP/OutdoorPvPMgr.h
+++ b/src/server/game/OutdoorPvP/OutdoorPvPMgr.h
@@ -21,7 +21,6 @@
#define OUTDOORPVP_OBJECTIVE_UPDATE_INTERVAL 1000
#include "OutdoorPvP.h"
-#include <ace/Singleton.h>
class Player;
class GameObject;
@@ -38,13 +37,17 @@ struct OutdoorPvPData
// class to handle player enter / leave / areatrigger / GO use events
class OutdoorPvPMgr
{
- friend class ACE_Singleton<OutdoorPvPMgr, ACE_Null_Mutex>;
-
private:
OutdoorPvPMgr();
~OutdoorPvPMgr() { };
public:
+ static OutdoorPvPMgr* instance()
+ {
+ static OutdoorPvPMgr* instance = new OutdoorPvPMgr();
+ return instance;
+ }
+
// create outdoor pvp events
void InitOutdoorPvP();
@@ -101,6 +104,6 @@ class OutdoorPvPMgr
uint32 m_UpdateTimer;
};
-#define sOutdoorPvPMgr ACE_Singleton<OutdoorPvPMgr, ACE_Null_Mutex>::instance()
+#define sOutdoorPvPMgr OutdoorPvPMgr::instance()
#endif /*OUTDOOR_PVP_MGR_H_*/
diff --git a/src/server/game/Pools/PoolMgr.h b/src/server/game/Pools/PoolMgr.h
index 2bc404b3a36..0a3f52b55f6 100644
--- a/src/server/game/Pools/PoolMgr.h
+++ b/src/server/game/Pools/PoolMgr.h
@@ -20,7 +20,6 @@
#define TRINITY_POOLHANDLER_H
#include "Define.h"
-#include <ace/Singleton.h>
#include "Creature.h"
#include "GameObject.h"
#include "QuestDef.h"
@@ -104,13 +103,17 @@ typedef std::pair<PooledQuestRelation::iterator, PooledQuestRelation::iterator>
class PoolMgr
{
- friend class ACE_Singleton<PoolMgr, ACE_Null_Mutex>;
-
private:
PoolMgr();
~PoolMgr() { };
public:
+ static PoolMgr* instance()
+ {
+ static PoolMgr* instance = new PoolMgr();
+ return instance;
+ }
+
void LoadFromDB();
void LoadQuestPools();
void SaveQuestsToDB();
@@ -164,7 +167,7 @@ class PoolMgr
ActivePoolData mSpawnedData;
};
-#define sPoolMgr ACE_Singleton<PoolMgr, ACE_Null_Mutex>::instance()
+#define sPoolMgr PoolMgr::instance()
// Method that tell if the creature is part of a pool and return the pool id if yes
template<>
diff --git a/src/server/game/Scripting/ScriptMgr.h b/src/server/game/Scripting/ScriptMgr.h
index ee95759c72e..4f6027bedec 100644
--- a/src/server/game/Scripting/ScriptMgr.h
+++ b/src/server/game/Scripting/ScriptMgr.h
@@ -20,7 +20,6 @@
#define SC_SCRIPTMGR_H
#include "Common.h"
-#include <ace/Singleton.h>
#include <ace/Atomic_Op.h>
#include "DBCStores.h"
@@ -869,20 +868,23 @@ class GroupScript : public ScriptObject
};
// Placed here due to ScriptRegistry::AddScript dependency.
-#define sScriptMgr ACE_Singleton<ScriptMgr, ACE_Null_Mutex>::instance()
+#define sScriptMgr ScriptMgr::instance()
// Manages registration, loading, and execution of scripts.
class ScriptMgr
{
- friend class ACE_Singleton<ScriptMgr, ACE_Null_Mutex>;
friend class ScriptObject;
private:
-
ScriptMgr();
virtual ~ScriptMgr();
public: /* Initialization */
+ static ScriptMgr* instance()
+ {
+ static ScriptMgr* instance = new ScriptMgr();
+ return instance;
+ }
void Initialize();
void LoadDatabase();
diff --git a/src/server/game/Scripting/ScriptSystem.h b/src/server/game/Scripting/ScriptSystem.h
index 11120f3031b..636343838c1 100644
--- a/src/server/game/Scripting/ScriptSystem.h
+++ b/src/server/game/Scripting/ScriptSystem.h
@@ -6,7 +6,6 @@
#define SC_SYSTEM_H
#include "ScriptMgr.h"
-#include <ace/Singleton.h>
#define TEXT_SOURCE_RANGE -1000000 //the amount of entries each text source has available
@@ -48,11 +47,17 @@ typedef std::vector<ScriptPointMove> ScriptPointVector;
class SystemMgr
{
- friend class ACE_Singleton<SystemMgr, ACE_Null_Mutex>;
+ private:
SystemMgr() { }
~SystemMgr() { }
public:
+ static SystemMgr* instance()
+ {
+ static SystemMgr* instance = new SystemMgr();
+ return instance;
+ }
+
typedef std::unordered_map<uint32, ScriptPointVector> PointMoveMap;
//Database
@@ -75,6 +80,6 @@ class SystemMgr
static ScriptPointVector const _empty;
};
-#define sScriptSystemMgr ACE_Singleton<SystemMgr, ACE_Null_Mutex>::instance()
+#define sScriptSystemMgr SystemMgr::instance()
#endif
diff --git a/src/server/game/Server/Protocol/PacketLog.h b/src/server/game/Server/Protocol/PacketLog.h
index 9c60655e627..71d87bf45ae 100644
--- a/src/server/game/Server/Protocol/PacketLog.h
+++ b/src/server/game/Server/Protocol/PacketLog.h
@@ -19,7 +19,6 @@
#define TRINITY_PACKETLOG_H
#include "Common.h"
-#include <ace/Singleton.h>
enum Direction
{
@@ -31,13 +30,17 @@ class WorldPacket;
class PacketLog
{
- friend class ACE_Singleton<PacketLog, ACE_Thread_Mutex>;
-
private:
PacketLog();
~PacketLog();
public:
+ static PacketLog* instance()
+ {
+ static PacketLog* instance = new PacketLog();
+ return instance;
+ }
+
void Initialize();
bool CanLogPacket() const { return (_file != NULL); }
void LogPacket(WorldPacket const& packet, Direction direction);
@@ -46,5 +49,5 @@ class PacketLog
FILE* _file;
};
-#define sPacketLog ACE_Singleton<PacketLog, ACE_Thread_Mutex>::instance()
+#define sPacketLog PacketLog::instance()
#endif
diff --git a/src/server/game/Server/WorldSession.cpp b/src/server/game/Server/WorldSession.cpp
index 0c391993c0b..7fbc398a4da 100644
--- a/src/server/game/Server/WorldSession.cpp
+++ b/src/server/game/Server/WorldSession.cpp
@@ -780,7 +780,7 @@ void WorldSession::SaveTutorialsData(SQLTransaction &trans)
PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_SEL_HAS_TUTORIALS);
stmt->setUInt32(0, GetAccountId());
- bool hasTutorials = !CharacterDatabase.Query(stmt).null();
+ bool hasTutorials = !CharacterDatabase.Query(stmt);
// Modify data in DB
stmt = CharacterDatabase.GetPreparedStatement(hasTutorials ? CHAR_UPD_TUTORIALS : CHAR_INS_TUTORIALS);
for (uint8 i = 0; i < MAX_ACCOUNT_TUTORIAL_VALUES; ++i)
diff --git a/src/server/game/Server/WorldSocketMgr.h b/src/server/game/Server/WorldSocketMgr.h
index fb8ddb42b9e..2c91a164ff9 100644
--- a/src/server/game/Server/WorldSocketMgr.h
+++ b/src/server/game/Server/WorldSocketMgr.h
@@ -26,7 +26,6 @@
#define __WORLDSOCKETMGR_H
#include <ace/Basic_Types.h>
-#include <ace/Singleton.h>
#include <ace/Thread_Mutex.h>
class WorldSocket;
@@ -36,9 +35,14 @@ class ACE_Event_Handler;
/// Manages all sockets connected to peers and network threads
class WorldSocketMgr
{
-public:
friend class WorldSocket;
- friend class ACE_Singleton<WorldSocketMgr, ACE_Thread_Mutex>;
+
+public:
+ static WorldSocketMgr* instance()
+ {
+ static WorldSocketMgr* instance = new WorldSocketMgr();
+ return instance;
+ }
/// Start network, listen at address:port .
int StartNetwork(ACE_UINT16 port, const char* address);
@@ -68,7 +72,7 @@ private:
class WorldSocketAcceptor* m_Acceptor;
};
-#define sWorldSocketMgr ACE_Singleton<WorldSocketMgr, ACE_Thread_Mutex>::instance()
+#define sWorldSocketMgr WorldSocketMgr::instance()
#endif
/// @}
diff --git a/src/server/game/Spells/SpellMgr.h b/src/server/game/Spells/SpellMgr.h
index 757bd813613..53b4cef73e8 100644
--- a/src/server/game/Spells/SpellMgr.h
+++ b/src/server/game/Spells/SpellMgr.h
@@ -21,8 +21,6 @@
// For static or at-server-startup loaded spell data
-#include <ace/Singleton.h>
-
#include "Define.h"
#include "DBCStructure.h"
#include "SharedDefines.h"
@@ -603,7 +601,6 @@ bool IsDiminishingReturnsGroupDurationLimited(DiminishingGroup group);
class SpellMgr
{
- friend class ACE_Singleton<SpellMgr, ACE_Null_Mutex>;
// Constructors
private:
SpellMgr();
@@ -611,6 +608,13 @@ class SpellMgr
// Accessors (const or static functions)
public:
+ static SpellMgr* instance()
+ {
+ static SpellMgr* instance = new SpellMgr();
+
+ return instance;
+ }
+
// Spell correctness for client using
static bool IsSpellValid(SpellInfo const* spellInfo, Player* player = NULL, bool msg = true);
@@ -766,6 +770,6 @@ class SpellMgr
SpellInfoMap mSpellInfoMap;
};
-#define sSpellMgr ACE_Singleton<SpellMgr, ACE_Null_Mutex>::instance()
+#define sSpellMgr SpellMgr::instance()
#endif
diff --git a/src/server/game/Texts/CreatureTextMgr.h b/src/server/game/Texts/CreatureTextMgr.h
index ab5b9f59032..f8c499f7ce6 100644
--- a/src/server/game/Texts/CreatureTextMgr.h
+++ b/src/server/game/Texts/CreatureTextMgr.h
@@ -82,11 +82,17 @@ typedef std::unordered_map<uint64, CreatureTextRepeatGroup> CreatureTextRepeatMa
class CreatureTextMgr
{
- friend class ACE_Singleton<CreatureTextMgr, ACE_Null_Mutex>;
- CreatureTextMgr() { };
+ private:
+ CreatureTextMgr() { };
+ ~CreatureTextMgr() { };
public:
- ~CreatureTextMgr() { };
+ static CreatureTextMgr* instance()
+ {
+ static CreatureTextMgr* instance = new CreatureTextMgr();
+ return instance;
+ }
+
void LoadCreatureTexts();
void LoadCreatureTextLocales();
CreatureTextMap const& GetTextMap() const { return mTextMap; }
@@ -113,7 +119,7 @@ class CreatureTextMgr
LocaleCreatureTextMap mLocaleTextMap;
};
-#define sCreatureTextMgr ACE_Singleton<CreatureTextMgr, ACE_Null_Mutex>::instance()
+#define sCreatureTextMgr CreatureTextMgr::instance()
template<class Builder>
class CreatureTextLocalizer
diff --git a/src/server/game/Tickets/TicketMgr.h b/src/server/game/Tickets/TicketMgr.h
index 5bfe78abbba..5f85ee307ed 100644
--- a/src/server/game/Tickets/TicketMgr.h
+++ b/src/server/game/Tickets/TicketMgr.h
@@ -19,7 +19,6 @@
#define _TICKETMGR_H
#include <string>
-#include <ace/Singleton.h>
#include "ObjectMgr.h"
@@ -174,13 +173,17 @@ typedef std::map<uint32, GmTicket*> GmTicketList;
class TicketMgr
{
- friend class ACE_Singleton<TicketMgr, ACE_Null_Mutex>;
-
private:
TicketMgr();
~TicketMgr();
public:
+ static TicketMgr* instance()
+ {
+ static TicketMgr* instance = new TicketMgr();
+ return instance;
+ }
+
void LoadTickets();
void LoadSurveys();
@@ -246,6 +249,6 @@ protected:
uint64 _lastChange;
};
-#define sTicketMgr ACE_Singleton<TicketMgr, ACE_Null_Mutex>::instance()
+#define sTicketMgr TicketMgr::instance()
#endif // _TICKETMGR_H
diff --git a/src/server/game/Warden/WardenCheckMgr.h b/src/server/game/Warden/WardenCheckMgr.h
index 8f2fa37400d..1108c9a6521 100644
--- a/src/server/game/Warden/WardenCheckMgr.h
+++ b/src/server/game/Warden/WardenCheckMgr.h
@@ -48,11 +48,17 @@ struct WardenCheckResult
class WardenCheckMgr
{
- friend class ACE_Singleton<WardenCheckMgr, ACE_Null_Mutex>;
- WardenCheckMgr();
- ~WardenCheckMgr();
+ private:
+ WardenCheckMgr();
+ ~WardenCheckMgr();
public:
+ static WardenCheckMgr* instance()
+ {
+ static WardenCheckMgr* instance = new WardenCheckMgr();
+ return instance;
+ }
+
// We have a linear key without any gaps, so we use vector for fast access
typedef std::vector<WardenCheck*> CheckContainer;
typedef std::map<uint32, WardenCheckResult*> CheckResultContainer;
@@ -73,6 +79,6 @@ class WardenCheckMgr
CheckResultContainer CheckResultStore;
};
-#define sWardenCheckMgr ACE_Singleton<WardenCheckMgr, ACE_Null_Mutex>::instance()
+#define sWardenCheckMgr WardenCheckMgr::instance()
#endif
diff --git a/src/server/game/Weather/WeatherMgr.cpp b/src/server/game/Weather/WeatherMgr.cpp
index 5cf5cde75fd..5274dcd358d 100644
--- a/src/server/game/Weather/WeatherMgr.cpp
+++ b/src/server/game/Weather/WeatherMgr.cpp
@@ -34,7 +34,7 @@ namespace WeatherMgr
namespace
{
- typedef std::unordered_map<uint32, Trinity::AutoPtr<Weather, ACE_Null_Mutex> > WeatherMap;
+ typedef std::unordered_map<uint32, std::shared_ptr<Weather> > WeatherMap;
typedef std::unordered_map<uint32, WeatherData> WeatherZoneMap;
WeatherMap m_weathers;
diff --git a/src/server/game/World/World.cpp b/src/server/game/World/World.cpp
index 234a366b08e..4a46412dff7 100644
--- a/src/server/game/World/World.cpp
+++ b/src/server/game/World/World.cpp
@@ -668,7 +668,7 @@ void World::LoadConfigSettings(bool reload)
m_bool_configs[CONFIG_ALLOW_TWO_SIDE_INTERACTION_GROUP] = sConfigMgr->GetBoolDefault("AllowTwoSide.Interaction.Group", false);
m_bool_configs[CONFIG_ALLOW_TWO_SIDE_INTERACTION_GUILD] = sConfigMgr->GetBoolDefault("AllowTwoSide.Interaction.Guild", false);
m_bool_configs[CONFIG_ALLOW_TWO_SIDE_INTERACTION_AUCTION] = sConfigMgr->GetBoolDefault("AllowTwoSide.Interaction.Auction", false);
- m_bool_configs[CONFIG_ALLOW_TWO_SIDE_TRADE] = sConfigMgr->GetBoolDefault("AllowTwoSide.trade", false);
+ m_bool_configs[CONFIG_ALLOW_TWO_SIDE_TRADE] = sConfigMgr->GetBoolDefault("AllowTwoSide.Trade", false);
m_int_configs[CONFIG_STRICT_PLAYER_NAMES] = sConfigMgr->GetIntDefault ("StrictPlayerNames", 0);
m_int_configs[CONFIG_STRICT_CHARTER_NAMES] = sConfigMgr->GetIntDefault ("StrictCharterNames", 0);
m_int_configs[CONFIG_STRICT_PET_NAMES] = sConfigMgr->GetIntDefault ("StrictPetNames", 0);
@@ -1255,8 +1255,6 @@ void World::LoadConfigSettings(bool reload)
m_bool_configs[CONFIG_IP_BASED_ACTION_LOGGING] = sConfigMgr->GetBoolDefault("Allow.IP.Based.Action.Logging", false);
- m_bool_configs[CONFIG_IP_BASED_LOGIN_LOGGING] = sConfigMgr->GetBoolDefault("Wrong.Password.Login.Logging", false);
-
// call ScriptMgr if we're reloading the configuration
if (reload)
sScriptMgr->OnConfigLoad(reload);
diff --git a/src/server/game/World/World.h b/src/server/game/World/World.h
index 4096dd7399a..f9528c793f7 100644
--- a/src/server/game/World/World.h
+++ b/src/server/game/World/World.h
@@ -25,9 +25,7 @@
#include "Common.h"
#include "Timer.h"
-#include <ace/Singleton.h>
#include <ace/Atomic_Op.h>
-#include <ace/Null_Mutex.h>
#include "SharedDefines.h"
#include "QueryResult.h"
#include "Callback.h"
@@ -156,7 +154,6 @@ enum WorldBoolConfigs
CONFIG_STATS_LIMITS_ENABLE,
CONFIG_INSTANCES_RESET_ANNOUNCE,
CONFIG_IP_BASED_ACTION_LOGGING,
- CONFIG_IP_BASED_LOGIN_LOGGING,
BOOL_CONFIG_VALUE_COUNT
};
@@ -520,10 +517,13 @@ struct CharacterNameData
class World
{
public:
- static ACE_Atomic_Op<ACE_Thread_Mutex, uint32> m_worldLoopCounter;
+ static World* instance()
+ {
+ static World* instance = new World();
+ return instance;
+ }
- World();
- ~World();
+ static ACE_Atomic_Op<ACE_Thread_Mutex, uint32> m_worldLoopCounter;
WorldSession* FindSession(uint32 id) const;
void AddSession(WorldSession* s);
@@ -758,6 +758,9 @@ class World
void ResetRandomBG();
void ResetGuildCap();
private:
+ World();
+ ~World();
+
static ACE_Atomic_Op<ACE_Thread_Mutex, bool> m_stopEvent;
static uint8 m_ExitCode;
uint32 m_ShutdownTimer;
@@ -845,6 +848,6 @@ class World
extern uint32 realmID;
-#define sWorld ACE_Singleton<World, ACE_Null_Mutex>::instance()
+#define sWorld World::instance()
#endif
/// @}
diff --git a/src/server/shared/Cryptography/ARC4.h b/src/server/shared/Cryptography/ARC4.h
index 5304b0730a6..11d3d4ba87b 100644
--- a/src/server/shared/Cryptography/ARC4.h
+++ b/src/server/shared/Cryptography/ARC4.h
@@ -19,8 +19,8 @@
#ifndef _AUTH_SARC4_H
#define _AUTH_SARC4_H
-#include "Define.h"
#include <openssl/evp.h>
+#include "Define.h"
class ARC4
{
diff --git a/src/server/shared/Cryptography/BigNumber.h b/src/server/shared/Cryptography/BigNumber.h
index 848b3da3e2d..684a25e8801 100644
--- a/src/server/shared/Cryptography/BigNumber.h
+++ b/src/server/shared/Cryptography/BigNumber.h
@@ -22,7 +22,6 @@
#include <memory>
#include "Define.h"
-
struct bignum_st;
class BigNumber
diff --git a/src/server/shared/Database/DatabaseWorkerPool.h b/src/server/shared/Database/DatabaseWorkerPool.h
index e56dcc329cd..4b9e887f341 100644
--- a/src/server/shared/Database/DatabaseWorkerPool.h
+++ b/src/server/shared/Database/DatabaseWorkerPool.h
@@ -18,8 +18,6 @@
#ifndef _DATABASEWORKERPOOL_H
#define _DATABASEWORKERPOOL_H
-#include <ace/Thread_Mutex.h>
-
#include "Common.h"
#include "Callback.h"
#include "MySQLConnection.h"
@@ -51,7 +49,6 @@ class DatabaseWorkerPool
/* Activity state */
DatabaseWorkerPool() : _connectionInfo(NULL)
{
- _messageQueue = new ACE_Message_Queue<ACE_SYNCH>(8 * 1024 * 1024, 8 * 1024 * 1024);
_queue = new ProducerConsumerQueue<SQLOperation*>();
memset(_connectionCount, 0, sizeof(_connectionCount));
_connections.resize(IDX_SIZE);
@@ -125,9 +122,7 @@ class DatabaseWorkerPool
for (uint8 i = 0; i < _connectionCount[IDX_SYNCH]; ++i)
_connections[IDX_SYNCH][i]->Close();
- //! Deletes the ACE_Activation_Queue object and its underlying ACE_Message_Queue
delete _queue;
- delete _messageQueue;
TC_LOG_INFO("sql.driver", "All connections on DatabasePool '%s' closed.", GetDatabaseName());
@@ -410,7 +405,7 @@ class DatabaseWorkerPool
//! Will be wrapped in a transaction if valid object is present, otherwise executed standalone.
void ExecuteOrAppend(SQLTransaction& trans, PreparedStatement* stmt)
{
- if (trans.null())
+ if (!trans)
Execute(stmt);
else
trans->Append(stmt);
@@ -420,7 +415,7 @@ class DatabaseWorkerPool
//! Will be wrapped in a transaction if valid object is present, otherwise executed standalone.
void ExecuteOrAppend(SQLTransaction& trans, const char* sql)
{
- if (trans.null())
+ if (!trans)
Execute(sql);
else
trans->Append(sql);
@@ -517,7 +512,6 @@ class DatabaseWorkerPool
IDX_SIZE
};
- ACE_Message_Queue<ACE_SYNCH>* _messageQueue; //! Message Queue used by ACE_Activation_Queue
ProducerConsumerQueue<SQLOperation*>* _queue; //! Queue shared by async worker threads.
std::vector< std::vector<T*> > _connections;
uint32 _connectionCount[2]; //! Counter of MySQL connections;
diff --git a/src/server/shared/Database/MySQLConnection.h b/src/server/shared/Database/MySQLConnection.h
index 3b7efeb5846..61b3b37cbc2 100644
--- a/src/server/shared/Database/MySQLConnection.h
+++ b/src/server/shared/Database/MySQLConnection.h
@@ -15,8 +15,6 @@
* with this program. If not, see <http://www.gnu.org/licenses/>.
*/
-#include <ace/Activation_Queue.h>
-
#include "DatabaseWorkerPool.h"
#include "Transaction.h"
#include "Util.h"
@@ -100,13 +98,13 @@ class MySQLConnection
{
/// Tries to acquire lock. If lock is acquired by another thread
/// the calling parent will just try another connection
- return m_Mutex.tryacquire() != -1;
+ return m_Mutex.try_lock();
}
void Unlock()
{
/// Called by parent databasepool. Will let other threads access this connection
- m_Mutex.release();
+ m_Mutex.unlock();
}
MYSQL* GetHandle() { return m_Mysql; }
@@ -131,7 +129,7 @@ class MySQLConnection
MYSQL * m_Mysql; //! MySQL Handle.
MySQLConnectionInfo& m_connectionInfo; //! Connection info (used for logging)
ConnectionFlags m_connectionFlags; //! Connection flags (for preparing relevant statements)
- ACE_Thread_Mutex m_Mutex;
+ std::mutex m_Mutex;
MySQLConnection(MySQLConnection const& right) = delete;
MySQLConnection& operator=(MySQLConnection const& right) = delete;
diff --git a/src/server/shared/Database/QueryResult.h b/src/server/shared/Database/QueryResult.h
index 4795fef4a4c..e8c277c03cf 100644
--- a/src/server/shared/Database/QueryResult.h
+++ b/src/server/shared/Database/QueryResult.h
@@ -19,9 +19,7 @@
#ifndef QUERYRESULT_H
#define QUERYRESULT_H
-#include "AutoPtr.h"
-#include <ace/Thread_Mutex.h>
-
+#include <memory>
#include "Field.h"
#ifdef _WIN32
@@ -60,7 +58,7 @@ class ResultSet
ResultSet& operator=(ResultSet const& right) = delete;
};
-typedef Trinity::AutoPtr<ResultSet, ACE_Thread_Mutex> QueryResult;
+typedef std::shared_ptr<ResultSet> QueryResult;
class PreparedResultSet
{
@@ -107,7 +105,7 @@ class PreparedResultSet
PreparedResultSet& operator=(PreparedResultSet const& right) = delete;
};
-typedef Trinity::AutoPtr<PreparedResultSet, ACE_Thread_Mutex> PreparedQueryResult;
+typedef std::shared_ptr<PreparedResultSet> PreparedQueryResult;
#endif
diff --git a/src/server/shared/Database/Transaction.h b/src/server/shared/Database/Transaction.h
index cb28f0ad876..c7cbbbbe712 100644
--- a/src/server/shared/Database/Transaction.h
+++ b/src/server/shared/Database/Transaction.h
@@ -50,7 +50,7 @@ class Transaction
bool _cleanedUp;
};
-typedef Trinity::AutoPtr<Transaction, ACE_Thread_Mutex> SQLTransaction;
+typedef std::shared_ptr<Transaction> SQLTransaction;
/*! Low level class*/
class TransactionTask : public SQLOperation
diff --git a/src/server/shared/Debugging/Errors.cpp b/src/server/shared/Debugging/Errors.cpp
index d656dc3fb4a..62e97d56d42 100644
--- a/src/server/shared/Debugging/Errors.cpp
+++ b/src/server/shared/Debugging/Errors.cpp
@@ -18,17 +18,15 @@
#include "Errors.h"
-#include <ace/Stack_Trace.h>
-#include <ace/OS_NS_unistd.h>
#include <cstdlib>
+#include <thread>
namespace Trinity {
void Assert(char const* file, int line, char const* function, char const* message)
{
- ACE_Stack_Trace st;
- fprintf(stderr, "\n%s:%i in %s ASSERTION FAILED:\n %s\n%s\n",
- file, line, function, message, st.c_str());
+ fprintf(stderr, "\n%s:%i in %s ASSERTION FAILED:\n %s\n",
+ file, line, function, message);
*((volatile int*)NULL) = 0;
exit(1);
}
@@ -37,7 +35,8 @@ void Fatal(char const* file, int line, char const* function, char const* message
{
fprintf(stderr, "\n%s:%i in %s FATAL ERROR:\n %s\n",
file, line, function, message);
- ACE_OS::sleep(10);
+
+ std::this_thread::sleep_for(std::chrono::seconds(10));
*((volatile int*)NULL) = 0;
exit(1);
}
diff --git a/src/server/shared/Logging/Appender.h b/src/server/shared/Logging/Appender.h
index 84d0dc14eca..67213d0ddd0 100644
--- a/src/server/shared/Logging/Appender.h
+++ b/src/server/shared/Logging/Appender.h
@@ -18,10 +18,10 @@
#ifndef APPENDER_H
#define APPENDER_H
-#include "Define.h"
-#include <time.h>
#include <unordered_map>
#include <string>
+#include <time.h>
+#include "Define.h"
// Values assigned have their equivalent in enum ACE_Log_Priority
enum LogLevel
diff --git a/src/server/shared/Logging/AppenderConsole.h b/src/server/shared/Logging/AppenderConsole.h
index 1aaa74e96ec..b8f15b4fa0f 100644
--- a/src/server/shared/Logging/AppenderConsole.h
+++ b/src/server/shared/Logging/AppenderConsole.h
@@ -18,8 +18,8 @@
#ifndef APPENDERCONSOLE_H
#define APPENDERCONSOLE_H
-#include "Appender.h"
#include <string>
+#include "Appender.h"
enum ColorTypes
{
diff --git a/src/server/shared/Logging/AppenderFile.h b/src/server/shared/Logging/AppenderFile.h
index 592742c2184..a600c92d152 100644
--- a/src/server/shared/Logging/AppenderFile.h
+++ b/src/server/shared/Logging/AppenderFile.h
@@ -18,8 +18,8 @@
#ifndef APPENDERFILE_H
#define APPENDERFILE_H
-#include "Appender.h"
#include <atomic>
+#include "Appender.h"
class AppenderFile: public Appender
{
diff --git a/src/server/shared/Threading/Callback.h b/src/server/shared/Threading/Callback.h
index a6aa11b3958..5d9dc9a760d 100644
--- a/src/server/shared/Threading/Callback.h
+++ b/src/server/shared/Threading/Callback.h
@@ -26,10 +26,6 @@ typedef std::promise<QueryResult> QueryResultPromise;
typedef std::future<PreparedQueryResult> PreparedQueryResultFuture;
typedef std::promise<PreparedQueryResult> PreparedQueryResultPromise;
-/*! A simple template using ACE_Future to manage callbacks from the thread and object that
- issued the request. <ParamType> is variable type of parameter that is used as parameter
- for the callback function.
-*/
#define CALLBACK_STAGE_INVALID uint8(-1)
template <typename Result, typename ParamType, bool chain = false>
@@ -210,4 +206,4 @@ class QueryCallback_2
QueryCallback_2& operator=(QueryCallback_2 const& right) = delete;
};
-#endif \ No newline at end of file
+#endif
diff --git a/src/server/shared/Threading/DelayExecutor.cpp b/src/server/shared/Threading/DelayExecutor.cpp
index 0db45a8ff8f..ef3c028fd97 100644
--- a/src/server/shared/Threading/DelayExecutor.cpp
+++ b/src/server/shared/Threading/DelayExecutor.cpp
@@ -1,4 +1,20 @@
-#include <ace/Singleton.h>
+/*
+* Copyright (C) 2008-2014 TrinityCore <http://www.trinitycore.org/>
+*
+* This program is free software; you can redistribute it and/or modify it
+* under the terms of the GNU General Public License as published by the
+* Free Software Foundation; either version 2 of the License, or (at your
+* option) any later version.
+*
+* This program is distributed in the hope that it will be useful, but WITHOUT
+* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
+* more details.
+*
+* You should have received a copy of the GNU General Public License along
+* with this program. If not, see <http://www.gnu.org/licenses/>.
+*/
+
#include <ace/Thread_Mutex.h>
#include <ace/Log_Msg.h>
diff --git a/src/server/shared/Threading/DelayExecutor.h b/src/server/shared/Threading/DelayExecutor.h
index 5eaaacdb98b..2a3721263fc 100644
--- a/src/server/shared/Threading/DelayExecutor.h
+++ b/src/server/shared/Threading/DelayExecutor.h
@@ -8,7 +8,6 @@
class DelayExecutor : protected ACE_Task_Base
{
public:
-
DelayExecutor();
virtual ~DelayExecutor();
@@ -25,7 +24,6 @@ class DelayExecutor : protected ACE_Task_Base
virtual int svc();
private:
-
ACE_Activation_Queue queue_;
ACE_Method_Request* pre_svc_hook_;
ACE_Method_Request* post_svc_hook_;
diff --git a/src/server/worldserver/Master.cpp b/src/server/worldserver/Master.cpp
index 2a8fcdd431a..41060e37b38 100644
--- a/src/server/worldserver/Master.cpp
+++ b/src/server/worldserver/Master.cpp
@@ -22,8 +22,6 @@
#include <thread>
-#include <ace/Sig_Handler.h>
-
#include "Common.h"
#include "SystemConfig.h"
#include "SignalHandler.h"
@@ -46,6 +44,7 @@
#include "BigNumber.h"
#include "OpenSSLCrypto.h"
+#include <boost/asio.hpp>
#ifdef _WIN32
#include "ServiceWin32.h"
@@ -58,27 +57,22 @@ extern int m_ServiceStatus;
#define PROCESS_HIGH_PRIORITY -15 // [-20, 19], default is 0
#endif
-/// Handle worldservers's termination signals
-class WorldServerSignalHandler : public Trinity::SignalHandler
+boost::asio::io_service _ioService;
+
+void SignalHandler(const boost::system::error_code& error, int signalNumber)
{
- public:
- virtual void HandleSignal(int sigNum)
+ if (!error)
+ {
+ switch (signalNumber)
{
- switch (sigNum)
- {
- case SIGINT:
- World::StopNow(RESTART_EXIT_CODE);
- break;
- case SIGTERM:
-#ifdef _WIN32
- case SIGBREAK:
- if (m_ServiceStatus != 1)
-#endif
- World::StopNow(SHUTDOWN_EXIT_CODE);
- break;
- }
+ case SIGINT:
+ case SIGTERM:
+ _ioService.stop();
+ break;
}
-};
+ }
+}
+
void FreezeDetectorThread(uint32 delayTime)
{
@@ -153,23 +147,12 @@ int Master::Run()
///- Initialize the World
sWorld->SetInitialWorldSettings();
- ///- Initialize the signal handlers
- WorldServerSignalHandler signalINT, signalTERM;
- #ifdef _WIN32
- WorldServerSignalHandler signalBREAK;
- #endif /* _WIN32 */
-
- ///- Register worldserver's signal handlers
- ACE_Sig_Handler handle;
- handle.register_handler(SIGINT, &signalINT);
- handle.register_handler(SIGTERM, &signalTERM);
-#ifdef _WIN32
- handle.register_handler(SIGBREAK, &signalBREAK);
-#endif
+ // Set signal handlers
+ boost::asio::signal_set signals(_ioService, SIGINT, SIGTERM);
+ signals.async_wait(SignalHandler);
///- Launch WorldRunnable thread
-
- std::thread worldThread(WorldThread);
+ std::thread worldThread(WorldThread, std::ref(_ioService));
std::thread* cliThread = nullptr;
@@ -286,6 +269,8 @@ int Master::Run()
TC_LOG_INFO("server.worldserver", "%s (worldserver-daemon) ready...", _FULLVERSION);
+ _ioService.run();
+
// when the main thread closes the singletons get unloaded
// since worldrunnable uses them, it will crash if unloaded after master
worldThread.join();
diff --git a/src/server/worldserver/Master.h b/src/server/worldserver/Master.h
index 9ee94a44acb..d2a51b85f4b 100644
--- a/src/server/worldserver/Master.h
+++ b/src/server/worldserver/Master.h
@@ -29,6 +29,12 @@
class Master
{
public:
+ static Master* instance()
+ {
+ static Master* instance = new Master();
+ return instance;
+ }
+
int Run();
private:
@@ -38,7 +44,7 @@ class Master
void ClearOnlineAccounts();
};
-#define sMaster ACE_Singleton<Master, ACE_Null_Mutex>::instance()
+#define sMaster Master::instance()
#endif
diff --git a/src/server/worldserver/WorldThread/WorldRunnable.cpp b/src/server/worldserver/WorldThread/WorldRunnable.cpp
index 7722492b5a8..85c3e7a74b9 100644
--- a/src/server/worldserver/WorldThread/WorldRunnable.cpp
+++ b/src/server/worldserver/WorldThread/WorldRunnable.cpp
@@ -42,7 +42,7 @@ extern int m_ServiceStatus;
#endif
/// Heartbeat for the World
-void WorldThread()
+void WorldThread(boost::asio::io_service& ioService)
{
uint32 realCurrTime = 0;
uint32 realPrevTime = getMSTime();
@@ -84,6 +84,8 @@ void WorldThread()
#endif
}
+ ioService.stop();
+
sScriptMgr->OnShutdown();
sWorld->KickAll(); // save and kick all players
diff --git a/src/server/worldserver/WorldThread/WorldRunnable.h b/src/server/worldserver/WorldThread/WorldRunnable.h
index 915bd5b580a..3e2c07b8842 100644
--- a/src/server/worldserver/WorldThread/WorldRunnable.h
+++ b/src/server/worldserver/WorldThread/WorldRunnable.h
@@ -23,7 +23,9 @@
#ifndef __WORLDRUNNABLE_H
#define __WORLDRUNNABLE_H
-void WorldThread();
+#include <boost/asio.hpp>
+
+void WorldThread(boost::asio::io_service& ioService);
#endif