diff options
| author | me_desk <me_desk@fb96df88-216d-11de-830c-f3023f12d8ac> | 2014-06-28 22:03:12 +0000 |
|---|---|---|
| committer | me_desk <me_desk@fb96df88-216d-11de-830c-f3023f12d8ac> | 2014-06-28 22:03:12 +0000 |
| commit | 2ca40dbee2a3d7bb320d03395e51297af5d481fb (patch) | |
| tree | 39a679f968df01fcdd9ffbf1e02a3995edcaaa49 | |
| parent | 5876e52dfae8a7a682bfc9404c3ad343af219ecb (diff) | |
| download | pica-pica-2ca40dbee2a3d7bb320d03395e51297af5d481fb.tar.gz pica-pica-2ca40dbee2a3d7bb320d03395e51297af5d481fb.zip | |
added file_finished() callback
git-svn-id: svn://localhost/project_picapica/trunk@313 fb96df88-216d-11de-830c-f3023f12d8ac
| -rwxr-xr-x | PICA_client.c | 25 | ||||
| -rwxr-xr-x | PICA_client.h | 2 | ||||
| -rw-r--r-- | pica-client/filetransfercontroller.cpp | 12 | ||||
| -rw-r--r-- | pica-client/filetransfercontroller.h | 5 | ||||
| -rw-r--r-- | pica-client/skynet.cpp | 23 | ||||
| -rw-r--r-- | pica-client/skynet.h | 6 |
6 files changed, 62 insertions, 11 deletions
diff --git a/PICA_client.c b/PICA_client.c index 3116c3a..25e92f7 100755 --- a/PICA_client.c +++ b/PICA_client.c @@ -795,17 +795,20 @@ if (fwrite(buf + 4, nb - 4, 1, chan->recvfile_stream) != 1) chan->recvfile_pos += (nb - 4); + +if (chan->recvfile_pos > chan->recvfile_size) //received more than file_size + return 0; + +callbacks.file_progress(chan->peer_id, 0, chan->recvfile_pos); + if (chan->recvfile_pos == chan->recvfile_size) { chan->recvfilestate = PICA_CHANRECVFILESTATE_IDLE; fclose(chan->recvfile_stream); chan->recvfile_stream = NULL; - } -if (chan->recvfile_pos > chan->recvfile_size) //received more than file_size - return 0; - -callbacks.file_progress(chan->peer_id, 0, chan->recvfile_pos); + callbacks.file_finished(chan->peer_id, 0); + } return 1; } @@ -818,7 +821,7 @@ unsigned int sender_cmd, receiver_cmd; sender_cmd = buf[2]; receiver_cmd = buf[3]; -fprintf(stderr, "procmsg_FILECONTROL sender_cmd = %i receiver_cmd = %i\n", sender_cmd, receiver_cmd); +fprintf(stderr, "procmsg_FILECONTROL sender_cmd = %i receiver_cmd = %i\n", sender_cmd, receiver_cmd);//debug if ((chan->sendfilestate == PICA_CHANSENDFILESTATE_IDLE || chan->sendfilestate == PICA_CHANSENDFILESTATE_SENTREQ) && receiver_cmd != PICA_PROTO_FILECONTROL_VOID) @@ -1351,6 +1354,7 @@ if (ret>0) { if (PICA_OK != (ret = PICA_read_c2c(ipt)) ) { + puts("PICA_read_c2c() failed");//debug callbacks.channel_closed_cb(ipt->peer_id, ret); kill_ptr = ipt; } @@ -1393,6 +1397,7 @@ while(ipt) { if (PICA_OK != (ret = PICA_write_c2c(ipt))) { + fprintf(stderr,"PICA_write_c2c() failed, ret = %i\n", ret);//debug callbacks.channel_closed_cb(ipt->peer_id, ret); kill_ptr = ipt; } @@ -1767,6 +1772,8 @@ int PICA_pause_file(struct PICA_chaninfo *chan, int sending) int senderctl = PICA_PROTO_FILECONTROL_VOID; int receiverctl = PICA_PROTO_FILECONTROL_VOID; +fprintf(stderr, "PICA_pause_file(%p, %i)\n", chan, sending);//debug + if (sending) { if (chan->sendfilestate != PICA_CHANSENDFILESTATE_SENDING) @@ -1820,6 +1827,8 @@ int PICA_send_filecontrol(struct PICA_chaninfo *chan, int senderctl, int receive { struct PICA_proto_msg *mp; +fprintf(stderr, "PICA_send_filecontrol(%p, %i, %i)\n", chan, senderctl, receiverctl);//debug + if ((mp = c2c_writebuf_push(chan, PICA_PROTO_FILECONTROL, PICA_PROTO_FILECONTROL_SIZE))) { mp->tail[0] = senderctl; //sender's command @@ -1871,6 +1880,8 @@ if (chn->sendfile_pos >= chn->sendfile_size) chn->sendfilestate = PICA_CHANSENDFILESTATE_IDLE; fclose(chn->sendfile_stream); chn->sendfile_stream = NULL; + + callbacks.file_finished(chn->peer_id, 1); } if (chn->sendfile_pos > chn->sendfile_size) @@ -1883,7 +1894,7 @@ void PICA_close_channel(struct PICA_chaninfo *chn) { struct PICA_chaninfo *ipt; -//puts("PICA_close_channel");//debug +fprintf(stderr, "PICA_close_channel(%p)\n", chn);//debug ipt=chn->conn->chan_list_head; //puts("PICA_close_channel_chkp0");//debug diff --git a/PICA_client.h b/PICA_client.h index fd3762d..81aec89 100755 --- a/PICA_client.h +++ b/PICA_client.h @@ -207,6 +207,8 @@ void (*denied_file_cb)(const unsigned char *peer_id); void (*file_progress)(const unsigned char *peer_id, uint64_t sent, uint64_t received); void (*file_control)(const unsigned char *peer_id, unsigned int sender_cmd, unsigned int receiver_cmd); + +void (*file_finished)(const unsigned char *peer_id, int sending); }; diff --git a/pica-client/filetransfercontroller.cpp b/pica-client/filetransfercontroller.cpp index 61534c9..a293827 100644 --- a/pica-client/filetransfercontroller.cpp +++ b/pica-client/filetransfercontroller.cpp @@ -20,6 +20,17 @@ FileTransferController::FileTransferController(QObject *parent) : connect(skynet, SIGNAL(OutgoingFileRequestDenied(QByteArray)), this, SLOT(file_denied_by_peer(QByteArray))); } +void FileTransferController::file_finished_incoming(QByteArray peer_id) +{ + if (ftdialogs_in.contains(peer_id)) + ftdialogs_in.remove(peer_id); +} + +void FileTransferController::file_finished_outgoing(QByteArray peer_id) +{ + if (ftdialogs_out.contains(peer_id)) + ftdialogs_out.remove(peer_id); +} void FileTransferController::file_progress(QByteArray peer_id, quint64 bytes_sent, quint64 bytes_received) { @@ -44,7 +55,6 @@ void FileTransferController::file_request(QByteArray peer_id, quint64 file_size, FileTransferDialog *ftd = new FileTransferDialog(peer_id, filename, file_size, FileTransferDialog::RECEIVING); ftdialogs_in[peer_id] = ftd; - fsizes[peer_id] = file_size; fnames[peer_id] = filename; connect(ftd, SIGNAL(acceptedFile(QByteArray)), this, SLOT(file_accepted_by_me(QByteArray))); diff --git a/pica-client/filetransfercontroller.h b/pica-client/filetransfercontroller.h index f261605..99282c6 100644 --- a/pica-client/filetransfercontroller.h +++ b/pica-client/filetransfercontroller.h @@ -18,7 +18,6 @@ private: QMap<QByteArray, FileTransferDialog*> ftdialogs_in; QMap<QByteArray, FileTransferDialog*> ftdialogs_out; - QMap<QByteArray, quint64> fsizes; QMap<QByteArray, QString> fnames; @@ -40,6 +39,8 @@ public slots: void file_cancelled_outgoing(QByteArray peer_id); void file_ioerror_outgoing(QByteArray peer_id); + void file_finished_incoming(QByteArray peer_id); + //from me (file transfer dialog shown to user) to remote peer void file_accepted_by_me(QByteArray peer_id); void file_denied_by_me(QByteArray peer_id); @@ -49,6 +50,8 @@ public slots: void send_file(QByteArray peer_id); + void file_finished_outgoing(QByteArray peer_id); + }; #endif // FILETRANSFERCONTROLLER_H diff --git a/pica-client/skynet.cpp b/pica-client/skynet.cpp index 462ad02..6426538 100644 --- a/pica-client/skynet.cpp +++ b/pica-client/skynet.cpp @@ -28,7 +28,8 @@ PICA_client_callbacks cbs = { accepted_file_cb, denied_file_cb, file_progress, - file_control + file_control, + file_finished }; PICA_client_init(&cbs); @@ -565,6 +566,16 @@ void SkyNet::emit_OutgoingFileResumed(QByteArray peer_id) emit OutgoingFileResumed(peer_id); } +void SkyNet::emit_OutgoingFileFinished(QByteArray peer_id) +{ + emit OutgoingFileFinished(peer_id); +} + +void SkyNet::emit_IncomingFileFinished(QByteArray peer_id) +{ + emit IncomingFileFinished(peer_id); +} + //callbacks //all callbacks are executed in separate thread, created in Nodethread instance, REMEMBER THAT !!! @@ -616,7 +627,8 @@ void SkyNet::notfound_cb(const unsigned char *callee_id) void SkyNet::channel_closed_cb(const unsigned char *peer_id, int reason) { - qDebug()<<"channel closed ("<<QByteArray((const char*)peer_id, PICA_ID_SIZE).toBase64()<<")\n"; + qDebug()<<"channel closed ("<<QByteArray((const char*)peer_id, PICA_ID_SIZE).toBase64() + <<", error_code =" << reason << ")\n"; } @@ -713,3 +725,10 @@ void SkyNet::file_control(const unsigned char *peer_id, unsigned int sender_cmd, } } +void SkyNet::file_finished(const unsigned char *peer_id, int sending) +{ + if (sending) + skynet->emit_OutgoingFileFinished(QByteArray((const char *)peer_id, PICA_ID_SIZE)); + else + skynet->emit_IncomingFileFinished(QByteArray((const char *)peer_id, PICA_ID_SIZE)); +} diff --git a/pica-client/skynet.h b/pica-client/skynet.h index a053083..91eb2f1 100644 --- a/pica-client/skynet.h +++ b/pica-client/skynet.h @@ -51,6 +51,8 @@ signals: void OutgoingFileCancelled(QByteArray peer_id); void OutgoingFileIoError(QByteArray peer_id); void OutgoingFileResumed(QByteArray peer_id); + void OutgoingFileFinished(QByteArray peer_id); + void IncomingFileFinished(QByteArray peer_id); private: Nodes nodes; @@ -88,6 +90,8 @@ private: void emit_OutgoingFileIoError(QByteArray peer_id); void emit_OutgoingFileResumed(QByteArray peer_id); + void emit_OutgoingFileFinished(QByteArray peer_id); + void emit_IncomingFileFinished(QByteArray peer_id); //получение сообщения. static void newmsg_cb(const unsigned char *peer_id,const char* msgbuf,unsigned int nb,int type); @@ -118,6 +122,8 @@ private: static void file_control(const unsigned char *peer_id, unsigned int sender_cmd, unsigned int receiver_cmd); + static void file_finished(const unsigned char *peer_id, int sending); + private slots: void nodethread_finished(); void nodethread_connected(QString addr, quint16 port, NodeThread *thread); |
