qpid-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Steve Huston <shus...@riverace.com>
Subject Re: Review Request: Provides the EventNotifier type, plus example agent and unit test.
Date Mon, 22 Aug 2011 17:46:43 GMT
FWIW, WSAPoll is not available on XP; it was introduced at Vista.

----- Original Message -----
From: "Darryl Pierce" <dpierce@redhat.com>
To: "Ted Ross" <tross@apache.org>, "Kenneth Giusti" <kgiusti@apache.org>, "michael
goulish" <mgoulish@redhat.com>
Cc: "Andrew Stitcher" <astitcher@apache.org>, "Darryl Pierce" <dpierce@redhat.com>,
"qpid" <dev@qpid.apache.org>
Sent: Monday, August 22, 2011 10:37:02 AM
Subject: Re: Review Request: Provides the EventNotifier type, plus example agent and unit
test.



> On 2011-08-19 21:47:12, Kenneth Giusti wrote:
> > trunk/qpid/cpp/src/qmf/EventNotifierImpl.h, line 36
> > <https://reviews.apache.org/r/1557/diff/1/?file=33112#file33112line36>
> >
> >     May I make a suggestion - take a look at qpid::sys::IOHandle in the qpid code.
 This is an abstract class that hides the OS-specific bits (fd/Socket) pretty well.  We could
do something _like_ that here - add another level of abstraction by having getHandle() return
a class instead of an 'int'.
> >     
> >     Or, perhaps not as "pretty" just typedef the return value using different OS-specific
conditional compile:
> >     
> >     #if defined(_WIN32)
> >     #include <whatever windoze headers>
> >     typedef <whatever windoze stuff> IOHandle;
> >     #else
> >     typedef int IOHandle;
> >     #endif
> >     
> >     then we define:
> >     
> >     IOHandle getHandle() const;
> >     
> >     
> >
> 
> Andrew Stitcher wrote:
>     The trouble is copying IOHandle can't help you!
>     
>     Ultimately providing an OS specific handle from an OS independent abstraction can't
be done in an OS independent way. You always need to have a particular API with an OS specific
signature to return the OS specific handle so you can use that handle together with your other
application specific handling, at the very least the operation of returning an OS handle from
an IOHandle is a non-portable part of the API.
>     
>     I suppose if that is the only non-portable part of the API then you're in a better
shape than before, and it may be possible to do something clever(ish) with templates to avoid
the actual header files being different so that might be a direction:
>     
>     Something like:
>     
>     template <typename OSHandle>
>     OSHandle getOSHandle(IOHandle&);
>     
>     and then define
>     
>     template int getOSHandle<int>(IOHandle&); for unix and
>     template HANDLE getOSHandle<HANDLE>(IOHandle&); for Windows.
>     
>     - Completely untested thoughts - worth practically what you paid for them.
>

There is a WSAPoll() API [1] that's available in Windows that takes a file handle ala poll().

[1] - http://msdn.microsoft.com/en-us/library/ms741669%28v=vs.85%29.aspx


- Darryl


-----------------------------------------------------------
This is an automatically generated e-mail. To reply, visit:
https://reviews.apache.org/r/1557/#review1569
-----------------------------------------------------------


On 2011-08-19 18:30:06, Darryl Pierce wrote:
> 
> -----------------------------------------------------------
> This is an automatically generated e-mail. To reply, visit:
> https://reviews.apache.org/r/1557/
> -----------------------------------------------------------
> 
> (Updated 2011-08-19 18:30:06)
> 
> 
> Review request for qpid, Kenneth Giusti, michael goulish, and Ted Ross.
> 
> 
> Summary
> -------
> 
> Provides a new method for providing notification to an interested party when new messages
are received.
> 
> The EventNotifier class can be associated with either a console or agent session. The
object provides a file descriptor which then becomes readable when there are messages to be
processed.
> 
> This implementation only supports Posix. There is some work necessary to get a Windows
implementation in place.
> 
> 
> Diffs
> -----
> 
>   trunk/qpid/cpp/bindings/qmf2/examples/cpp/Makefile.am 1159329 
>   trunk/qpid/cpp/bindings/qmf2/examples/cpp/event_driven_list_agents.cpp PRE-CREATION

>   trunk/qpid/cpp/include/qmf/AgentSession.h 1159329 
>   trunk/qpid/cpp/include/qmf/ConsoleSession.h 1159329 
>   trunk/qpid/cpp/include/qmf/EventNotifier.h PRE-CREATION 
>   trunk/qpid/cpp/src/CMakeLists.txt 1159329 
>   trunk/qpid/cpp/src/qmf.mk 1159329 
>   trunk/qpid/cpp/src/qmf/AgentSession.cpp 1159329 
>   trunk/qpid/cpp/src/qmf/AgentSessionImpl.h PRE-CREATION 
>   trunk/qpid/cpp/src/qmf/ConsoleSession.cpp 1159329 
>   trunk/qpid/cpp/src/qmf/ConsoleSessionImpl.h 1159329 
>   trunk/qpid/cpp/src/qmf/EventNotifier.cpp PRE-CREATION 
>   trunk/qpid/cpp/src/qmf/EventNotifierImpl.h PRE-CREATION 
>   trunk/qpid/cpp/src/qmf/EventNotifierImpl.cpp PRE-CREATION 
>   trunk/qpid/cpp/src/qmf/PosixEventNotifierImpl.cpp PRE-CREATION 
>   trunk/qpid/cpp/src/tests/EventNotifierTest.cpp PRE-CREATION 
>   trunk/qpid/cpp/src/tests/Makefile.am 1159329 
> 
> Diff: https://reviews.apache.org/r/1557/diff
> 
> 
> Testing
> -------
> 
> An example agent takes the existing list_agents and uses an EventNotifier to respond
to incoming messages rather than blocking on the ConsoleSession.nextReceiver() API.
> 
> A unit test verifies that the file handle provides by the EventNotifier type is properly
updating on incoming messgaes.
> 
> 
> Thanks,
> 
> Darryl
> 
>


---------------------------------------------------------------------
Apache Qpid - AMQP Messaging Implementation
Project:      http://qpid.apache.org
Use/Interact: mailto:dev-subscribe@qpid.apache.org


Mime
View raw message