diff options
| author | Stephen D. Huston <shuston@apache.org> | 2009-01-12 23:31:49 +0000 |
|---|---|---|
| committer | Stephen D. Huston <shuston@apache.org> | 2009-01-12 23:31:49 +0000 |
| commit | 968d7fd6a2edb1f99ffab980d8130abbd854adc5 (patch) | |
| tree | f3ccf11c71900cd2c2dc1a27592bc9e71c7b9486 /cpp/src/qpid/sys/windows/IocpPoller.cpp | |
| parent | 081b523538d7731c4c0128f90a6393720a7d4ecc (diff) | |
| download | qpid-python-968d7fd6a2edb1f99ffab980d8130abbd854adc5.tar.gz | |
Add support for AsynchIO::RequestCallback processing
git-svn-id: https://svn.apache.org/repos/asf/qpid/trunk/qpid@733966 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'cpp/src/qpid/sys/windows/IocpPoller.cpp')
| -rwxr-xr-x | cpp/src/qpid/sys/windows/IocpPoller.cpp | 24 |
1 files changed, 19 insertions, 5 deletions
diff --git a/cpp/src/qpid/sys/windows/IocpPoller.cpp b/cpp/src/qpid/sys/windows/IocpPoller.cpp index d23dafcd6e..1e24adfb46 100755 --- a/cpp/src/qpid/sys/windows/IocpPoller.cpp +++ b/cpp/src/qpid/sys/windows/IocpPoller.cpp @@ -43,16 +43,19 @@ class PollerHandlePrivate { SOCKET fd; AsynchIoResult::Completer cb; + AsynchIO::RequestCallback cbRequest; - PollerHandlePrivate(SOCKET f, AsynchIoResult::Completer cb0 = 0) : - fd(f), cb(cb0) + PollerHandlePrivate(SOCKET f, + AsynchIoResult::Completer cb0 = 0, + AsynchIO::RequestCallback rcb = 0) + : fd(f), cb(cb0), cbRequest(rcb) { } }; PollerHandle::PollerHandle(const IOHandle& h) : - impl(new PollerHandlePrivate(toFd(h.impl), h.impl->event)) + impl(new PollerHandlePrivate(toFd(h.impl), h.impl->event, h.impl->cbRequest)) {} PollerHandle::~PollerHandle() { @@ -114,8 +117,19 @@ void Poller::addFd(PollerHandle& handle, Direction dir) { QPID_WINDOWS_CHECK_NULL(iocpHandle); } else { - AsynchWriteWanted *result = new AsynchWriteWanted(handle.impl->cb); - PostQueuedCompletionStatus(impl->iocp, 0, 0, result->overlapped()); + // INPUT is used to request a callback; OUTPUT to request a write + assert(dir == Poller::INPUT || dir == Poller::OUTPUT); + + if (dir == Poller::OUTPUT) { + AsynchWriteWanted *result = new AsynchWriteWanted(handle.impl->cb); + PostQueuedCompletionStatus(impl->iocp, 0, 0, result->overlapped()); + } + else { + AsynchCallbackRequest *result = + new AsynchCallbackRequest(handle.impl->cb, + handle.impl->cbRequest); + PostQueuedCompletionStatus(impl->iocp, 0, 0, result->overlapped()); + } } } |
