diff options
author | Andrew Stitcher <astitcher@apache.org> | 2008-04-18 21:03:49 +0000 |
---|---|---|
committer | Andrew Stitcher <astitcher@apache.org> | 2008-04-18 21:03:49 +0000 |
commit | df28afb19a10c804cd02696bd94b09fed1719478 (patch) | |
tree | 9aafbc5ee664b561257cebe8edd2c46955b0999d /cpp/src/qpid/broker/Broker.cpp | |
parent | 8633240562fad63a493b319d12b9c663ca081c75 (diff) | |
download | qpid-python-df28afb19a10c804cd02696bd94b09fed1719478.tar.gz |
Refactored Acceptor code to allow multiple acceptors to be present in the broker
git-svn-id: https://svn.apache.org/repos/asf/incubator/qpid/trunk/qpid@649689 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'cpp/src/qpid/broker/Broker.cpp')
-rw-r--r-- | cpp/src/qpid/broker/Broker.cpp | 47 |
1 files changed, 32 insertions, 15 deletions
diff --git a/cpp/src/qpid/broker/Broker.cpp b/cpp/src/qpid/broker/Broker.cpp index 9773b49b93..c32a8f889e 100644 --- a/cpp/src/qpid/broker/Broker.cpp +++ b/cpp/src/qpid/broker/Broker.cpp @@ -260,8 +260,7 @@ void Broker::setStore (MessageStore* _store) } void Broker::run() { - - getAcceptor().run(poller, &factory); + accept(); Dispatcher d(poller); int numIOThreads = config.workerThreads; @@ -298,18 +297,6 @@ Broker::~Broker() { } } -uint16_t Broker::getPort() const { return getAcceptor().getPort(); } - -Acceptor& Broker::getAcceptor() const { - if (!acceptor) { - const_cast<Acceptor::shared_ptr&>(acceptor) = - Acceptor::create(config.port, - config.connectionBacklog); - QPID_LOG(info, "Listening on port " << getPort()); - } - return *acceptor; -} - ManagementObject::shared_ptr Broker::GetManagementObject(void) const { return dynamic_pointer_cast<ManagementObject> (mgmtObject); @@ -348,11 +335,41 @@ Manageable::status_t Broker::ManagementMethod (uint32_t methodId, return status; } +boost::shared_ptr<Acceptor> Broker::getAcceptor() const { + assert(acceptors.size() > 0); +#if 0 + if (!acceptor) { + const_cast<Acceptor::shared_ptr&>(acceptor) = + Acceptor::create(config.port, + config.connectionBacklog); + QPID_LOG(info, "Listening on port " << getPort()); + } +#endif + return acceptors[0]; +} + +void Broker::registerAccepter(Acceptor::shared_ptr acceptor) { + acceptors.push_back(acceptor); +} + +// TODO: This can only work if there is only one acceptor +uint16_t Broker::getPort() const { + return getAcceptor()->getPort(); +} + +// TODO: This should iterate over all acceptors +void Broker::accept() { + for (unsigned int i = 0; i < acceptors.size(); ++i) + acceptors[i]->run(poller, &factory); +} + + +// TODO: How to chose the acceptor to use for the connection void Broker::connect( const std::string& host, uint16_t port, sys::ConnectionCodec::Factory* f) { - getAcceptor().connect(poller, host, port, f ? f : &factory); + getAcceptor()->connect(poller, host, port, f ? f : &factory); } void Broker::connect( |