More shared tasks stuff

Mostly just OOZ checking
This commit is contained in:
Michael Cook (mackal)
2018-09-05 16:04:49 -04:00
parent 8934235030
commit 93133c289e
8 changed files with 147 additions and 3 deletions
+49
View File
@@ -83,3 +83,52 @@ void SharedTaskManager::HandleTaskRequest(ServerPacket *pack)
}
}
void SharedTaskManager::HandleTaskRequestReply(ServerPacket *pack)
{
if (!pack)
return;
int id = pack->ReadUInt32();
char name[64] = { 0 };
pack->ReadString(name);
int status = pack->ReadUInt32();
auto it = tasks.find(id);
if (it == tasks.end()) {
// task already errored and no longer existed, we can ignore
return;
}
auto &task = it->second;
if (status != TASKJOINOOZ_CAN) {
// TODO: forward to leader
return;
}
if (!task.DecrementMissingCount())
tasks.erase(it);
}
bool SharedTask::DecrementMissingCount()
{
--missing_count;
if (missing_count == 0) {
auto pc = client_list.FindCharacter(leader_name.c_str());
if (pc) {
SerializeBuffer buf(10);
buf.WriteInt32(id); // task's ID
buf.WriteString(leader_name); // leader's name
auto pack = new ServerPacket(ServerOP_TaskGrant, buf);
zoneserver_list.SendPacket(pc->zone(), pc->instance(), pack);
safe_delete(pack);
} else {
return false; // error, please clean us up
}
}
return true;
}
+5 -1
View File
@@ -19,13 +19,16 @@ public:
SharedTask(int id, int task_id) : id(id), task_id(task_id), missing_count(0) {}
~SharedTask() {}
void AddMember(std::string name, bool leader = false) { members.push_back({name, leader}); }
void AddMember(std::string name, bool leader = false) { members.push_back({name, leader}); if (leader) leader_name = name; }
inline void SetMissingCount(int in) { missing_count = in; }
bool DecrementMissingCount(); // if we failed, tell who called us to clean us up basically
const std::string &GetLeaderName() const { return leader_name; }
private:
int id; // id we have in our map
int task_id; // ID of the task we're on
int missing_count; // other toons waiting to verify (out of zone, etc)
std::string leader_name;
std::vector<SharedTaskMember> members;
};
@@ -36,6 +39,7 @@ public:
// IPC packet processing
void HandleTaskRequest(ServerPacket *pack);
void HandleTaskRequestReply(ServerPacket *pack);
private:
inline int GetNextID() { return ++next_id; }
+5
View File
@@ -1352,6 +1352,11 @@ void ZoneServer::HandleMessage(uint16 opcode, const EQ::Net::Packet &p) {
shared_tasks.HandleTaskRequest(pack);
break;
}
case ServerOP_TaskRequestReply:
{
shared_tasks.HandleTaskRequestReply(pack);
break;
}
default:
{
Log(Logs::Detail, Logs::World_Server, "Unknown ServerOPcode from zone 0x%04x, size %d", pack->opcode, pack->size);