diff options
Diffstat (limited to 'src/net/eathena')
-rw-r--r-- | src/net/eathena/mailhandler.cpp | 172 | ||||
-rw-r--r-- | src/net/eathena/mailhandler.h | 19 | ||||
-rw-r--r-- | src/net/eathena/mailrecv.cpp | 197 | ||||
-rw-r--r-- | src/net/eathena/mailrecv.h | 46 |
4 files changed, 253 insertions, 181 deletions
diff --git a/src/net/eathena/mailhandler.cpp b/src/net/eathena/mailhandler.cpp index e9d052b78..3474a8b20 100644 --- a/src/net/eathena/mailhandler.cpp +++ b/src/net/eathena/mailhandler.cpp @@ -30,6 +30,7 @@ #include "net/ea/eaprotocol.h" +#include "net/eathena/mailrecv.h" #include "net/eathena/messageout.h" #include "net/eathena/protocol.h" @@ -68,39 +69,39 @@ void MailHandler::handleMessage(Net::MessageIn &msg) switch (msg.getId()) { case SMSG_MAIL_OPEN_WINDOW: - processMailOpen(msg); + MailRecv::processMailOpen(msg); break; case SMSG_MAIL_MAILS_LIST: - processMailList(msg); + MailRecv::processMailList(msg); break; case SMSG_MAIL_READ_MAIL: - processReadMail(msg); + MailRecv::processReadMail(msg); break; case SMSG_MAIL_GET_ATTACHMENT: - processGetAttachment(msg); + MailRecv::processGetAttachment(msg); break; case SMSG_MAIL_SEND_MAIL_ACK: - processSendMailAck(msg); + MailRecv::processSendMailAck(msg); break; case SMSG_MAIL_NEW_MAIL: - processNewMail(msg); + MailRecv::processNewMail(msg); break; case SMSG_MAIL_SET_ATTACHMENT_ACK: - processSetAttachmentAck(msg); + MailRecv::processSetAttachmentAck(msg); break; case SMSG_MAIL_DELETE_MAIL_ACK: - processDeleteAck(msg); + MailRecv::processDeleteAck(msg); break; case SMSG_MAIL_RETURN: - processMailReturn(msg); + MailRecv::processMailReturn(msg); break; default: @@ -108,159 +109,6 @@ void MailHandler::handleMessage(Net::MessageIn &msg) } } -void MailHandler::processMailOpen(Net::MessageIn &msg) -{ - UNIMPLIMENTEDPACKET; - const int flag = msg.readInt32("flag"); - switch (flag) - { - case 0: // open window - break; - - case 1: // close window - break; - - default: - UNIMPLIMENTEDPACKET; - break; - } -} - -void MailHandler::processMailList(Net::MessageIn &msg) -{ - const int count = (msg.readInt16("len") - 8) / 73; - const int amount = msg.readInt32("amount"); - if (count != amount) - logger->log("error: wrong mails count"); - mailWindow->clear(); - for (int f = 0; f < count; f ++) - { - MailMessage *const mail = new MailMessage; - mail->id = msg.readInt32("message id"); - mail->title = msg.readString(40, "title"); - mail->unread = msg.readUInt8("unread flag") ? true : false; - mail->sender = msg.readString(24, "sender name"); - mail->time = msg.readInt32("time stamp"); - mail->strTime = timeToStr(mail->time); - mailWindow->addMail(mail); - } -} - -void MailHandler::processReadMail(Net::MessageIn &msg) -{ - const int sz = msg.readInt16("len") - 101; - MailMessage *mail = new MailMessage; - mail->id = msg.readInt32("message id"); - mail->title = msg.readString(40, "title"); - mail->sender = msg.readString(24, "sender name"); - msg.readInt32("unused"); - mail->money = msg.readInt32("money"); - mail->itemAmount = msg.readInt32("item amount"); - mail->itemId = msg.readInt16("item id"); - mail->itemType = msg.readInt16("item type"); - mail->itemIdentify = msg.readUInt8("identify"); - mail->itemAttribute = msg.readUInt8("attribute"); - mail->itemRefine = msg.readUInt8("refine"); - for (int f = 0; f < 4; f ++) - mail->card[f] = msg.readInt16("card"); - const int msgLen = msg.readUInt8("msg len"); - if (msgLen != sz) - logger->log("error: wrong message size"); - mail->text = msg.readString(sz, "message"); - msg.readUInt8("zero"); - mail->strTime = timeToStr(mail->time); - mailWindow->showMessage(mail); -} - -void MailHandler::processGetAttachment(Net::MessageIn &msg) -{ - switch (msg.readUInt8("flag")) - { - case 0: - NotifyManager::notify(NotifyTypes::MAIL_GET_ATTACH_OK); - break; - case 1: - NotifyManager::notify(NotifyTypes::MAIL_GET_ATTACH_ERROR); - break; - case 2: - NotifyManager::notify(NotifyTypes::MAIL_GET_ATTACH_TOO_MANY_ITEMS); - break; - default: - UNIMPLIMENTEDPACKET; - break; - } -} - -void MailHandler::processSendMailAck(Net::MessageIn &msg) -{ - switch (msg.readUInt8("fail flag")) - { - case 0: - NotifyManager::notify(NotifyTypes::MAIL_SEND_OK); - break; - case 1: - NotifyManager::notify(NotifyTypes::MAIL_SEND_ERROR); - break; - default: - UNIMPLIMENTEDPACKET; - break; - } -} - -void MailHandler::processNewMail(Net::MessageIn &msg) -{ - msg.readInt32("message id"); - const std::string subj = msg.readString(40, "title"); - const std::string sender = msg.readString(24, "sender name"); - NotifyManager::notify(NotifyTypes::NEW_MAIL, - strprintf(_("You have new mail from %s with subject %s"), - sender.c_str(), subj.c_str())); - mailHandler->refresh(); -} - -void MailHandler::processSetAttachmentAck(Net::MessageIn &msg) -{ - const int index = msg.readInt16("index"); - const int flag = msg.readUInt8("flag"); - if (flag) - { - if (index) - NotifyManager::notify(NotifyTypes::MAIL_ATTACH_ITEM_ERROR); - else - NotifyManager::notify(NotifyTypes::MAIL_ATTACH_MONEY_ERROR); - } -} - -void MailHandler::processDeleteAck(Net::MessageIn &msg) -{ - const int mail = msg.readInt32("message id"); - const int flag = msg.readInt16("fail flag"); - if (flag) - { - NotifyManager::notify(NotifyTypes::MAIL_DELETE_ERROR); - } - else - { - NotifyManager::notify(NotifyTypes::MAIL_DELETE_OK); - mailWindow->removeMail(mail); - } -} - -void MailHandler::processMailReturn(Net::MessageIn &msg) -{ - const int mail = msg.readInt32("message id"); - const int flag = msg.readInt16("fail flag"); - if (flag) - { - NotifyManager::notify(NotifyTypes::MAIL_RETURN_ERROR); - } - else - { - NotifyManager::notify(NotifyTypes::MAIL_RETURN_OK); - mailWindow->removeMail(mail); - } -} - void MailHandler::refresh() const { createOutPacket(CMSG_MAIL_REFRESH_INBOX); diff --git a/src/net/eathena/mailhandler.h b/src/net/eathena/mailhandler.h index 88e1e0e25..947c53c52 100644 --- a/src/net/eathena/mailhandler.h +++ b/src/net/eathena/mailhandler.h @@ -57,25 +57,6 @@ class MailHandler final : public MessageHandler, public Net::MailHandler void send(const std::string &name, const std::string &title, std::string message) const override final; - - protected: - static void processMailOpen(Net::MessageIn &msg); - - static void processMailList(Net::MessageIn &msg); - - static void processReadMail(Net::MessageIn &msg); - - static void processGetAttachment(Net::MessageIn &msg); - - static void processSendMailAck(Net::MessageIn &msg); - - static void processNewMail(Net::MessageIn &msg); - - static void processSetAttachmentAck(Net::MessageIn &msg); - - static void processDeleteAck(Net::MessageIn &msg); - - static void processMailReturn(Net::MessageIn &msg); }; } // namespace EAthena diff --git a/src/net/eathena/mailrecv.cpp b/src/net/eathena/mailrecv.cpp new file mode 100644 index 000000000..529f9d9a4 --- /dev/null +++ b/src/net/eathena/mailrecv.cpp @@ -0,0 +1,197 @@ +/* + * The ManaPlus Client + * 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 <http://www.gnu.org/licenses/>. + */ + +#include "net/eathena/mailrecv.h" + +#include "notifymanager.h" + +#include "enums/resources/notifytypes.h" + +#include "gui/mailmessage.h" + +#include "gui/windows/mailwindow.h" + +#include "net/ea/eaprotocol.h" + +#include "net/eathena/messageout.h" +#include "net/eathena/protocol.h" + +#include "utils/gettext.h" +#include "utils/stringutils.h" + +#include "debug.h" + +namespace EAthena +{ + +void MailRecv::processMailOpen(Net::MessageIn &msg) +{ + UNIMPLIMENTEDPACKET; + const int flag = msg.readInt32("flag"); + switch (flag) + { + case 0: // open window + break; + + case 1: // close window + break; + + default: + UNIMPLIMENTEDPACKET; + break; + } +} + +void MailRecv::processMailList(Net::MessageIn &msg) +{ + const int count = (msg.readInt16("len") - 8) / 73; + const int amount = msg.readInt32("amount"); + if (count != amount) + logger->log("error: wrong mails count"); + mailWindow->clear(); + for (int f = 0; f < count; f ++) + { + MailMessage *const mail = new MailMessage; + mail->id = msg.readInt32("message id"); + mail->title = msg.readString(40, "title"); + mail->unread = msg.readUInt8("unread flag") ? true : false; + mail->sender = msg.readString(24, "sender name"); + mail->time = msg.readInt32("time stamp"); + mail->strTime = timeToStr(mail->time); + mailWindow->addMail(mail); + } +} + +void MailRecv::processReadMail(Net::MessageIn &msg) +{ + const int sz = msg.readInt16("len") - 101; + MailMessage *mail = new MailMessage; + mail->id = msg.readInt32("message id"); + mail->title = msg.readString(40, "title"); + mail->sender = msg.readString(24, "sender name"); + msg.readInt32("unused"); + mail->money = msg.readInt32("money"); + mail->itemAmount = msg.readInt32("item amount"); + mail->itemId = msg.readInt16("item id"); + mail->itemType = msg.readInt16("item type"); + mail->itemIdentify = msg.readUInt8("identify"); + mail->itemAttribute = msg.readUInt8("attribute"); + mail->itemRefine = msg.readUInt8("refine"); + for (int f = 0; f < 4; f ++) + mail->card[f] = msg.readInt16("card"); + const int msgLen = msg.readUInt8("msg len"); + if (msgLen != sz) + logger->log("error: wrong message size"); + mail->text = msg.readString(sz, "message"); + msg.readUInt8("zero"); + mail->strTime = timeToStr(mail->time); + mailWindow->showMessage(mail); +} + +void MailRecv::processGetAttachment(Net::MessageIn &msg) +{ + switch (msg.readUInt8("flag")) + { + case 0: + NotifyManager::notify(NotifyTypes::MAIL_GET_ATTACH_OK); + break; + case 1: + NotifyManager::notify(NotifyTypes::MAIL_GET_ATTACH_ERROR); + break; + case 2: + NotifyManager::notify(NotifyTypes::MAIL_GET_ATTACH_TOO_MANY_ITEMS); + break; + default: + UNIMPLIMENTEDPACKET; + break; + } +} + +void MailRecv::processSendMailAck(Net::MessageIn &msg) +{ + switch (msg.readUInt8("fail flag")) + { + case 0: + NotifyManager::notify(NotifyTypes::MAIL_SEND_OK); + break; + case 1: + NotifyManager::notify(NotifyTypes::MAIL_SEND_ERROR); + break; + default: + UNIMPLIMENTEDPACKET; + break; + } +} + +void MailRecv::processNewMail(Net::MessageIn &msg) +{ + msg.readInt32("message id"); + const std::string subj = msg.readString(40, "title"); + const std::string sender = msg.readString(24, "sender name"); + NotifyManager::notify(NotifyTypes::NEW_MAIL, + strprintf(_("You have new mail from %s with subject %s"), + sender.c_str(), subj.c_str())); + mailHandler->refresh(); +} + +void MailRecv::processSetAttachmentAck(Net::MessageIn &msg) +{ + const int index = msg.readInt16("index"); + const int flag = msg.readUInt8("flag"); + if (flag) + { + if (index) + NotifyManager::notify(NotifyTypes::MAIL_ATTACH_ITEM_ERROR); + else + NotifyManager::notify(NotifyTypes::MAIL_ATTACH_MONEY_ERROR); + } +} + +void MailRecv::processDeleteAck(Net::MessageIn &msg) +{ + const int mail = msg.readInt32("message id"); + const int flag = msg.readInt16("fail flag"); + if (flag) + { + NotifyManager::notify(NotifyTypes::MAIL_DELETE_ERROR); + } + else + { + NotifyManager::notify(NotifyTypes::MAIL_DELETE_OK); + mailWindow->removeMail(mail); + } +} + +void MailRecv::processMailReturn(Net::MessageIn &msg) +{ + const int mail = msg.readInt32("message id"); + const int flag = msg.readInt16("fail flag"); + if (flag) + { + NotifyManager::notify(NotifyTypes::MAIL_RETURN_ERROR); + } + else + { + NotifyManager::notify(NotifyTypes::MAIL_RETURN_OK); + mailWindow->removeMail(mail); + } +} + +} // namespace EAthena diff --git a/src/net/eathena/mailrecv.h b/src/net/eathena/mailrecv.h new file mode 100644 index 000000000..a501d214e --- /dev/null +++ b/src/net/eathena/mailrecv.h @@ -0,0 +1,46 @@ +/* + * The ManaPlus Client + * 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 <http://www.gnu.org/licenses/>. + */ + +#ifndef NET_EATHENA_MAILRECV_H +#define NET_EATHENA_MAILRECV_H + +#include "net/mailhandler.h" + +#include "net/eathena/messagehandler.h" + +namespace EAthena +{ + class MessageOut; + + namespace MailRecv + { + void processMailOpen(Net::MessageIn &msg); + void processMailList(Net::MessageIn &msg); + void processReadMail(Net::MessageIn &msg); + void processGetAttachment(Net::MessageIn &msg); + void processSendMailAck(Net::MessageIn &msg); + void processNewMail(Net::MessageIn &msg); + void processSetAttachmentAck(Net::MessageIn &msg); + void processDeleteAck(Net::MessageIn &msg); + void processMailReturn(Net::MessageIn &msg); + } // namespace MailRecv +} // namespace EAthena + +#endif // NET_EATHENA_MAILRECV_H |