Author: astitcher
Date: Thu Jan 21 06:15:06 2010
New Revision: 901547
URL: http://svn.apache.org/viewvc?rev=901547&view=rev
Log:
Split out AsynchConnecter::start from constructor (like other AsynchIO classes)
Modified:
qpid/trunk/qpid/cpp/src/qpid/client/TCPConnector.cpp
qpid/trunk/qpid/cpp/src/qpid/sys/AsynchIO.h
qpid/trunk/qpid/cpp/src/qpid/sys/TCPIOPlugin.cpp
qpid/trunk/qpid/cpp/src/qpid/sys/posix/AsynchIO.cpp
qpid/trunk/qpid/cpp/src/qpid/sys/windows/AsynchIO.cpp
Modified: qpid/trunk/qpid/cpp/src/qpid/client/TCPConnector.cpp
URL:
http://svn.apache.org/viewvc/qpid/trunk/qpid/cpp/src/qpid/client/TCPConnector.cpp?rev=901547&r1=901546&r2=901547&view=diff
==============================================================================
--- qpid/trunk/qpid/cpp/src/qpid/client/TCPConnector.cpp (original)
+++ qpid/trunk/qpid/cpp/src/qpid/client/TCPConnector.cpp Thu Jan 21 06:15:06
2010
@@ -91,14 +91,15 @@
assert(closed);
assert(joined);
poller = Poller::shared_ptr(new Poller);
+ AsynchConnector* c =
AsynchConnector::create(socket,
- poller,
host, port,
boost::bind(&TCPConnector::connected, this, _1),
boost::bind(&TCPConnector::connectFailed, this,
_3));
closed = false;
joined = false;
receiver = Thread(this);
+ c->start(poller);
}
void TCPConnector::connected(const Socket&) {
Modified: qpid/trunk/qpid/cpp/src/qpid/sys/AsynchIO.h
URL:
http://svn.apache.org/viewvc/qpid/trunk/qpid/cpp/src/qpid/sys/AsynchIO.h?rev=901547&r1=901546&r2=901547&view=diff
==============================================================================
--- qpid/trunk/qpid/cpp/src/qpid/sys/AsynchIO.h (original)
+++ qpid/trunk/qpid/cpp/src/qpid/sys/AsynchIO.h Thu Jan 21 06:15:06 2010
@@ -61,11 +61,11 @@
// deletes. To correctly manage heaps when needed, the allocate and
// delete should both be done from the same class/library.
QPID_COMMON_EXTERN static AsynchConnector* create(const Socket& s,
- boost::shared_ptr<Poller> poller,
std::string hostname,
uint16_t port,
ConnectedCallback connCb,
FailedCallback failCb);
+ virtual void start(boost::shared_ptr<Poller> poller) = 0;
protected:
AsynchConnector() {}
Modified: qpid/trunk/qpid/cpp/src/qpid/sys/TCPIOPlugin.cpp
URL:
http://svn.apache.org/viewvc/qpid/trunk/qpid/cpp/src/qpid/sys/TCPIOPlugin.cpp?rev=901547&r1=901546&r2=901547&view=diff
==============================================================================
--- qpid/trunk/qpid/cpp/src/qpid/sys/TCPIOPlugin.cpp (original)
+++ qpid/trunk/qpid/cpp/src/qpid/sys/TCPIOPlugin.cpp Thu Jan 21 06:15:06 2010
@@ -141,14 +141,15 @@
// is no longer needed.
Socket* socket = new Socket();
- AsynchConnector::create(*socket,
- poller,
- host,
- port,
- boost::bind(&AsynchIOProtocolFactory::established,
- this, poller, _1, fact, true),
-
boost::bind(&AsynchIOProtocolFactory::connectFailed,
- this, _1, _2, _3, failed));
+ AsynchConnector* c = AsynchConnector::create(
+ *socket,
+ host,
+ port,
+ boost::bind(&AsynchIOProtocolFactory::established,
+ this, poller, _1, fact, true),
+ boost::bind(&AsynchIOProtocolFactory::connectFailed,
+ this, _1, _2, _3, failed));
+ c->start(poller);
}
}} // namespace qpid::sys
Modified: qpid/trunk/qpid/cpp/src/qpid/sys/posix/AsynchIO.cpp
URL:
http://svn.apache.org/viewvc/qpid/trunk/qpid/cpp/src/qpid/sys/posix/AsynchIO.cpp?rev=901547&r1=901546&r2=901547&view=diff
==============================================================================
--- qpid/trunk/qpid/cpp/src/qpid/sys/posix/AsynchIO.cpp (original)
+++ qpid/trunk/qpid/cpp/src/qpid/sys/posix/AsynchIO.cpp Thu Jan 21 06:15:06 2010
@@ -154,15 +154,14 @@
public:
AsynchConnector(const Socket& socket,
- Poller::shared_ptr poller,
std::string hostname,
uint16_t port,
ConnectedCallback connCb,
FailedCallback failCb);
+ void start(Poller::shared_ptr poller);
};
AsynchConnector::AsynchConnector(const Socket& s,
- Poller::shared_ptr poller,
std::string hostname,
uint16_t port,
ConnectedCallback connCb,
@@ -180,13 +179,18 @@
try {
socket.connect(sa);
} catch(std::exception& e) {
- // Defer reporting failure
- startWatch(poller);
+ // Defer reporting failure till we start polling
errMsg = e.what();
- DispatchHandle::call(boost::bind(&AsynchConnector::failure, this, -1,
errMsg));
- return;
}
+}
+
+void AsynchConnector::start(Poller::shared_ptr poller)
+{
startWatch(poller);
+ // If we previously detected an error insert failure callback now
+ if ( !errMsg.empty() ) {
+ DispatchHandle::call(boost::bind(&AsynchConnector::failure, this, -1,
errMsg));
+ }
}
void AsynchConnector::connComplete(DispatchHandle& h)
@@ -600,13 +604,12 @@
}
AsynchConnector* AsynchConnector::create(const Socket& s,
- Poller::shared_ptr poller,
std::string hostname,
uint16_t port,
ConnectedCallback connCb,
FailedCallback failCb)
{
- return new posix::AsynchConnector(s, poller, hostname, port, connCb,
failCb);
+ return new posix::AsynchConnector(s, hostname, port, connCb, failCb);
}
AsynchIO* AsynchIO::create(const Socket& s,
Modified: qpid/trunk/qpid/cpp/src/qpid/sys/windows/AsynchIO.cpp
URL:
http://svn.apache.org/viewvc/qpid/trunk/qpid/cpp/src/qpid/sys/windows/AsynchIO.cpp?rev=901547&r1=901546&r2=901547&view=diff
==============================================================================
--- qpid/trunk/qpid/cpp/src/qpid/sys/windows/AsynchIO.cpp (original)
+++ qpid/trunk/qpid/cpp/src/qpid/sys/windows/AsynchIO.cpp Thu Jan 21 06:15:06
2010
@@ -172,23 +172,30 @@
ConnectedCallback connCallback;
FailedCallback failCallback;
const Socket& socket;
+ const std::string hostname;
+ const uint16_t port;
public:
AsynchConnector(const Socket& socket,
- Poller::shared_ptr poller,
std::string hostname,
uint16_t port,
ConnectedCallback connCb,
FailedCallback failCb = 0);
+ void start(Poller::shared_ptr poller);
};
AsynchConnector::AsynchConnector(const Socket& sock,
- Poller::shared_ptr poller,
- std::string hostname,
- uint16_t port,
+ std::string hname,
+ uint16_t p,
ConnectedCallback connCb,
- FailedCallback failCb)
- : connCallback(connCb), failCallback(failCb), socket(sock) {
+ FailedCallback failCb) :
+ connCallback(connCb), failCallback(failCb), socket(sock),
+ hostname(hname), port(p)
+{
+}
+
+AsynchConnector::start(Poller::shared_ptr)
+{
try {
socket.connect(hostname, port);
socket.setNonblocking();
---------------------------------------------------------------------
Apache Qpid - AMQP Messaging Implementation
Project: http://qpid.apache.org
Use/Interact: mailto:[email protected]