mirror of https://github.com/aria2/aria2
Eliminated static variable from LpdReceiveMessageCommand.
BtRegistry now holds LpdMessageReceiver.pull/1/head
parent
97f76b7cf4
commit
a6b7ef5f07
|
@ -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,
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
Loading…
Reference in New Issue