From 7e0a84fc2b7493670dc8167aafb83c3811272eb3 Mon Sep 17 00:00:00 2001 From: Andrei Karas Date: Fri, 28 Aug 2015 00:47:23 +0300 Subject: Move receive code from partyhandler into separate file. --- src/net/ea/partyhandler.cpp | 186 ++--------------------------------- src/net/ea/partyhandler.h | 22 +---- src/net/ea/partyrecv.cpp | 229 ++++++++++++++++++++++++++++++++++++++++++++ src/net/ea/partyrecv.h | 53 ++++++++++ 4 files changed, 294 insertions(+), 196 deletions(-) create mode 100644 src/net/ea/partyrecv.cpp create mode 100644 src/net/ea/partyrecv.h (limited to 'src/net/ea') diff --git a/src/net/ea/partyhandler.cpp b/src/net/ea/partyhandler.cpp index 83d5f04b4..0797e6e55 100644 --- a/src/net/ea/partyhandler.cpp +++ b/src/net/ea/partyhandler.cpp @@ -35,6 +35,8 @@ #include "net/messagein.h" +#include "net/ea/partyrecv.h" + #include "gui/widgets/tabs/chat/partytab.h" #include "utils/delete2.h" @@ -44,15 +46,11 @@ namespace Ea { -Party *taParty = nullptr; -PartyShareT PartyHandler::mShareExp = PartyShare::UNKNOWN; -PartyShareT PartyHandler::mShareItems = PartyShare::UNKNOWN; - PartyHandler::PartyHandler() : Net::PartyHandler() { - mShareExp = PartyShare::UNKNOWN; - mShareItems = PartyShare::UNKNOWN; + PartyRecv::mShareExp = PartyShare::UNKNOWN; + PartyRecv::mShareItems = PartyShare::UNKNOWN; taParty = Party::getParty(1); } @@ -75,183 +73,19 @@ void PartyHandler::clear() const taParty = nullptr; } -void PartyHandler::processPartyCreate(Net::MessageIn &msg) -{ - if (msg.readUInt8("flag")) - NotifyManager::notify(NotifyTypes::PARTY_CREATE_FAILED); - else - NotifyManager::notify(NotifyTypes::PARTY_CREATED); -} - -void PartyHandler::processPartySettingsContinue(Net::MessageIn &msg, - const PartyShareT exp, - const PartyShareT item) -{ - switch (exp) - { - case PartyShare::YES: - if (mShareExp == PartyShare::YES) - break; - mShareExp = PartyShare::YES; - NotifyManager::notify(NotifyTypes::PARTY_EXP_SHARE_ON); - break; - case PartyShare::NO: - if (mShareExp == PartyShare::NO) - break; - mShareExp = PartyShare::NO; - NotifyManager::notify(NotifyTypes::PARTY_EXP_SHARE_OFF); - break; - case PartyShare::NOT_POSSIBLE: - if (mShareExp == PartyShare::NOT_POSSIBLE) - break; - mShareExp = PartyShare::NOT_POSSIBLE; - NotifyManager::notify(NotifyTypes::PARTY_EXP_SHARE_ERROR); - break; - default: - case PartyShare::UNKNOWN: - UNIMPLIMENTEDPACKET; - break; - } - - switch (item) - { - case PartyShare::YES: - if (mShareItems == PartyShare::YES) - break; - mShareItems = PartyShare::YES; - NotifyManager::notify(NotifyTypes::PARTY_ITEM_SHARE_ON); - break; - case PartyShare::NO: - if (mShareItems == PartyShare::NO) - break; - mShareItems = PartyShare::NO; - NotifyManager::notify(NotifyTypes::PARTY_ITEM_SHARE_OFF); - break; - case PartyShare::NOT_POSSIBLE: - if (mShareItems == PartyShare::NOT_POSSIBLE) - break; - mShareItems = PartyShare::NOT_POSSIBLE; - NotifyManager::notify(NotifyTypes::PARTY_ITEM_SHARE_ERROR); - break; - default: - case PartyShare::UNKNOWN: - UNIMPLIMENTEDPACKET; - break; - } -} - -void PartyHandler::processPartyLeave(Net::MessageIn &msg) -{ - const BeingId id = msg.readBeingId("account id"); - const std::string nick = msg.readString(24, "nick"); - const int reason = msg.readUInt8("flag"); - if (!localPlayer) - return; - - if (id == localPlayer->getId()) - { - switch (reason) - { - case 0: - default: - NotifyManager::notify(NotifyTypes::PARTY_LEFT); - break; - - case 1: - NotifyManager::notify(NotifyTypes::PARTY_KICKED); - break; - - case 2: - NotifyManager::notify(NotifyTypes::PARTY_LEFT_DENY); - break; - - case 3: - NotifyManager::notify(NotifyTypes::PARTY_KICK_DENY); - break; - } - - if (reason >= 2) - return; - - if (Ea::taParty) - { - Ea::taParty->removeFromMembers(); - Ea::taParty->clearMembers(); - } - - delete2(partyTab) - - if (socialWindow && Ea::taParty) - socialWindow->removeTab(Ea::taParty); - localPlayer->setPartyName(""); - } - else - { - switch (reason) - { - case 0: - default: - NotifyManager::notify(NotifyTypes::PARTY_USER_LEFT, nick); - break; - - case 1: - NotifyManager::notify(NotifyTypes::PARTY_USER_KICKED, nick); - break; - - case 2: - NotifyManager::notify(NotifyTypes::PARTY_USER_LEFT_DENY, nick); - break; - - case 3: - NotifyManager::notify(NotifyTypes::PARTY_USER_KICK_DENY, nick); - break; - } - - if (reason >= 2) - return; - - if (actorManager) - { - Being *const b = actorManager->findBeing(id); - if (b && b->getType() == ActorType::Player) - { - b->setParty(nullptr); - b->setPartyName(""); - } - } - if (Ea::taParty) - Ea::taParty->removeMember(id); - } -} - -void PartyHandler::processPartyUpdateCoords(Net::MessageIn &msg) +ChatTab *PartyHandler::getTab() const { - const BeingId id = msg.readBeingId("account id"); - PartyMember *m = nullptr; - if (Ea::taParty) - m = Ea::taParty->getMember(id); - if (m) - { - m->setX(msg.readInt16("x")); - m->setY(msg.readInt16("y")); - } - else - { - msg.readInt16("x"); - msg.readInt16("y"); - } + return partyTab; } -ChatTab *PartyHandler::getTab() const +PartyShareT PartyHandler::getShareExperience() const { - return partyTab; + return PartyRecv::mShareExp; } -void PartyHandler::createTab() +PartyShareT PartyHandler::getShareItems() const { - partyTab = new PartyTab(chatWindow); - if (config.getBoolValue("showChatHistory")) - partyTab->loadFromLogFile("#Party"); + return PartyRecv::mShareItems; } } // namespace Ea diff --git a/src/net/ea/partyhandler.h b/src/net/ea/partyhandler.h index 453aced1d..1848d5316 100644 --- a/src/net/ea/partyhandler.h +++ b/src/net/ea/partyhandler.h @@ -44,33 +44,15 @@ class PartyHandler notfinal : public Net::PartyHandler void join(const int partyId) const override final; - PartyShareT getShareExperience() const override final A_WARN_UNUSED - { return mShareExp; } + PartyShareT getShareExperience() const override final A_WARN_UNUSED; - PartyShareT getShareItems() const override final A_WARN_UNUSED - { return mShareItems; } + PartyShareT getShareItems() const override final A_WARN_UNUSED; static void reload(); void clear() const override final; ChatTab *getTab() const override final; - - protected: - static void createTab(); - - static void processPartyCreate(Net::MessageIn &msg); - - static void processPartyLeave(Net::MessageIn &msg); - - static void processPartyUpdateCoords(Net::MessageIn &msg); - - static void processPartySettingsContinue(Net::MessageIn &msg, - const PartyShareT exp, - const PartyShareT item); - - static PartyShareT mShareExp; - static PartyShareT mShareItems; }; extern Party *taParty; diff --git a/src/net/ea/partyrecv.cpp b/src/net/ea/partyrecv.cpp new file mode 100644 index 000000000..415129f41 --- /dev/null +++ b/src/net/ea/partyrecv.cpp @@ -0,0 +1,229 @@ +/* + * The ManaPlus Client + * Copyright (C) 2008 Lloyd Bryant + * Copyright (C) 2011-2015 The ManaPlus Developers + * + * This file is part of The ManaPlus Client. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +#include "net/ea/partyrecv.h" + +#include "actormanager.h" +#include "configuration.h" +#include "notifymanager.h" +#include "party.h" + +#include "being/localplayer.h" + +#include "enums/resources/notifytypes.h" + +#include "gui/windows/chatwindow.h" +#include "gui/windows/socialwindow.h" + +#include "net/messagein.h" + +#include "gui/widgets/tabs/chat/partytab.h" + +#include "utils/delete2.h" + +#include "debug.h" + +namespace Ea +{ + +Party *taParty = nullptr; + +namespace PartyRecv +{ + PartyShareT mShareExp = PartyShare::UNKNOWN; + PartyShareT mShareItems = PartyShare::UNKNOWN; +} // namespace PartyRecv + +void PartyRecv::processPartyCreate(Net::MessageIn &msg) +{ + if (msg.readUInt8("flag")) + NotifyManager::notify(NotifyTypes::PARTY_CREATE_FAILED); + else + NotifyManager::notify(NotifyTypes::PARTY_CREATED); +} + +void PartyRecv::processPartySettingsContinue(Net::MessageIn &msg, + const PartyShareT exp, + const PartyShareT item) +{ + switch (exp) + { + case PartyShare::YES: + if (mShareExp == PartyShare::YES) + break; + mShareExp = PartyShare::YES; + NotifyManager::notify(NotifyTypes::PARTY_EXP_SHARE_ON); + break; + case PartyShare::NO: + if (mShareExp == PartyShare::NO) + break; + mShareExp = PartyShare::NO; + NotifyManager::notify(NotifyTypes::PARTY_EXP_SHARE_OFF); + break; + case PartyShare::NOT_POSSIBLE: + if (mShareExp == PartyShare::NOT_POSSIBLE) + break; + mShareExp = PartyShare::NOT_POSSIBLE; + NotifyManager::notify(NotifyTypes::PARTY_EXP_SHARE_ERROR); + break; + default: + case PartyShare::UNKNOWN: + UNIMPLIMENTEDPACKET; + break; + } + + switch (item) + { + case PartyShare::YES: + if (mShareItems == PartyShare::YES) + break; + mShareItems = PartyShare::YES; + NotifyManager::notify(NotifyTypes::PARTY_ITEM_SHARE_ON); + break; + case PartyShare::NO: + if (mShareItems == PartyShare::NO) + break; + mShareItems = PartyShare::NO; + NotifyManager::notify(NotifyTypes::PARTY_ITEM_SHARE_OFF); + break; + case PartyShare::NOT_POSSIBLE: + if (mShareItems == PartyShare::NOT_POSSIBLE) + break; + mShareItems = PartyShare::NOT_POSSIBLE; + NotifyManager::notify(NotifyTypes::PARTY_ITEM_SHARE_ERROR); + break; + default: + case PartyShare::UNKNOWN: + UNIMPLIMENTEDPACKET; + break; + } +} + +void PartyRecv::processPartyLeave(Net::MessageIn &msg) +{ + const BeingId id = msg.readBeingId("account id"); + const std::string nick = msg.readString(24, "nick"); + const int reason = msg.readUInt8("flag"); + if (!localPlayer) + return; + + if (id == localPlayer->getId()) + { + switch (reason) + { + case 0: + default: + NotifyManager::notify(NotifyTypes::PARTY_LEFT); + break; + + case 1: + NotifyManager::notify(NotifyTypes::PARTY_KICKED); + break; + + case 2: + NotifyManager::notify(NotifyTypes::PARTY_LEFT_DENY); + break; + + case 3: + NotifyManager::notify(NotifyTypes::PARTY_KICK_DENY); + break; + } + + if (reason >= 2) + return; + + if (Ea::taParty) + { + Ea::taParty->removeFromMembers(); + Ea::taParty->clearMembers(); + } + + delete2(partyTab) + + if (socialWindow && Ea::taParty) + socialWindow->removeTab(Ea::taParty); + localPlayer->setPartyName(""); + } + else + { + switch (reason) + { + case 0: + default: + NotifyManager::notify(NotifyTypes::PARTY_USER_LEFT, nick); + break; + + case 1: + NotifyManager::notify(NotifyTypes::PARTY_USER_KICKED, nick); + break; + + case 2: + NotifyManager::notify(NotifyTypes::PARTY_USER_LEFT_DENY, nick); + break; + + case 3: + NotifyManager::notify(NotifyTypes::PARTY_USER_KICK_DENY, nick); + break; + } + + if (reason >= 2) + return; + + if (actorManager) + { + Being *const b = actorManager->findBeing(id); + if (b && b->getType() == ActorType::Player) + { + b->setParty(nullptr); + b->setPartyName(""); + } + } + if (Ea::taParty) + Ea::taParty->removeMember(id); + } +} + +void PartyRecv::processPartyUpdateCoords(Net::MessageIn &msg) +{ + const BeingId id = msg.readBeingId("account id"); + PartyMember *m = nullptr; + if (Ea::taParty) + m = Ea::taParty->getMember(id); + if (m) + { + m->setX(msg.readInt16("x")); + m->setY(msg.readInt16("y")); + } + else + { + msg.readInt16("x"); + msg.readInt16("y"); + } +} + +void PartyRecv::createTab() +{ + partyTab = new PartyTab(chatWindow); + if (config.getBoolValue("showChatHistory")) + partyTab->loadFromLogFile("#Party"); +} + +} // namespace Ea diff --git a/src/net/ea/partyrecv.h b/src/net/ea/partyrecv.h new file mode 100644 index 000000000..87452318f --- /dev/null +++ b/src/net/ea/partyrecv.h @@ -0,0 +1,53 @@ +/* + * The ManaPlus Client + * Copyright (C) 2008 Lloyd Bryant + * Copyright (C) 2011-2015 The ManaPlus Developers + * + * This file is part of The ManaPlus Client. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +#ifndef NET_EA_PARTYRECV_H +#define NET_EA_PARTYRECV_H + +#include "net/partyhandler.h" + +class Party; + +namespace Net +{ + class MessageIn; +} + +namespace Ea +{ + namespace PartyRecv + { + extern PartyShareT mShareExp; + extern PartyShareT mShareItems; + + void processPartyCreate(Net::MessageIn &msg); + void processPartyLeave(Net::MessageIn &msg); + void processPartyUpdateCoords(Net::MessageIn &msg); + void processPartySettingsContinue(Net::MessageIn &msg, + const PartyShareT exp, + const PartyShareT item); + + void createTab(); + } // namespace PartyRecv + extern Party *taParty; +} // namespace Ea + +#endif // NET_EA_PARTYRECV_H -- cgit v1.2.3-60-g2f50