Procházet zdrojové kódy

Eliminated static variable from LpdReceiveMessageCommand.

BtRegistry now holds LpdMessageReceiver.
Tatsuhiro Tsujikawa před 14 roky
rodič
revize
a6b7ef5f07

+ 7 - 0
src/BtRegistry.cc

@@ -41,6 +41,7 @@
 #include "BtRuntime.h"
 #include "BtProgressInfoFile.h"
 #include "bittorrent_helper.h"
+#include "LpdMessageReceiver.h"
 
 namespace aria2 {
 
@@ -95,6 +96,12 @@ void BtRegistry::removeAll() {
   pool_.clear();
 }
 
+void BtRegistry::setLpdMessageReceiver
+(const SharedHandle<LpdMessageReceiver>& receiver)
+{
+  lpdMessageReceiver_ = receiver;
+}
+
 BtObject::BtObject
 (const SharedHandle<DownloadContext>& downloadContext,
  const SharedHandle<PieceStorage>& pieceStorage,

+ 8 - 0
src/BtRegistry.h

@@ -50,6 +50,7 @@ class BtAnnounce;
 class BtRuntime;
 class BtProgressInfoFile;
 class DownloadContext;
+class LpdMessageReceiver;
 
 struct BtObject {
   SharedHandle<DownloadContext> downloadContext_;
@@ -81,6 +82,7 @@ class BtRegistry {
 private:
   std::map<a2_gid_t, BtObject> pool_;
   uint16_t tcpPort_;
+  SharedHandle<LpdMessageReceiver> lpdMessageReceiver_;
 public:
   BtRegistry();
   ~BtRegistry();
@@ -117,6 +119,12 @@ public:
   {
     return tcpPort_;
   }
+
+  void setLpdMessageReceiver(const SharedHandle<LpdMessageReceiver>& receiver);
+  const SharedHandle<LpdMessageReceiver>& getLpdMessageReceiver() const
+  {
+    return lpdMessageReceiver_;
+  }
 };
 
 } // namespace aria2

+ 7 - 7
src/BtSetup.cc

@@ -217,7 +217,7 @@ void BtSetup::setup(std::vector<Command*>& commands,
   if(option->getAsBool(PREF_BT_ENABLE_LPD) &&
      btReg->getTcpPort() &&
      (metadataGetMode || !torrentAttrs->privateTorrent)) {
-    if(LpdReceiveMessageCommand::getNumInstance() == 0) {
+    if(!btReg->getLpdMessageReceiver()) {
       A2_LOG_INFO("Initializing LpdMessageReceiver.");
       SharedHandle<LpdMessageReceiver> receiver
         (new LpdMessageReceiver(LPD_MULTICAST_ADDR, LPD_MULTICAST_PORT));
@@ -242,30 +242,30 @@ void BtSetup::setup(std::vector<Command*>& commands,
         }
       }
       if(initialized) {
+        btReg->setLpdMessageReceiver(receiver);
         A2_LOG_INFO(fmt("LpdMessageReceiver initialized. multicastAddr=%s:%u,"
                         " localAddr=%s",
                         LPD_MULTICAST_ADDR, LPD_MULTICAST_PORT,
                         receiver->getLocalAddress().c_str()));
         LpdReceiveMessageCommand* cmd =
-          LpdReceiveMessageCommand::getInstance(e, receiver);
+          new LpdReceiveMessageCommand(e->newCUID(), receiver, e);
         e->addCommand(cmd);
       } else {
         A2_LOG_INFO("LpdMessageReceiver not initialized.");
       }
     }
-    if(LpdReceiveMessageCommand::getNumInstance()) {
+    if(btReg->getLpdMessageReceiver()) {
       const unsigned char* infoHash =
         bittorrent::getInfoHash(requestGroup->getDownloadContext());
-      SharedHandle<LpdMessageReceiver> receiver =
-        LpdReceiveMessageCommand::getInstance()->getLpdMessageReceiver();
       A2_LOG_INFO("Initializing LpdMessageDispatcher.");      
       SharedHandle<LpdMessageDispatcher> dispatcher
         (new LpdMessageDispatcher
          (std::string(&infoHash[0], &infoHash[INFO_HASH_LENGTH]),
           btReg->getTcpPort(),
           LPD_MULTICAST_ADDR, LPD_MULTICAST_PORT));
-      if(dispatcher->init(receiver->getLocalAddress(), /*ttl*/1, /*loop*/0)) {
-        A2_LOG_INFO("LpdMessageDispatcher initialized.");      
+      if(dispatcher->init(btReg->getLpdMessageReceiver()->getLocalAddress(),
+                          /*ttl*/1, /*loop*/0)) {
+        A2_LOG_INFO("LpdMessageDispatcher initialized.");
         LpdDispatchMessageCommand* cmd =
           new LpdDispatchMessageCommand(e->newCUID(), dispatcher, e);
         cmd->setBtRuntime(btRuntime);

+ 0 - 28
src/LpdReceiveMessageCommand.cc

@@ -51,10 +51,6 @@
 
 namespace aria2 {
 
-unsigned int LpdReceiveMessageCommand::numInstance_ = 0;
-
-LpdReceiveMessageCommand* LpdReceiveMessageCommand::instance_ = 0;
-
 LpdReceiveMessageCommand::LpdReceiveMessageCommand
 (cuid_t cuid,
  const SharedHandle<LpdMessageReceiver>& receiver,
@@ -64,16 +60,11 @@ LpdReceiveMessageCommand::LpdReceiveMessageCommand
     e_(e)
 {
   e_->addSocketForReadCheck(receiver_->getSocket(), this);
-  ++numInstance_;
 }
 
 LpdReceiveMessageCommand::~LpdReceiveMessageCommand()
 {
   e_->deleteSocketForReadCheck(receiver_->getSocket(), this);
-  --numInstance_;
-  if(numInstance_ == 0) {
-    instance_ = 0;
-  }
 }
 
 bool LpdReceiveMessageCommand::execute()
@@ -123,23 +114,4 @@ bool LpdReceiveMessageCommand::execute()
   return false;
 }
 
-LpdReceiveMessageCommand*
-LpdReceiveMessageCommand::getInstance
-(DownloadEngine* e, const SharedHandle<LpdMessageReceiver>& receiver)
-{
-  if(numInstance_ == 0) {
-    instance_ = new LpdReceiveMessageCommand(e->newCUID(), receiver, e);
-  }
-  return instance_;
-}
-
-LpdReceiveMessageCommand* LpdReceiveMessageCommand::getInstance()
-{
-  if(numInstance_ == 0) {
-    return 0;
-  } else {
-    return instance_;
-  }
-}
-
 } // namespace aria2

+ 2 - 21
src/LpdReceiveMessageCommand.h

@@ -47,17 +47,11 @@ class SocketCore;
 class LpdReceiveMessageCommand:public Command {
 private:
   SharedHandle<LpdMessageReceiver> receiver_;
-
-  static unsigned int numInstance_;
-
-  static LpdReceiveMessageCommand* instance_;
-
+  DownloadEngine* e_;
+public:
   LpdReceiveMessageCommand
   (cuid_t cuid, const SharedHandle<LpdMessageReceiver>& receiver,
    DownloadEngine* e);
-
-  DownloadEngine* e_;
-public:
   virtual ~LpdReceiveMessageCommand();
 
   virtual bool execute();
@@ -66,19 +60,6 @@ public:
   {
     return receiver_;
   }
-
-  static LpdReceiveMessageCommand*
-  getInstance
-  (DownloadEngine* e, const SharedHandle<LpdMessageReceiver>& receiver);
-
-  // If numInstance_ is 0, then return 0. If numInstance_ > 0, it
-  // returns instance_
-  static LpdReceiveMessageCommand* getInstance();
-
-  static unsigned int getNumInstance()
-  {
-    return numInstance_;
-  }
 };
 
 } // namespace aria2