[prev in list] [next in list] [prev in thread] [next in thread]
List: kde-commits
Subject: extragear/network/ktorrent/libbtcore
From: Joris Guisson <joris.guisson () gmail ! com>
Date: 2009-01-16 13:51:41
Message-ID: 1232113901.953026.20723.nullmailer () svn ! kde ! org
[Download RAW message or body]
SVN commit 911999 by guisson:
Stop using signal to pass packets from peer to downloader
M +2 -2 download/downloader.cpp
M +3 -2 download/downloader.h
M +1 -7 interfaces/piecedownloader.h
M +2 -0 peer/peer.cpp
M +0 -3 peer/peerdownloader.cpp
M +6 -1 peer/peerdownloader.h
M +12 -0 peer/peermanager.cpp
M +16 -0 peer/peermanager.h
--- trunk/extragear/network/ktorrent/libbtcore/download/downloader.cpp #911998:911999
@@ -50,6 +50,8 @@
Downloader::Downloader(Torrent & tor,PeerManager & pman,ChunkManager & \
cman,ChunkSelectorFactoryInterface* fac) : \
tor(tor),pman(pman),cman(cman),downloaded(0),tmon(0),chunk_selector(0) {
+ pman.setPieceHandler(this);
+
if (!fac) // check if a custom one was provided, if not create a default one
chunk_selector = new ChunkSelector(cman,*this,pman);
else
@@ -354,8 +356,6 @@
void Downloader::onNewPeer(Peer* peer)
{
PieceDownloader* pd = peer->getPeerDownloader();
- connect(pd,SIGNAL(downloaded(const bt::Piece& )),
- this,SLOT(pieceReceived(const bt::Piece& )));
piece_downloaders.append(pd);
}
--- trunk/extragear/network/ktorrent/libbtcore/download/downloader.h #911998:911999
@@ -24,6 +24,7 @@
#include <util/ptrmap.h>
#include <util/constants.h>
#include <btcore_export.h>
+#include "peer/peermanager.h"
class KUrl;
@@ -64,7 +65,7 @@
* This class manages the downloading of the file. It should
* regurarly be updated.
*/
- class BTCORE_EXPORT Downloader : public QObject
+ class BTCORE_EXPORT Downloader : public QObject,public PieceHandler
{
Q_OBJECT
@@ -217,7 +218,7 @@
void recalcDownloaded();
private slots:
- void pieceReceived(const bt::Piece & p);
+ virtual void pieceReceived(const bt::Piece & p);
bool finished(ChunkDownload* c);
/**
--- trunk/extragear/network/ktorrent/libbtcore/interfaces/piecedownloader.h \
#911998:911999 @@ -122,14 +122,8 @@
*/
virtual void checkTimeouts() = 0;
- signals:
+ signals:
/**
- * Emitted when a Piece has been downloaded.
- * @param p The Piece
- */
- void downloaded(const bt::Piece & p);
-
- /**
* Emitted when a request takes longer then 60 seconds to download.
* The sender of the request will have to request it again. This does not apply \
for
* unsent requests. Their timestamps will be updated when they get transmitted.
--- trunk/extragear/network/ktorrent/libbtcore/peer/peer.cpp #911998:911999
@@ -266,6 +266,8 @@
ReadUint32(tmp_buf,5),
len - 9,downloader,tmp_buf+9);
downloader->piece(p);
+ pman->pieceReceived(p);
+ downloader->update();
}
break;
case CANCEL:
--- trunk/extragear/network/ktorrent/libbtcore/peer/peerdownloader.cpp #911998:911999
@@ -171,9 +171,6 @@
wait_queue.removeAll(r);
else if (reqs.contains(r))
reqs.removeAll(r);
-
- downloaded(p);
- update();
}
void PeerDownloader::peerDestroyed()
--- trunk/extragear/network/ktorrent/libbtcore/peer/peerdownloader.h #911998:911999
@@ -175,10 +175,15 @@
*/
void onRejected(const Request & req);
+ /**
+ * Send requests and manage wait queue
+ */
+ void update();
+
private slots:
void peerDestroyed();
- void update();
+
private:
Peer* peer;
QList<TimeStampedRequest> reqs;
--- trunk/extragear/network/ktorrent/libbtcore/peer/peermanager.cpp #911998:911999
@@ -62,6 +62,7 @@
cnt = new ChunkCounter(tor.getNumChunks());
num_pending = 0;
pex_on = !tor.isPrivate();
+ piece_handler = 0;
}
@@ -661,6 +662,17 @@
p->setGroupIDs(up,down);
}
}
+
+ void PeerManager::pieceReceived(const Piece & p)
+ {
+ if (piece_handler)
+ piece_handler->pieceReceived(p);
+ }
+
+ void PeerManager::setPieceHandler(PieceHandler* ph)
+ {
+ piece_handler = ph;
+ }
}
#include "peermanager.moc"
--- trunk/extragear/network/ktorrent/libbtcore/peer/peermanager.h #911998:911999
@@ -43,6 +43,7 @@
namespace bt
{
+ class Piece;
class Peer;
class Torrent;
class Authenticate;
@@ -54,6 +55,15 @@
const Uint32 MAX_SIMULTANIOUS_AUTHS = 20;
+
+ /// Base class for handling pieces
+ class BTCORE_EXPORT PieceHandler
+ {
+ public:
+ virtual ~PieceHandler() {}
+
+ virtual void pieceReceived(const Piece & p) = 0;
+ };
/**
* @author Joris Guisson
@@ -231,6 +241,11 @@
/// A PEX message was received
void pex(const QByteArray & arr);
+ /// A Piece was received
+ void pieceReceived(const Piece & p);
+
+ /// Set the piece handler
+ void setPieceHandler(PieceHandler* ph);
public slots:
/**
* A PeerSource, has new potential peers.
@@ -263,6 +278,7 @@
Uint32 num_pending;
bool pex_on;
bool wanted_changed;
+ PieceHandler* piece_handler;
static Uint32 max_connections;
static Uint32 max_total_connections;
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic