From c5ab35e4af12167603ab65d2f8602b92f96b7f56 Mon Sep 17 00:00:00 2001 From: Alex King <89047260+Kinglykrab@users.noreply.github.com> Date: Wed, 25 Jun 2025 15:11:40 -0400 Subject: [PATCH] [Code] SharedTaskManager Global to Singleton Cleanup (#4930) Co-authored-by: Chris Miles --- world/cliententry.cpp | 3 +- world/main.cpp | 3 +- world/shared_task_manager.h | 6 +++ world/shared_task_world_messaging.cpp | 63 +++++++++++++-------------- world/world_boot.cpp | 5 +-- world/zonelist.cpp | 3 +- world/zoneserver.cpp | 1 - 7 files changed, 42 insertions(+), 42 deletions(-) diff --git a/world/cliententry.cpp b/world/cliententry.cpp index 3de11c4df..ff30a2ec0 100644 --- a/world/cliententry.cpp +++ b/world/cliententry.cpp @@ -11,7 +11,6 @@ extern uint32 numplayers; extern ClientList client_list; extern volatile bool RunLoops; -extern SharedTaskManager shared_task_manager; ClientListEntry::ClientListEntry( uint32 id, @@ -223,7 +222,7 @@ void ClientListEntry::LeavingZone(ZoneServer *iZS, CLE_Status iOnline) } SetOnline(iOnline); - shared_task_manager.RemoveActiveInvitationByCharacterID(CharID()); + SharedTaskManager::Instance()->RemoveActiveInvitationByCharacterID(CharID()); if (m_zone_server) { m_zone_server->RemovePlayer(); diff --git a/world/main.cpp b/world/main.cpp index 07ab79a94..b79021416 100644 --- a/world/main.cpp +++ b/world/main.cpp @@ -99,7 +99,6 @@ QueryServConnection QSLink; LauncherList launcher_list; AdventureManager adventure_manager; WorldEventScheduler event_scheduler; -SharedTaskManager shared_task_manager; volatile bool RunLoops = true; uint32 numclients = 0; uint32 numzones = 0; @@ -470,7 +469,7 @@ int main(int argc, char **argv) launcher_list.Process(); LFPGroupList.Process(); adventure_manager.Process(); - shared_task_manager.Process(); + SharedTaskManager::Instance()->Process(); dynamic_zone_manager.Process(); if (!RuleB(Logging, PlayerEventsQSProcess)) { diff --git a/world/shared_task_manager.h b/world/shared_task_manager.h index 3f41ef7be..197a8bce2 100644 --- a/world/shared_task_manager.h +++ b/world/shared_task_manager.h @@ -102,6 +102,12 @@ public: void SetSharedTasks(const std::vector &shared_tasks); SharedTaskManager * PurgeExpiredSharedTasks(); + + static SharedTaskManager* Instance() + { + static SharedTaskManager instance; + return &instance; + } protected: // reference to database Database *m_database; diff --git a/world/shared_task_world_messaging.cpp b/world/shared_task_world_messaging.cpp index 102925f00..c848af89d 100644 --- a/world/shared_task_world_messaging.cpp +++ b/world/shared_task_world_messaging.cpp @@ -16,7 +16,6 @@ extern ClientList client_list; extern ZSList zoneserver_list; -extern SharedTaskManager shared_task_manager; void SharedTaskWorldMessaging::HandleZoneMessage(ServerPacket *pack) { @@ -30,7 +29,7 @@ void SharedTaskWorldMessaging::HandleZoneMessage(ServerPacket *pack) r->requested_npc_entity_id ); - shared_task_manager.AttemptSharedTaskCreation( + SharedTaskManager::Instance()->AttemptSharedTaskCreation( r->requested_task_id, r->requested_character_id, r->requested_npc_entity_id @@ -47,11 +46,11 @@ void SharedTaskWorldMessaging::HandleZoneMessage(ServerPacket *pack) r->remove_from_db ); - auto s = shared_task_manager.FindSharedTaskByTaskIdAndCharacterId(r->task_id, r->requested_character_id); + auto s = SharedTaskManager::Instance()->FindSharedTaskByTaskIdAndCharacterId(r->task_id, r->requested_character_id); if (s) { auto member = s->FindMemberFromCharacterID(r->requested_character_id); if (member.character_id != 0) { - shared_task_manager.RemoveMember(s, member, r->remove_from_db); + SharedTaskManager::Instance()->RemoveMember(s, member, r->remove_from_db); } } break; @@ -64,14 +63,14 @@ void SharedTaskWorldMessaging::HandleZoneMessage(ServerPacket *pack) r->task_id ); - auto t = shared_task_manager.FindSharedTaskByTaskIdAndCharacterId(r->task_id, r->source_character_id); + auto t = SharedTaskManager::Instance()->FindSharedTaskByTaskIdAndCharacterId(r->task_id, r->source_character_id); if (t) { auto leader = t->GetLeader(); if (leader.character_id != r->source_character_id) { ClientList::Instance()->SendCharacterMessageID(r->source_character_id, Chat::Red, TaskStr::NOT_LEADER, {leader.character_name}); } else { - shared_task_manager.RemoveEveryoneFromSharedTask(t, r->source_character_id); + SharedTaskManager::Instance()->RemoveEveryoneFromSharedTask(t, r->source_character_id); } } @@ -89,7 +88,7 @@ void SharedTaskWorldMessaging::HandleZoneMessage(ServerPacket *pack) (r->ignore_quest_update ? "true" : "false") ); - shared_task_manager.SharedTaskActivityUpdate( + SharedTaskManager::Instance()->SharedTaskActivityUpdate( r->source_character_id, r->task_id, r->activity_id, @@ -108,7 +107,7 @@ void SharedTaskWorldMessaging::HandleZoneMessage(ServerPacket *pack) r->task_id ); - auto t = shared_task_manager.FindSharedTaskByTaskIdAndCharacterId(r->task_id, r->source_character_id); + auto t = SharedTaskManager::Instance()->FindSharedTaskByTaskIdAndCharacterId(r->task_id, r->source_character_id); if (t) { LogTasksDetail( "[ServerOP_SharedTaskRequestMemberlist] Found shared task character [{}] shared_task_id [{}]", @@ -116,7 +115,7 @@ void SharedTaskWorldMessaging::HandleZoneMessage(ServerPacket *pack) t->GetDbSharedTask().id ); - shared_task_manager.SendSharedTaskMemberList( + SharedTaskManager::Instance()->SendSharedTaskMemberList( r->source_character_id, t->GetMembers() ); @@ -134,7 +133,7 @@ void SharedTaskWorldMessaging::HandleZoneMessage(ServerPacket *pack) r->player_name ); - auto t = shared_task_manager.FindSharedTaskByTaskIdAndCharacterId(r->task_id, r->source_character_id); + auto t = SharedTaskManager::Instance()->FindSharedTaskByTaskIdAndCharacterId(r->task_id, r->source_character_id); if (t) { LogTasksDetail( "[ServerOP_SharedTaskRemovePlayer] Found shared task character [{}] shared_task_id [{}]", @@ -155,11 +154,11 @@ void SharedTaskWorldMessaging::HandleZoneMessage(ServerPacket *pack) auto member = t->FindMemberFromCharacterName(r->player_name); if (member.character_id == 0) { - shared_task_manager.SendLeaderMessageID(t, Chat::Red, TaskStr::IS_NOT_MEMBER, {r->player_name}); + SharedTaskManager::Instance()->SendLeaderMessageID(t, Chat::Red, TaskStr::IS_NOT_MEMBER, {r->player_name}); } else { - shared_task_manager.RemoveMember(t, member, true); - shared_task_manager.SendLeaderMessageID(t, Chat::Yellow, TaskStr::PLAYER_REMOVED, {member.character_name, t->GetTaskData().title}); + SharedTaskManager::Instance()->RemoveMember(t, member, true); + SharedTaskManager::Instance()->SendLeaderMessageID(t, Chat::Yellow, TaskStr::PLAYER_REMOVED, {member.character_name, t->GetTaskData().title}); } } } @@ -176,7 +175,7 @@ void SharedTaskWorldMessaging::HandleZoneMessage(ServerPacket *pack) r->player_name ); - auto t = shared_task_manager.FindSharedTaskByTaskIdAndCharacterId(r->task_id, r->source_character_id); + auto t = SharedTaskManager::Instance()->FindSharedTaskByTaskIdAndCharacterId(r->task_id, r->source_character_id); if (t) { LogTasksDetail( "[ServerOP_SharedTaskMakeLeader] Found shared task character [{}] shared_task_id [{}]", @@ -199,7 +198,7 @@ void SharedTaskWorldMessaging::HandleZoneMessage(ServerPacket *pack) ); std::string character_name = r->player_name; - shared_task_manager.MakeLeaderByPlayerName(t, character_name); + SharedTaskManager::Instance()->MakeLeaderByPlayerName(t, character_name); } } @@ -215,7 +214,7 @@ void SharedTaskWorldMessaging::HandleZoneMessage(ServerPacket *pack) r->player_name ); - auto t = shared_task_manager.FindSharedTaskByTaskIdAndCharacterId(r->task_id, r->source_character_id); + auto t = SharedTaskManager::Instance()->FindSharedTaskByTaskIdAndCharacterId(r->task_id, r->source_character_id); if (t) { LogTasksDetail( "[ServerOP_SharedTaskAddPlayer] Found shared task character [{}] shared_task_id [{}]", @@ -236,7 +235,7 @@ void SharedTaskWorldMessaging::HandleZoneMessage(ServerPacket *pack) ); std::string character_name = r->player_name; - shared_task_manager.InvitePlayerByPlayerName(t, character_name); + SharedTaskManager::Instance()->InvitePlayerByPlayerName(t, character_name); } } @@ -252,21 +251,21 @@ void SharedTaskWorldMessaging::HandleZoneMessage(ServerPacket *pack) r->accepted ); - auto t = shared_task_manager.FindSharedTaskById(r->shared_task_id); - if (t && shared_task_manager.IsInvitationActive(r->shared_task_id, r->source_character_id)) { + auto t = SharedTaskManager::Instance()->FindSharedTaskById(r->shared_task_id); + if (t && SharedTaskManager::Instance()->IsInvitationActive(r->shared_task_id, r->source_character_id)) { LogTasksDetail( "[ServerOP_SharedTaskInviteAcceptedPlayer] Found shared task character [{}] shared_task_id [{}]", r->source_character_id, t->GetDbSharedTask().id ); - shared_task_manager.RemoveActiveInvitation(r->shared_task_id, r->source_character_id); + SharedTaskManager::Instance()->RemoveActiveInvitation(r->shared_task_id, r->source_character_id); if (r->accepted) { - shared_task_manager.AddPlayerByCharacterIdAndName(t, r->source_character_id, r->player_name); + SharedTaskManager::Instance()->AddPlayerByCharacterIdAndName(t, r->source_character_id, r->player_name); } else { - shared_task_manager.SendLeaderMessageID(t, Chat::Red, TaskStr::PLAYER_DECLINED_OFFER, {r->player_name}); + SharedTaskManager::Instance()->SendLeaderMessageID(t, Chat::Red, TaskStr::PLAYER_DECLINED_OFFER, {r->player_name}); } } break; @@ -280,19 +279,19 @@ void SharedTaskWorldMessaging::HandleZoneMessage(ServerPacket *pack) buf->task_id ); - auto t = shared_task_manager.FindSharedTaskByTaskIdAndCharacterId(buf->task_id, buf->source_character_id); + auto t = SharedTaskManager::Instance()->FindSharedTaskByTaskIdAndCharacterId(buf->task_id, buf->source_character_id); if (t) { DynamicZone dz; dz.Unserialize({ buf->cereal_data, buf->cereal_size }); - shared_task_manager.CreateDynamicZone(t, dz); + SharedTaskManager::Instance()->CreateDynamicZone(t, dz); } break; } case ServerOP_SharedTaskPurgeAllCommand: { LogTasksDetail("[ServerOP_SharedTaskPurgeAllCommand] Received request to purge all shared tasks"); - shared_task_manager.PurgeAllSharedTasks(); + SharedTaskManager::Instance()->PurgeAllSharedTasks(); auto p = std::make_unique( ServerOP_SharedTaskPurgeAllCommand, 0 @@ -311,7 +310,7 @@ void SharedTaskWorldMessaging::HandleZoneMessage(ServerPacket *pack) buf->task_id ); - auto s = shared_task_manager.FindSharedTaskByTaskIdAndCharacterId(buf->task_id, buf->source_character_id); + auto s = SharedTaskManager::Instance()->FindSharedTaskByTaskIdAndCharacterId(buf->task_id, buf->source_character_id); if (s) { std::vector player_names; @@ -331,28 +330,28 @@ void SharedTaskWorldMessaging::HandleZoneMessage(ServerPacket *pack) } case ServerOP_SharedTaskLock: { auto buf = reinterpret_cast(pack->pBuffer); - auto shared_task = shared_task_manager.FindSharedTaskByTaskIdAndCharacterId(buf->task_id, buf->source_character_id); + auto shared_task = SharedTaskManager::Instance()->FindSharedTaskByTaskIdAndCharacterId(buf->task_id, buf->source_character_id); if (shared_task) { - shared_task_manager.LockTask(shared_task, buf->lock); + SharedTaskManager::Instance()->LockTask(shared_task, buf->lock); } break; } case ServerOP_SharedTaskEndByDz: { auto buf = reinterpret_cast(pack->pBuffer); - auto shared_task = shared_task_manager.FindSharedTaskByDzId(buf->dz_id); + auto shared_task = SharedTaskManager::Instance()->FindSharedTaskByDzId(buf->dz_id); if (shared_task) { - shared_task_manager.Terminate(*shared_task, buf->send_fail, true); + SharedTaskManager::Instance()->Terminate(*shared_task, buf->send_fail, true); } break; } case ServerOP_SharedTaskEnd: { auto buf = reinterpret_cast(pack->pBuffer); - auto shared_task = shared_task_manager.FindSharedTaskByTaskIdAndCharacterId(buf->task_id, buf->character_id); + auto shared_task = SharedTaskManager::Instance()->FindSharedTaskByTaskIdAndCharacterId(buf->task_id, buf->character_id); if (shared_task) { - shared_task_manager.Terminate(*shared_task, buf->send_fail, true); + SharedTaskManager::Instance()->Terminate(*shared_task, buf->send_fail, true); } break; } diff --git a/world/world_boot.cpp b/world/world_boot.cpp index f81568063..cbe2513cb 100644 --- a/world/world_boot.cpp +++ b/world/world_boot.cpp @@ -224,7 +224,6 @@ void WorldBoot::RegisterLoginservers() } } -extern SharedTaskManager shared_task_manager; extern AdventureManager adventure_manager; extern WorldEventScheduler event_scheduler; @@ -400,13 +399,13 @@ bool WorldBoot::DatabaseLoadRoutines(int argc, char **argv) ->ReloadContentFlags(); LogInfo("Initializing [SharedTaskManager]"); - shared_task_manager.SetDatabase(&database) + SharedTaskManager::Instance()->SetDatabase(&database) ->SetContentDatabase(&content_db) ->LoadTaskData() ->LoadSharedTaskState(); LogInfo("Purging expired shared tasks"); - shared_task_manager.PurgeExpiredSharedTasks(); + SharedTaskManager::Instance()->PurgeExpiredSharedTasks(); LogInfo("Cleaning up instance corpses"); database.CleanupInstanceCorpses(); diff --git a/world/zonelist.cpp b/world/zonelist.cpp index 2b22a1c52..0f1b6b445 100644 --- a/world/zonelist.cpp +++ b/world/zonelist.cpp @@ -43,7 +43,6 @@ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA extern uint32 numzones; extern WebInterfaceList web_interface; -extern SharedTaskManager shared_task_manager; extern ClientList client_list; extern QueryServConnection QSLink; volatile bool UCSServerAvailable_ = false; @@ -988,7 +987,7 @@ void ZSList::SendServerReload(ServerReload::Type type, uchar *packet) UCSLink.SendPacket(&pack); QSLink.SendPacket(&pack); } else if (type == ServerReload::Type::Tasks) { - shared_task_manager.LoadTaskData(); + SharedTaskManager::Instance()->LoadTaskData(); } else if (type == ServerReload::Type::DzTemplates) { dynamic_zone_manager.LoadTemplates(); } diff --git a/world/zoneserver.cpp b/world/zoneserver.cpp index c1dc460a7..7f2afb232 100644 --- a/world/zoneserver.cpp +++ b/world/zoneserver.cpp @@ -60,7 +60,6 @@ extern volatile bool UCSServerAvailable_; extern AdventureManager adventure_manager; extern UCSConnection UCSLink; extern QueryServConnection QSLink; -extern SharedTaskManager shared_task_manager; void CatchSignal(int sig_num);