[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