diff --git a/src/common/Asio/SteadyTimer.h b/src/common/Asio/SteadyTimer.h
new file mode 100644
index 000000000..2c5a6fd7f
--- /dev/null
+++ b/src/common/Asio/SteadyTimer.h
@@ -0,0 +1,31 @@
+/*
+ * This file is part of the AzerothCore Project. See AUTHORS file for Copyright information
+ *
+ * This program is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Affero General Public License as published by the
+ * Free Software Foundation; either version 3 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 Affero 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 .
+ */
+
+#ifndef _STEADYTIMER_H
+#define _STEADYTIMER_H
+
+#include
+
+namespace Acore::Asio::SteadyTimer
+{
+ inline auto GetExpirationTime(int32 seconds)
+ {
+ return std::chrono::steady_clock::now() + std::chrono::seconds(seconds);
+ }
+}
+
+#endif // _STEADYTIMER_H
diff --git a/src/common/Metric/Metric.cpp b/src/common/Metric/Metric.cpp
index a6cd4b1f2..7c4771dca 100644
--- a/src/common/Metric/Metric.cpp
+++ b/src/common/Metric/Metric.cpp
@@ -18,6 +18,7 @@
#include "Metric.h"
#include "Config.h"
#include "Log.h"
+#include "SteadyTimer.h"
#include "Strand.h"
#include "Tokenize.h"
#include
@@ -246,9 +247,7 @@ void Metric::ScheduleSend()
{
if (_enabled)
{
- // Calculate the expiration time
- auto expirationTime = std::chrono::steady_clock::now() + std::chrono::seconds(_updateInterval);
- _batchTimer->expires_at(expirationTime);
+ _batchTimer->expires_at(Acore::Asio::SteadyTimer::GetExpirationTime(_updateInterval));
_batchTimer->async_wait(std::bind(&Metric::SendBatch, this));
}
else
@@ -281,9 +280,7 @@ void Metric::ScheduleOverallStatusLog()
{
if (_enabled)
{
- // Calculate the expiration time _overallStatusTimerInterval from now
- auto expirationTime = std::chrono::steady_clock::now() + std::chrono::seconds(_overallStatusTimerInterval);
- _overallStatusTimer->expires_at(expirationTime);
+ _overallStatusTimer->expires_at(Acore::Asio::SteadyTimer::GetExpirationTime(_overallStatusTimerInterval));
_overallStatusTimer->async_wait([this](const boost::system::error_code&)
{
_overallStatusTimerTriggered = true;
diff --git a/src/server/apps/authserver/Main.cpp b/src/server/apps/authserver/Main.cpp
index 6030d9114..903a12134 100644
--- a/src/server/apps/authserver/Main.cpp
+++ b/src/server/apps/authserver/Main.cpp
@@ -38,6 +38,7 @@
#include "RealmList.h"
#include "SecretMgr.h"
#include "SharedDefines.h"
+#include "SteadyTimer.h"
#include "Util.h"
#include
#include
@@ -179,17 +180,13 @@ int main(int argc, char** argv)
int32 dbPingInterval = sConfigMgr->GetOption("MaxPingTime", 30);
std::shared_ptr dbPingTimer = std::make_shared(*ioContext);
- // Calculate the expiration time
- auto expirationTime = std::chrono::steady_clock::now() + std::chrono::seconds(dbPingInterval);
- dbPingTimer->expires_at(expirationTime);
+ dbPingTimer->expires_at(Acore::Asio::SteadyTimer::GetExpirationTime(dbPingInterval * MINUTE));
dbPingTimer->async_wait(std::bind(&KeepDatabaseAliveHandler, std::weak_ptr(dbPingTimer), dbPingInterval, std::placeholders::_1));
int32 banExpiryCheckInterval = sConfigMgr->GetOption("BanExpiryCheckInterval", 60);
std::shared_ptr banExpiryCheckTimer = std::make_shared(*ioContext);
- // Calculate the expiration time
- auto expirationTimeBanExpiry = std::chrono::steady_clock::now() + std::chrono::seconds(banExpiryCheckInterval);
- banExpiryCheckTimer->expires_at(expirationTimeBanExpiry);
+ banExpiryCheckTimer->expires_at(Acore::Asio::SteadyTimer::GetExpirationTime(banExpiryCheckInterval));
banExpiryCheckTimer->async_wait(std::bind(&BanExpiryHandler, std::weak_ptr(banExpiryCheckTimer), banExpiryCheckInterval, std::placeholders::_1));
// Start the io service worker loop
@@ -252,9 +249,7 @@ void KeepDatabaseAliveHandler(std::weak_ptr dbPingTim
LOG_INFO("server.authserver", "Ping MySQL to keep connection alive");
LoginDatabase.KeepAlive();
- // Calculate the expiration time
- auto expirationTime = std::chrono::steady_clock::now() + std::chrono::seconds(dbPingInterval);
- dbPingTimer->expires_at(expirationTime);
+ dbPingTimer->expires_at(Acore::Asio::SteadyTimer::GetExpirationTime(dbPingInterval));
dbPingTimer->async_wait(std::bind(&KeepDatabaseAliveHandler, dbPingTimerRef, dbPingInterval, std::placeholders::_1));
}
}
@@ -269,9 +264,7 @@ void BanExpiryHandler(std::weak_ptr banExpiryCheckTim
LoginDatabase.Execute(LoginDatabase.GetPreparedStatement(LOGIN_DEL_EXPIRED_IP_BANS));
LoginDatabase.Execute(LoginDatabase.GetPreparedStatement(LOGIN_UPD_EXPIRED_ACCOUNT_BANS));
- // Calculate the expiration time
- auto expirationTime = std::chrono::steady_clock::now() + std::chrono::seconds(banExpiryCheckInterval);
- banExpiryCheckTimer->expires_at(expirationTime);
+ banExpiryCheckTimer->expires_at(Acore::Asio::SteadyTimer::GetExpirationTime(banExpiryCheckInterval));
banExpiryCheckTimer->async_wait(std::bind(&BanExpiryHandler, banExpiryCheckTimerRef, banExpiryCheckInterval, std::placeholders::_1));
}
}
diff --git a/src/server/apps/worldserver/Main.cpp b/src/server/apps/worldserver/Main.cpp
index e95aadc7b..0f5a96208 100644
--- a/src/server/apps/worldserver/Main.cpp
+++ b/src/server/apps/worldserver/Main.cpp
@@ -47,6 +47,7 @@
#include "ScriptMgr.h"
#include "SecretMgr.h"
#include "SharedDefines.h"
+#include "SteadyTimer.h"
#include "World.h"
#include "WorldSocket.h"
#include "WorldSocketMgr.h"
@@ -90,9 +91,7 @@ public:
static void Start(std::shared_ptr const& freezeDetector)
{
- // Calculate the expiration time 5seconds from now
- auto expirationTime = std::chrono::steady_clock::now() + std::chrono::seconds(5);
- freezeDetector->_timer.expires_at(expirationTime);
+ freezeDetector->_timer.expires_at(Acore::Asio::SteadyTimer::GetExpirationTime(5));
freezeDetector->_timer.async_wait(std::bind(&FreezeDetector::Handler, std::weak_ptr(freezeDetector), std::placeholders::_1));
}
@@ -632,9 +631,7 @@ void FreezeDetector::Handler(std::weak_ptr freezeDetectorRef, bo
}
}
- // Calculate the expiration time
- auto expirationTime = std::chrono::steady_clock::now() + std::chrono::seconds(1);
- freezeDetector->_timer.expires_at(expirationTime);
+ freezeDetector->_timer.expires_at(Acore::Asio::SteadyTimer::GetExpirationTime(1));
freezeDetector->_timer.async_wait(std::bind(&FreezeDetector::Handler, freezeDetectorRef, std::placeholders::_1));
}
}
diff --git a/src/server/shared/Realms/RealmList.cpp b/src/server/shared/Realms/RealmList.cpp
index a1c258edd..b3b3f7656 100644
--- a/src/server/shared/Realms/RealmList.cpp
+++ b/src/server/shared/Realms/RealmList.cpp
@@ -18,8 +18,9 @@
#include "RealmList.h"
#include "DatabaseEnv.h"
#include "Log.h"
-#include "Resolver.h"
#include "QueryResult.h"
+#include "Resolver.h"
+#include "SteadyTimer.h"
#include "Util.h"
#include
#include
@@ -227,9 +228,7 @@ void RealmList::UpdateRealms(boost::system::error_code const& error)
if (_updateInterval)
{
- // Calculate the expiration time _updateInterval from now
- auto expiration_time = std::chrono::steady_clock::now() + std::chrono::seconds(_updateInterval);
- _updateTimer->expires_at(expiration_time);
+ _updateTimer->expires_at(Acore::Asio::SteadyTimer::GetExpirationTime(_updateInterval));
_updateTimer->async_wait([this](boost::system::error_code const& errorCode){ UpdateRealms(errorCode); });
}
}