[Code] SharedTaskManager Global to Singleton Cleanup (#4930)

Co-authored-by: Chris Miles <akkadius1@gmail.com>
This commit is contained in:
Alex King 2025-06-25 15:11:40 -04:00 committed by GitHub
parent 947795f1d1
commit c5ab35e4af
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
7 changed files with 42 additions and 42 deletions

View File

@ -11,7 +11,6 @@
extern uint32 numplayers; extern uint32 numplayers;
extern ClientList client_list; extern ClientList client_list;
extern volatile bool RunLoops; extern volatile bool RunLoops;
extern SharedTaskManager shared_task_manager;
ClientListEntry::ClientListEntry( ClientListEntry::ClientListEntry(
uint32 id, uint32 id,
@ -223,7 +222,7 @@ void ClientListEntry::LeavingZone(ZoneServer *iZS, CLE_Status iOnline)
} }
SetOnline(iOnline); SetOnline(iOnline);
shared_task_manager.RemoveActiveInvitationByCharacterID(CharID()); SharedTaskManager::Instance()->RemoveActiveInvitationByCharacterID(CharID());
if (m_zone_server) { if (m_zone_server) {
m_zone_server->RemovePlayer(); m_zone_server->RemovePlayer();

View File

@ -99,7 +99,6 @@ QueryServConnection QSLink;
LauncherList launcher_list; LauncherList launcher_list;
AdventureManager adventure_manager; AdventureManager adventure_manager;
WorldEventScheduler event_scheduler; WorldEventScheduler event_scheduler;
SharedTaskManager shared_task_manager;
volatile bool RunLoops = true; volatile bool RunLoops = true;
uint32 numclients = 0; uint32 numclients = 0;
uint32 numzones = 0; uint32 numzones = 0;
@ -470,7 +469,7 @@ int main(int argc, char **argv)
launcher_list.Process(); launcher_list.Process();
LFPGroupList.Process(); LFPGroupList.Process();
adventure_manager.Process(); adventure_manager.Process();
shared_task_manager.Process(); SharedTaskManager::Instance()->Process();
dynamic_zone_manager.Process(); dynamic_zone_manager.Process();
if (!RuleB(Logging, PlayerEventsQSProcess)) { if (!RuleB(Logging, PlayerEventsQSProcess)) {

View File

@ -102,6 +102,12 @@ public:
void SetSharedTasks(const std::vector<SharedTask> &shared_tasks); void SetSharedTasks(const std::vector<SharedTask> &shared_tasks);
SharedTaskManager * PurgeExpiredSharedTasks(); SharedTaskManager * PurgeExpiredSharedTasks();
static SharedTaskManager* Instance()
{
static SharedTaskManager instance;
return &instance;
}
protected: protected:
// reference to database // reference to database
Database *m_database; Database *m_database;

View File

@ -16,7 +16,6 @@
extern ClientList client_list; extern ClientList client_list;
extern ZSList zoneserver_list; extern ZSList zoneserver_list;
extern SharedTaskManager shared_task_manager;
void SharedTaskWorldMessaging::HandleZoneMessage(ServerPacket *pack) void SharedTaskWorldMessaging::HandleZoneMessage(ServerPacket *pack)
{ {
@ -30,7 +29,7 @@ void SharedTaskWorldMessaging::HandleZoneMessage(ServerPacket *pack)
r->requested_npc_entity_id r->requested_npc_entity_id
); );
shared_task_manager.AttemptSharedTaskCreation( SharedTaskManager::Instance()->AttemptSharedTaskCreation(
r->requested_task_id, r->requested_task_id,
r->requested_character_id, r->requested_character_id,
r->requested_npc_entity_id r->requested_npc_entity_id
@ -47,11 +46,11 @@ void SharedTaskWorldMessaging::HandleZoneMessage(ServerPacket *pack)
r->remove_from_db 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) { if (s) {
auto member = s->FindMemberFromCharacterID(r->requested_character_id); auto member = s->FindMemberFromCharacterID(r->requested_character_id);
if (member.character_id != 0) { 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; break;
@ -64,14 +63,14 @@ void SharedTaskWorldMessaging::HandleZoneMessage(ServerPacket *pack)
r->task_id 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) { if (t) {
auto leader = t->GetLeader(); auto leader = t->GetLeader();
if (leader.character_id != r->source_character_id) { if (leader.character_id != r->source_character_id) {
ClientList::Instance()->SendCharacterMessageID(r->source_character_id, Chat::Red, TaskStr::NOT_LEADER, {leader.character_name}); ClientList::Instance()->SendCharacterMessageID(r->source_character_id, Chat::Red, TaskStr::NOT_LEADER, {leader.character_name});
} }
else { 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") (r->ignore_quest_update ? "true" : "false")
); );
shared_task_manager.SharedTaskActivityUpdate( SharedTaskManager::Instance()->SharedTaskActivityUpdate(
r->source_character_id, r->source_character_id,
r->task_id, r->task_id,
r->activity_id, r->activity_id,
@ -108,7 +107,7 @@ void SharedTaskWorldMessaging::HandleZoneMessage(ServerPacket *pack)
r->task_id 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) { if (t) {
LogTasksDetail( LogTasksDetail(
"[ServerOP_SharedTaskRequestMemberlist] Found shared task character [{}] shared_task_id [{}]", "[ServerOP_SharedTaskRequestMemberlist] Found shared task character [{}] shared_task_id [{}]",
@ -116,7 +115,7 @@ void SharedTaskWorldMessaging::HandleZoneMessage(ServerPacket *pack)
t->GetDbSharedTask().id t->GetDbSharedTask().id
); );
shared_task_manager.SendSharedTaskMemberList( SharedTaskManager::Instance()->SendSharedTaskMemberList(
r->source_character_id, r->source_character_id,
t->GetMembers() t->GetMembers()
); );
@ -134,7 +133,7 @@ void SharedTaskWorldMessaging::HandleZoneMessage(ServerPacket *pack)
r->player_name 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) { if (t) {
LogTasksDetail( LogTasksDetail(
"[ServerOP_SharedTaskRemovePlayer] Found shared task character [{}] shared_task_id [{}]", "[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); auto member = t->FindMemberFromCharacterName(r->player_name);
if (member.character_id == 0) { 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 { else {
shared_task_manager.RemoveMember(t, member, true); SharedTaskManager::Instance()->RemoveMember(t, member, true);
shared_task_manager.SendLeaderMessageID(t, Chat::Yellow, TaskStr::PLAYER_REMOVED, {member.character_name, t->GetTaskData().title}); 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 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) { if (t) {
LogTasksDetail( LogTasksDetail(
"[ServerOP_SharedTaskMakeLeader] Found shared task character [{}] shared_task_id [{}]", "[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; 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 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) { if (t) {
LogTasksDetail( LogTasksDetail(
"[ServerOP_SharedTaskAddPlayer] Found shared task character [{}] shared_task_id [{}]", "[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; 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 r->accepted
); );
auto t = shared_task_manager.FindSharedTaskById(r->shared_task_id); auto t = SharedTaskManager::Instance()->FindSharedTaskById(r->shared_task_id);
if (t && shared_task_manager.IsInvitationActive(r->shared_task_id, r->source_character_id)) { if (t && SharedTaskManager::Instance()->IsInvitationActive(r->shared_task_id, r->source_character_id)) {
LogTasksDetail( LogTasksDetail(
"[ServerOP_SharedTaskInviteAcceptedPlayer] Found shared task character [{}] shared_task_id [{}]", "[ServerOP_SharedTaskInviteAcceptedPlayer] Found shared task character [{}] shared_task_id [{}]",
r->source_character_id, r->source_character_id,
t->GetDbSharedTask().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) { 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 { 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; break;
@ -280,19 +279,19 @@ void SharedTaskWorldMessaging::HandleZoneMessage(ServerPacket *pack)
buf->task_id 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) { if (t) {
DynamicZone dz; DynamicZone dz;
dz.Unserialize({ buf->cereal_data, buf->cereal_size }); dz.Unserialize({ buf->cereal_data, buf->cereal_size });
shared_task_manager.CreateDynamicZone(t, dz); SharedTaskManager::Instance()->CreateDynamicZone(t, dz);
} }
break; break;
} }
case ServerOP_SharedTaskPurgeAllCommand: { case ServerOP_SharedTaskPurgeAllCommand: {
LogTasksDetail("[ServerOP_SharedTaskPurgeAllCommand] Received request to purge all shared tasks"); LogTasksDetail("[ServerOP_SharedTaskPurgeAllCommand] Received request to purge all shared tasks");
shared_task_manager.PurgeAllSharedTasks(); SharedTaskManager::Instance()->PurgeAllSharedTasks();
auto p = std::make_unique<ServerPacket>( auto p = std::make_unique<ServerPacket>(
ServerOP_SharedTaskPurgeAllCommand, ServerOP_SharedTaskPurgeAllCommand,
0 0
@ -311,7 +310,7 @@ void SharedTaskWorldMessaging::HandleZoneMessage(ServerPacket *pack)
buf->task_id 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) { if (s) {
std::vector<std::string> player_names; std::vector<std::string> player_names;
@ -331,28 +330,28 @@ void SharedTaskWorldMessaging::HandleZoneMessage(ServerPacket *pack)
} }
case ServerOP_SharedTaskLock: { case ServerOP_SharedTaskLock: {
auto buf = reinterpret_cast<ServerSharedTaskLock_Struct*>(pack->pBuffer); auto buf = reinterpret_cast<ServerSharedTaskLock_Struct*>(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) if (shared_task)
{ {
shared_task_manager.LockTask(shared_task, buf->lock); SharedTaskManager::Instance()->LockTask(shared_task, buf->lock);
} }
break; break;
} }
case ServerOP_SharedTaskEndByDz: { case ServerOP_SharedTaskEndByDz: {
auto buf = reinterpret_cast<ServerSharedTaskEnd_Struct*>(pack->pBuffer); auto buf = reinterpret_cast<ServerSharedTaskEnd_Struct*>(pack->pBuffer);
auto shared_task = shared_task_manager.FindSharedTaskByDzId(buf->dz_id); auto shared_task = SharedTaskManager::Instance()->FindSharedTaskByDzId(buf->dz_id);
if (shared_task) if (shared_task)
{ {
shared_task_manager.Terminate(*shared_task, buf->send_fail, true); SharedTaskManager::Instance()->Terminate(*shared_task, buf->send_fail, true);
} }
break; break;
} }
case ServerOP_SharedTaskEnd: { case ServerOP_SharedTaskEnd: {
auto buf = reinterpret_cast<ServerSharedTaskEnd_Struct*>(pack->pBuffer); auto buf = reinterpret_cast<ServerSharedTaskEnd_Struct*>(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) if (shared_task)
{ {
shared_task_manager.Terminate(*shared_task, buf->send_fail, true); SharedTaskManager::Instance()->Terminate(*shared_task, buf->send_fail, true);
} }
break; break;
} }

View File

@ -224,7 +224,6 @@ void WorldBoot::RegisterLoginservers()
} }
} }
extern SharedTaskManager shared_task_manager;
extern AdventureManager adventure_manager; extern AdventureManager adventure_manager;
extern WorldEventScheduler event_scheduler; extern WorldEventScheduler event_scheduler;
@ -400,13 +399,13 @@ bool WorldBoot::DatabaseLoadRoutines(int argc, char **argv)
->ReloadContentFlags(); ->ReloadContentFlags();
LogInfo("Initializing [SharedTaskManager]"); LogInfo("Initializing [SharedTaskManager]");
shared_task_manager.SetDatabase(&database) SharedTaskManager::Instance()->SetDatabase(&database)
->SetContentDatabase(&content_db) ->SetContentDatabase(&content_db)
->LoadTaskData() ->LoadTaskData()
->LoadSharedTaskState(); ->LoadSharedTaskState();
LogInfo("Purging expired shared tasks"); LogInfo("Purging expired shared tasks");
shared_task_manager.PurgeExpiredSharedTasks(); SharedTaskManager::Instance()->PurgeExpiredSharedTasks();
LogInfo("Cleaning up instance corpses"); LogInfo("Cleaning up instance corpses");
database.CleanupInstanceCorpses(); database.CleanupInstanceCorpses();

View File

@ -43,7 +43,6 @@ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
extern uint32 numzones; extern uint32 numzones;
extern WebInterfaceList web_interface; extern WebInterfaceList web_interface;
extern SharedTaskManager shared_task_manager;
extern ClientList client_list; extern ClientList client_list;
extern QueryServConnection QSLink; extern QueryServConnection QSLink;
volatile bool UCSServerAvailable_ = false; volatile bool UCSServerAvailable_ = false;
@ -988,7 +987,7 @@ void ZSList::SendServerReload(ServerReload::Type type, uchar *packet)
UCSLink.SendPacket(&pack); UCSLink.SendPacket(&pack);
QSLink.SendPacket(&pack); QSLink.SendPacket(&pack);
} else if (type == ServerReload::Type::Tasks) { } else if (type == ServerReload::Type::Tasks) {
shared_task_manager.LoadTaskData(); SharedTaskManager::Instance()->LoadTaskData();
} else if (type == ServerReload::Type::DzTemplates) { } else if (type == ServerReload::Type::DzTemplates) {
dynamic_zone_manager.LoadTemplates(); dynamic_zone_manager.LoadTemplates();
} }

View File

@ -60,7 +60,6 @@ extern volatile bool UCSServerAvailable_;
extern AdventureManager adventure_manager; extern AdventureManager adventure_manager;
extern UCSConnection UCSLink; extern UCSConnection UCSLink;
extern QueryServConnection QSLink; extern QueryServConnection QSLink;
extern SharedTaskManager shared_task_manager;
void CatchSignal(int sig_num); void CatchSignal(int sig_num);