diff options
| author | me_desk <me_desk@fb96df88-216d-11de-830c-f3023f12d8ac> | 2012-06-17 21:15:12 +0000 |
|---|---|---|
| committer | me_desk <me_desk@fb96df88-216d-11de-830c-f3023f12d8ac> | 2012-06-17 21:15:12 +0000 |
| commit | 8df9466ada46e4b07990b9cb7e8b1cd61b96844a (patch) | |
| tree | 2cb652e5839bed672133ffa90e7ad477f55cfb6b /pica-client/msguirouter.cpp | |
| download | pica-pica-8df9466ada46e4b07990b9cb7e8b1cd61b96844a.tar.gz pica-pica-8df9466ada46e4b07990b9cb7e8b1cd61b96844a.zip | |
todo list update
git-svn-id: svn://localhost/project_picapica/trunk@128 fb96df88-216d-11de-830c-f3023f12d8ac
Diffstat (limited to 'pica-client/msguirouter.cpp')
| -rw-r--r-- | pica-client/msguirouter.cpp | 93 |
1 files changed, 93 insertions, 0 deletions
diff --git a/pica-client/msguirouter.cpp b/pica-client/msguirouter.cpp new file mode 100644 index 0000000..efa080c --- /dev/null +++ b/pica-client/msguirouter.cpp @@ -0,0 +1,93 @@ +#include "msguirouter.h" +#include "dialogs/forgedcertdialog.h" + + +/* + этот класс должен обеспечивать связь между приёмом-отправкой сообщений и их отображением в пользовательском интерфейсе. + Класс SkyNet отвечает только за прием и отправку сообщений, пересылку через сеть и работу с протоколом, ему пофиг, + как они показываются юзеру. Данный класс должен работать с GUI, например, по приходу нового сообщения (через сигнал от + класса SkyNet) либо помигать иконкой в трее, либо создать новое окно чата, либо развернуть уже имеющееся, либо помигать + свернутым окном на таскбаре. Это поведение может настраиваться, настройки хранить в базе и загружать в конструкторе из + базы sqlite. Например, данный класс должен управлять экземплярами ChatWindow, создавать новые при необходимости либо + активировать имеющиеся. Также этот класс должен обеспечивать хранение отложенных сообщений (когда собеседник недоступен). + Можно придумать название получше + */ +MsgUIRouter::MsgUIRouter(QObject *parent) : + QObject(parent) +{ + connect(skynet, SIGNAL(MessageReceived(quint32,QString)), this, SLOT(msg_from_peer(quint32,QString))); + connect(skynet, SIGNAL(UnableToDeliver(quint32,QString)), this, SLOT(delivery_failed(quint32,QString))); + connect(skynet, SIGNAL(Delivered(quint32)), this, SLOT(delivered(quint32))); + connect(skynet, SIGNAL(CertificateForged(quint32,QString,QString)), this, SLOT(scary_cert_message(quint32,QString,QString))); + +} + +void MsgUIRouter::create_chatwindow(quint32 peer_id) +{ + ChatWindow *cw; + + cw = new ChatWindow(peer_id); + + chatwindows[peer_id] = cw; + + connect(cw, SIGNAL(msg_input(QString,ChatWindow*)), this, SLOT(msg_to_peer(QString,ChatWindow*))); + connect(cw, SIGNAL(chatwindow_close(ChatWindow*)), this, SLOT(chatwindow_closed(ChatWindow*))); + + cw->show(); +} + +void MsgUIRouter::msg_from_peer(quint32 from, QString msg) +{ + + if ( ! chatwindows.contains(from)) + { + create_chatwindow(from); + } + + chatwindows[from]->msg_from_peer(msg); + +} + +void MsgUIRouter::msg_to_peer(QString msg, ChatWindow *sender_window) +{ + skynet->SendMessage(sender_window->getPeerId(), msg); +} + +void MsgUIRouter::start_chat(quint32 peer_id) +{ + if ( ! chatwindows.contains(peer_id)) + { + create_chatwindow(peer_id); + } + else + { + chatwindows[peer_id]->showNormal(); + } +} + +void MsgUIRouter::chatwindow_closed(ChatWindow *sender_window) +{ + chatwindows.remove(sender_window->getPeerId()); +} + +void MsgUIRouter::delivery_failed(quint32 to, QString msg) +{ +// if (chatwindows.contains(to)) +// { +// chatwindows[to]->msg_informational(tr("failed to deliver")); +// } +} + +void MsgUIRouter::delivered(quint32 to) +{ + if (chatwindows.contains(to)) + { + chatwindows[to]->msg_delivered(); + } +} + +void MsgUIRouter::scary_cert_message(quint32 peer_id, QString received_cert, QString stored_cert) +{ + ForgedCertDialog fcd(peer_id, received_cert, stored_cert); + fcd.exec(); +} |
