mirror of
https://github.com/Kelsidavis/WoWee.git
synced 2026-03-26 00:40:15 +00:00
refactor: add registerWorldHandler() for state-guarded dispatch entries
Add registerWorldHandler() that wraps handler calls with an IN_WORLD state check. Replaces 8 state-guarded lambda dispatch entries with concise one-line registrations.
This commit is contained in:
parent
6694a0aa66
commit
b2e2ad12c6
2 changed files with 14 additions and 8 deletions
|
|
@ -2332,6 +2332,7 @@ private:
|
|||
void registerSkipHandler(LogicalOpcode op);
|
||||
void registerErrorHandler(LogicalOpcode op, const char* msg);
|
||||
void registerHandler(LogicalOpcode op, void (GameHandler::*handler)(network::Packet&));
|
||||
void registerWorldHandler(LogicalOpcode op, void (GameHandler::*handler)(network::Packet&));
|
||||
void enqueueIncomingPacket(const network::Packet& packet);
|
||||
void enqueueIncomingPacketFront(network::Packet&& packet);
|
||||
void processQueuedIncomingPackets();
|
||||
|
|
|
|||
|
|
@ -639,6 +639,11 @@ void GameHandler::registerErrorHandler(LogicalOpcode op, const char* msg) {
|
|||
void GameHandler::registerHandler(LogicalOpcode op, void (GameHandler::*handler)(network::Packet&)) {
|
||||
dispatchTable_[op] = [this, handler](network::Packet& packet) { (this->*handler)(packet); };
|
||||
}
|
||||
void GameHandler::registerWorldHandler(LogicalOpcode op, void (GameHandler::*handler)(network::Packet&)) {
|
||||
dispatchTable_[op] = [this, handler](network::Packet& packet) {
|
||||
if (state == WorldState::IN_WORLD) (this->*handler)(packet);
|
||||
};
|
||||
}
|
||||
|
||||
GameHandler::GameHandler() {
|
||||
LOG_DEBUG("GameHandler created");
|
||||
|
|
@ -1577,9 +1582,9 @@ void GameHandler::registerOpcodeHandlers() {
|
|||
// -----------------------------------------------------------------------
|
||||
// Chat
|
||||
// -----------------------------------------------------------------------
|
||||
dispatchTable_[Opcode::SMSG_MESSAGECHAT] = [this](network::Packet& packet) { if (state == WorldState::IN_WORLD) handleMessageChat(packet); };
|
||||
dispatchTable_[Opcode::SMSG_GM_MESSAGECHAT] = [this](network::Packet& packet) { if (state == WorldState::IN_WORLD) handleMessageChat(packet); };
|
||||
dispatchTable_[Opcode::SMSG_TEXT_EMOTE] = [this](network::Packet& packet) { if (state == WorldState::IN_WORLD) handleTextEmote(packet); };
|
||||
registerWorldHandler(Opcode::SMSG_MESSAGECHAT, &GameHandler::handleMessageChat);
|
||||
registerWorldHandler(Opcode::SMSG_GM_MESSAGECHAT, &GameHandler::handleMessageChat);
|
||||
registerWorldHandler(Opcode::SMSG_TEXT_EMOTE, &GameHandler::handleTextEmote);
|
||||
dispatchTable_[Opcode::SMSG_EMOTE] = [this](network::Packet& packet) {
|
||||
if (state != WorldState::IN_WORLD) return;
|
||||
if (packet.getRemainingSize() < 12) return;
|
||||
|
|
@ -1606,9 +1611,9 @@ void GameHandler::registerOpcodeHandlers() {
|
|||
// -----------------------------------------------------------------------
|
||||
// Player info queries / social
|
||||
// -----------------------------------------------------------------------
|
||||
dispatchTable_[Opcode::SMSG_QUERY_TIME_RESPONSE] = [this](network::Packet& packet) { if (state == WorldState::IN_WORLD) handleQueryTimeResponse(packet); };
|
||||
dispatchTable_[Opcode::SMSG_PLAYED_TIME] = [this](network::Packet& packet) { if (state == WorldState::IN_WORLD) handlePlayedTime(packet); };
|
||||
dispatchTable_[Opcode::SMSG_WHO] = [this](network::Packet& packet) { if (state == WorldState::IN_WORLD) handleWho(packet); };
|
||||
registerWorldHandler(Opcode::SMSG_QUERY_TIME_RESPONSE, &GameHandler::handleQueryTimeResponse);
|
||||
registerWorldHandler(Opcode::SMSG_PLAYED_TIME, &GameHandler::handlePlayedTime);
|
||||
registerWorldHandler(Opcode::SMSG_WHO, &GameHandler::handleWho);
|
||||
dispatchTable_[Opcode::SMSG_WHOIS] = [this](network::Packet& packet) {
|
||||
if (packet.hasData()) {
|
||||
std::string whoisText = packet.readString();
|
||||
|
|
@ -1623,7 +1628,7 @@ void GameHandler::registerOpcodeHandlers() {
|
|||
}
|
||||
}
|
||||
};
|
||||
dispatchTable_[Opcode::SMSG_FRIEND_STATUS] = [this](network::Packet& packet) { if (state == WorldState::IN_WORLD) handleFriendStatus(packet); };
|
||||
registerWorldHandler(Opcode::SMSG_FRIEND_STATUS, &GameHandler::handleFriendStatus);
|
||||
registerHandler(Opcode::SMSG_CONTACT_LIST, &GameHandler::handleContactList);
|
||||
registerHandler(Opcode::SMSG_FRIEND_LIST, &GameHandler::handleFriendList);
|
||||
dispatchTable_[Opcode::SMSG_IGNORE_LIST] = [this](network::Packet& packet) {
|
||||
|
|
@ -1637,7 +1642,7 @@ void GameHandler::registerOpcodeHandlers() {
|
|||
}
|
||||
LOG_DEBUG("SMSG_IGNORE_LIST: loaded ", static_cast<int>(ignCount), " ignored players");
|
||||
};
|
||||
dispatchTable_[Opcode::MSG_RANDOM_ROLL] = [this](network::Packet& packet) { if (state == WorldState::IN_WORLD) handleRandomRoll(packet); };
|
||||
registerWorldHandler(Opcode::MSG_RANDOM_ROLL, &GameHandler::handleRandomRoll);
|
||||
|
||||
// -----------------------------------------------------------------------
|
||||
// Item push / logout / entity queries
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue