summaryrefslogtreecommitdiffstats
path: root/pica-client
diff options
context:
space:
mode:
authorme_desk <me_desk@fb96df88-216d-11de-830c-f3023f12d8ac>2014-08-06 23:32:53 +0000
committerme_desk <me_desk@fb96df88-216d-11de-830c-f3023f12d8ac>2014-08-06 23:32:53 +0000
commit249a43afa87a8fca8979cd9d0ec9ac6522205d2b (patch)
treef741991624e3c77d86c8b51e353228c8b5375833 /pica-client
parent3e1c3cd989180d2085ce5af7f4db2b156d5df578 (diff)
downloadpica-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.cpp20
-rw-r--r--pica-client/dialogs/filetransferdialog.h2
-rw-r--r--pica-client/filetransfercontroller.cpp23
-rw-r--r--pica-client/filetransfercontroller.h1
-rw-r--r--pica-client/skynet.cpp7
-rw-r--r--pica-client/skynet.h4
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);
//получение подтверждения о доставке сообщения