diff options
| author | Stephen D. Huston <shuston@apache.org> | 2008-10-30 23:18:07 +0000 |
|---|---|---|
| committer | Stephen D. Huston <shuston@apache.org> | 2008-10-30 23:18:07 +0000 |
| commit | 18af9009d719ce758678185ae0a57967da5ca6fe (patch) | |
| tree | a291bdc0dc2e139249ddad5c0bb883fe8dde426a /cpp/src/qpid/sys/windows/AsynchIO.cpp | |
| parent | 5d74de00280c14e33964b099d6658a147479b4ca (diff) | |
| download | qpid-python-18af9009d719ce758678185ae0a57967da5ca6fe.tar.gz | |
Resolve Time diffs for Windows; add Windows version of asynch I/O layer. Resolves QPID-1209
git-svn-id: https://svn.apache.org/repos/asf/incubator/qpid/trunk/qpid@709285 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'cpp/src/qpid/sys/windows/AsynchIO.cpp')
| -rw-r--r-- | cpp/src/qpid/sys/windows/AsynchIO.cpp | 38 |
1 files changed, 27 insertions, 11 deletions
diff --git a/cpp/src/qpid/sys/windows/AsynchIO.cpp b/cpp/src/qpid/sys/windows/AsynchIO.cpp index bde1213131..e5efc874aa 100644 --- a/cpp/src/qpid/sys/windows/AsynchIO.cpp +++ b/cpp/src/qpid/sys/windows/AsynchIO.cpp @@ -32,6 +32,7 @@ #include <boost/thread/once.hpp> +#include <queue> #include <winsock2.h> #include <mswsock.h> #include <windows.h> @@ -147,7 +148,7 @@ void AsynchAcceptorPrivate::start(Poller::shared_ptr poller) { restart (); } -void AsynchAcceptor::restart(void) { +void AsynchAcceptorPrivate::restart(void) { DWORD bytesReceived = 0; // Not used, needed for AcceptEx API AsynchAcceptResult *result = new AsynchAcceptResult(acceptedCallback, this, @@ -166,7 +167,7 @@ void AsynchAcceptor::restart(void) { AsynchAcceptResult::AsynchAcceptResult(AsynchAcceptor::Callback cb, - AsynchAcceptor *acceptor, + AsynchAcceptorPrivate *acceptor, SOCKET listener) : callback(cb), acceptor(acceptor), listener(listener) { newSocket.reset (new Socket()); @@ -318,21 +319,27 @@ private: volatile bool queuedClose; private: - void close(void); + // Dispatch events that have completed. + void dispatchReadComplete(AsynchIO::BufferBase *buffer); + void notifyEof(void); + void notifyDisconnect(void); + void notifyClosed(void); + void notifyBuffersEmpty(void); + void notifyIdle(void); /** * Initiate a read operation. AsynchIO::dispatchReadComplete() will be * called when the read is complete and data is available. */ - virtual void startRead(void); + void startRead(void); /** * Initiate a write of the specified buffer. There's no callback for * write completion to the AsynchIO object. */ - virtual void startWrite(AsynchIO::BufferBase* buff); + void startWrite(AsynchIO::BufferBase* buff); - virtual bool writesNotComplete(); + void close(void); /** * readComplete is called when a read request is complete. @@ -602,10 +609,6 @@ void AsynchIO::startWrite(AsynchIO::BufferBase* buff) { return; } -bool AsynchIO::writesNotComplete() { - return writeInProgress; -} - /* * Close the socket and callback to say we've done it */ @@ -726,4 +729,17 @@ void AsynchIO::completion(AsynchIoResult *result) { delete this; } -}} // namespace qpid::windows +} // namespace windows + +AsynchIO* qpid::sys::AsynchIO::create(const Socket& s, + AsynchIO::ReadCallback rCb, + AsynchIO::EofCallback eofCb, + AsynchIO::DisconnectCallback disCb, + AsynchIO::ClosedCallback cCb, + AsynchIO::BuffersEmptyCallback eCb, + AsynchIO::IdleCallback iCb) +{ + return new qpid::sys::windows::AsynchIO(s, rCb, eofCb, disCb, cCb, eCb, iCb); +} + +}} // namespace qpid::sys |
