Stub out some more functions

This commit is contained in:
Michael Cook (mackal)
2019-05-30 01:37:23 -04:00
parent c5bf71f221
commit c093b3e2ab
5 changed files with 110 additions and 8 deletions
+66
View File
@@ -6,6 +6,7 @@
#include "zonelist.h"
#include <algorithm>
#include <unordered_set>
extern ClientList client_list;
extern ZSList zoneserver_list;
@@ -163,9 +164,70 @@ void SharedTaskManager::HandleTaskRequest(ServerPacket *pack)
zoneserver_list.SendPacket(cle_leader->zone(), cle_leader->instance(), reply);
safe_delete(reply);
task.Save();
return;
}
/*
* Just sends the ID of the task that was successfully created zone side
* We now need to tell all the other clients to join the task
* We could probably try to find all the clients already in the zone and not
* worry about them here, but it's simpler this way
*/
void SharedTaskManager::HandleTaskZoneCreated(ServerPacket *pack)
{
if (!pack)
return;
int id = pack->ReadUInt32();
auto task = GetSharedTask(id);
if (!task) // hmm guess we should tell zone something is broken TODO
return;
auto leader = task->GetLeader();
if (!leader) // hmmm
return;
// if a zone server isn't in here, we need to send a serialized task state to them -- might not do this way :P
std::unordered_set<ZoneServer *> zones;
zones.insert(leader->cle->Server());
// we reuse this, easier this way
auto outpack = new ServerPacket(ServerOP_TaskZoneCreated, sizeof(ServerSharedTaskMember_Struct));
auto stm = (ServerSharedTaskMember_Struct *)outpack->pBuffer;
stm->id = id;
ServerPacket *taskpack = nullptr; // if we have, we will create this
for (auto &&m : task->members) {
if (m.leader) // leader done!
continue;
if (!m.cle) // hmmm
continue;
if (!m.cle->Server()) // hmm
continue;
auto ret = zones.insert(m.cle->Server());
if (ret.second) { // new zone! send serialized task
if (!taskpack) { // we need to create the serialized packet
}
zoneserver_list.SendPacket(m.cle->zone(), m.cle->instance(), taskpack);
}
strn0cpy(stm->name, m.name.c_str(), 64);
zoneserver_list.SendPacket(m.cle->zone(), m.cle->instance(), outpack);
}
safe_delete(outpack);
safe_delete(taskpack);
}
/*
* Loads in the tasks and task_activity tables
* We limit to shared to save some memory
@@ -462,3 +524,7 @@ void SharedTask::SetCLESharedTasks()
}
}
void SharedTask::Save() const
{
}
+19 -1
View File
@@ -31,11 +31,20 @@ public:
leader_name = name;
}
void MemberLeftGame(ClientListEntry *cle);
const std::string &GetLeaderName() const { return leader_name; }
inline const std::string &GetLeaderName() const { return leader_name; }
inline SharedTaskMember *GetLeader() {
auto it = std::find_if(members.begin(), members.end(), [](const SharedTaskMember &m) { return m.leader; });
if (it != members.end())
return &(*it);
else
return nullptr;
}
void SerializeMembers(SerializeBuffer &buf, bool include_leader = true) const;
void SetCLESharedTasks();
void Save() const; // save to database
private:
inline void SetID(int in) { id = in; }
inline void SetTaskID(int in) { task_id = in; }
@@ -62,8 +71,17 @@ public:
bool AppropriateLevel(int id, int level) const;
inline SharedTask *GetSharedTask(int id) {
auto it = tasks.find(id);
if (it != tasks.end())
return &it->second;
else
return nullptr;
}
// IPC packet processing
void HandleTaskRequest(ServerPacket *pack);
void HandleTaskZoneCreated(ServerPacket *pack);
void Process();
+5
View File
@@ -1356,6 +1356,11 @@ void ZoneServer::HandleMessage(uint16 opcode, const EQ::Net::Packet &p) {
shared_tasks.HandleTaskRequest(pack);
break;
}
case ServerOP_TaskZoneCreated:
{
shared_tasks.HandleTaskZoneCreated(pack);
break;
}
default:
{
Log(Logs::Detail, Logs::World_Server, "Unknown ServerOPcode from zone 0x%04x, size %d", pack->opcode, pack->size);