diff options
| author | me_desk <me_desk@fb96df88-216d-11de-830c-f3023f12d8ac> | 2014-08-06 23:32:53 +0000 |
|---|---|---|
| committer | me_desk <me_desk@fb96df88-216d-11de-830c-f3023f12d8ac> | 2014-08-06 23:32:53 +0000 |
| commit | 249a43afa87a8fca8979cd9d0ec9ac6522205d2b (patch) | |
| tree | f741991624e3c77d86c8b51e353228c8b5375833 /pica-client | |
| parent | 3e1c3cd989180d2085ce5af7f4db2b156d5df578 (diff) | |
| download | pica-pica-249a43afa87a8fca8979cd9d0ec9ac6522205d2b.tar.gz pica-pica-249a43afa87a8fca8979cd9d0ec9ac6522205d2b.zip | |
handling peer disconnect and remote io error during filetransfer
git-svn-id: svn://localhost/project_picapica/trunk@316 fb96df88-216d-11de-830c-f3023f12d8ac
Diffstat (limited to 'pica-client')
| -rw-r--r-- | pica-client/dialogs/filetransferdialog.cpp | 20 | ||||
| -rw-r--r-- | pica-client/dialogs/filetransferdialog.h | 2 | ||||
| -rw-r--r-- | pica-client/filetransfercontroller.cpp | 23 | ||||
| -rw-r--r-- | pica-client/filetransfercontroller.h | 1 | ||||
| -rw-r--r-- | pica-client/skynet.cpp | 7 | ||||
| -rw-r--r-- | pica-client/skynet.h | 4 |
6 files changed, 55 insertions, 2 deletions
diff --git a/pica-client/dialogs/filetransferdialog.cpp b/pica-client/dialogs/filetransferdialog.cpp index 41ebcdb..d910f6b 100644 --- a/pica-client/dialogs/filetransferdialog.cpp +++ b/pica-client/dialogs/filetransferdialog.cpp @@ -126,6 +126,16 @@ void FileTransferDialog::setTransferStatus(TransferStatus st) lbTransferStatus->setText(tr("Finished")); isTerminalState = true; break; + + case PEERDISCONNECTED: + lbTransferStatus->setText(tr("Peer disconnected")); + isTerminalState = true; + break; + + case IOERROR: + lbTransferStatus->setText(tr("I/O error")); + isTerminalState = true; + break; } if (isTerminalState) @@ -155,6 +165,16 @@ void FileTransferDialog::cancelledByPeer() setTransferStatus(CANCELLED); } +void FileTransferDialog::ioError() +{ + setTransferStatus(IOERROR); +} + +void FileTransferDialog::peerDisconnected() +{ + setTransferStatus(PEERDISCONNECTED); +} + void FileTransferDialog::leftbuttonclick() { if (dir_ == RECEIVING) diff --git a/pica-client/dialogs/filetransferdialog.h b/pica-client/dialogs/filetransferdialog.h index 2f42e6d..410c717 100644 --- a/pica-client/dialogs/filetransferdialog.h +++ b/pica-client/dialogs/filetransferdialog.h @@ -74,6 +74,8 @@ public slots: void pausedByPeer(); void resumedByPeer(); void cancelledByPeer(); + void ioError(); + void peerDisconnected(); private slots: void timeout(); diff --git a/pica-client/filetransfercontroller.cpp b/pica-client/filetransfercontroller.cpp index 62d0285..9f07a38 100644 --- a/pica-client/filetransfercontroller.cpp +++ b/pica-client/filetransfercontroller.cpp @@ -18,6 +18,23 @@ FileTransferController::FileTransferController(QObject *parent) : connect(skynet, SIGNAL(OutgoingFileRequestAccepted(QByteArray)), this, SLOT(file_accepted_by_peer(QByteArray))); connect(skynet, SIGNAL(OutgoingFileRequestDenied(QByteArray)), this, SLOT(file_denied_by_peer(QByteArray))); + + connect(skynet, SIGNAL(ChannelClosed(QByteArray)), this, SLOT(file_peer_disconnected(QByteArray))); +} + +void FileTransferController::file_peer_disconnected(QByteArray peer_id) +{ + if (ftdialogs_in.contains(peer_id)) + { + ftdialogs_in[peer_id]->peerDisconnected(); + ftdialogs_in.remove(peer_id); + } + + if (ftdialogs_out.contains(peer_id)) + { + ftdialogs_out[peer_id]->peerDisconnected(); + ftdialogs_out.remove(peer_id); + } } void FileTransferController::file_finished_incoming(QByteArray peer_id) @@ -101,7 +118,8 @@ void FileTransferController::file_cancelled_incoming(QByteArray peer_id) void FileTransferController::file_ioerror_incoming(QByteArray peer_id) { - + ftdialogs_in[peer_id]->ioError(); + ftdialogs_in.remove(peer_id); } void FileTransferController::file_paused_outgoing(QByteArray peer_id) @@ -123,7 +141,8 @@ void FileTransferController::file_cancelled_outgoing(QByteArray peer_id) void FileTransferController::file_ioerror_outgoing(QByteArray peer_id) { - + ftdialogs_out[peer_id]->ioError(); + ftdialogs_out.remove(peer_id); } void FileTransferController::file_accepted_by_me(QByteArray peer_id) diff --git a/pica-client/filetransfercontroller.h b/pica-client/filetransfercontroller.h index 99282c6..ff6cb0b 100644 --- a/pica-client/filetransfercontroller.h +++ b/pica-client/filetransfercontroller.h @@ -40,6 +40,7 @@ public slots: void file_ioerror_outgoing(QByteArray peer_id); void file_finished_incoming(QByteArray peer_id); + void file_peer_disconnected(QByteArray peer_id); //from me (file transfer dialog shown to user) to remote peer void file_accepted_by_me(QByteArray peer_id); diff --git a/pica-client/skynet.cpp b/pica-client/skynet.cpp index f4a3c2b..54b1a85 100644 --- a/pica-client/skynet.cpp +++ b/pica-client/skynet.cpp @@ -594,6 +594,12 @@ void SkyNet::emit_IncomingFileFinished(QByteArray peer_id) emit IncomingFileFinished(peer_id); } +void SkyNet::emit_ChannelClosed(QByteArray peer_id) +{ + emit ChannelClosed(peer_id); +} + + //callbacks //all callbacks are executed in separate thread, created in Nodethread instance, REMEMBER THAT !!! @@ -648,6 +654,7 @@ void SkyNet::channel_closed_cb(const unsigned char *peer_id, int reason) qDebug()<<"channel closed ("<<QByteArray((const char*)peer_id, PICA_ID_SIZE).toBase64() <<", error_code =" << reason << ")\n"; + skynet->emit_ChannelClosed(QByteArray((const char*)peer_id, PICA_ID_SIZE)); } void SkyNet::nodelist_cb(int type, void *addr_bin, const char *addr_str, unsigned int port) diff --git a/pica-client/skynet.h b/pica-client/skynet.h index 4361b50..5aeb332 100644 --- a/pica-client/skynet.h +++ b/pica-client/skynet.h @@ -55,6 +55,8 @@ signals: void OutgoingFileFinished(QByteArray peer_id); void IncomingFileFinished(QByteArray peer_id); + void ChannelClosed(QByteArray peer_id); + private: Nodes nodes; QList<NodeThread*> threads; @@ -94,6 +96,8 @@ private: void emit_OutgoingFileFinished(QByteArray peer_id); void emit_IncomingFileFinished(QByteArray peer_id); + void emit_ChannelClosed(QByteArray peer_id); + //получение сообщения. static void newmsg_cb(const unsigned char *peer_id,const char* msgbuf,unsigned int nb,int type); //получение подтверждения о доставке сообщения |
