summaryrefslogtreecommitdiff
path: root/cpp/src/qpid/sys/windows/AsynchIO.cpp
diff options
context:
space:
mode:
authorStephen D. Huston <shuston@apache.org>2008-10-30 23:18:07 +0000
committerStephen D. Huston <shuston@apache.org>2008-10-30 23:18:07 +0000
commit18af9009d719ce758678185ae0a57967da5ca6fe (patch)
treea291bdc0dc2e139249ddad5c0bb883fe8dde426a /cpp/src/qpid/sys/windows/AsynchIO.cpp
parent5d74de00280c14e33964b099d6658a147479b4ca (diff)
downloadqpid-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.cpp38
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