[asycxx-devel] SF.net SVN: asycxx:[39] trunk
Status: Alpha
Brought to you by:
joe_steeve
From: <joe...@us...> - 2009-04-08 07:40:46
|
Revision: 39 http://asycxx.svn.sourceforge.net/asycxx/?rev=39&view=rev Author: joe_steeve Date: 2009-04-08 07:40:45 +0000 (Wed, 08 Apr 2009) Log Message: ----------- moved class:SelectReactor to 'asycxx' namespace * also added minor refactor to support changes in class:Reactor From: Joe Steeve <js...@hi...> Modified Paths: -------------- trunk/include/asycxx/SelectReactor.h trunk/src/SelectReactor.cxx Modified: trunk/include/asycxx/SelectReactor.h =================================================================== --- trunk/include/asycxx/SelectReactor.h 2009-04-08 07:39:49 UTC (rev 38) +++ trunk/include/asycxx/SelectReactor.h 2009-04-08 07:40:45 UTC (rev 39) @@ -19,30 +19,43 @@ #include <sys/select.h> +#include "Selectable.h" #include "Reactor.h" -class SelectReactor :public Reactor +namespace asycxx { + /** + * + */ + class SelectReactor :public Reactor + { + public: + SelectReactor (void); + virtual ~SelectReactor (void); -public: - SelectReactor (void); - ~SelectReactor (void); + protected: + /* Overridden methods */ + int WaitForEvents (void); + void ProcessEvents (void); -protected: - void WaitForEvents (void); - void ProcessFDEvents (void); + private: + /* counts maintained for 'select()' */ + int m_maxFd; + int m_FdCount; -private: - int m_maxFd; - int m_FdCount; - fd_set m_FdsForReading; - bool m_bReadingFdSetIsEmpty; - fd_set m_FdsForWriting; - bool m_bWritingFdSetIsEmpty; - - void BuildFdSets (void); -}; + /* fd-sets for 'select()' */ + fd_set m_FdsForReading; + fd_set m_FdsForWriting; + /* helper bools to track if a given fd-set is empty */ + bool m_bReadingFdSetIsEmpty; + bool m_bWritingFdSetIsEmpty; + + /* helper function to build the fd-sets */ + void BuildFdSets (void); + }; +} + #endif /* __HIPRO_ASYCXX__SELECT_REACTOR_H__ */ /* Modified: trunk/src/SelectReactor.cxx =================================================================== --- trunk/src/SelectReactor.cxx 2009-04-08 07:39:49 UTC (rev 38) +++ trunk/src/SelectReactor.cxx 2009-04-08 07:40:45 UTC (rev 39) @@ -23,10 +23,10 @@ #include <asycxx/Error.h> #include <asycxx/SelectReactor.h> +using namespace asycxx; -/** - * \brief ctor - * +/* + * CTOR */ SelectReactor::SelectReactor (void) { @@ -38,9 +38,8 @@ } -/** - * \brief dtor - * +/* + * DTOR */ SelectReactor::~SelectReactor (void) { @@ -48,16 +47,14 @@ } -/** - * \brief Wait for file-descriptor events till some time-out - * - * \details This method uses the select() system call to wait till - * some of the file-descriptors become readable/writable. This method - * blocks waiting for events for a maximum of TIME_SENSITIVITY +/* + * This method uses the select() system call to wait till some of the + * file-descriptors become readable/writable. This method blocks + * waiting for events for a maximum of TIME_SENSITIVITY * milli-seconds. This method updates the m_PendingEvents to show how * many file-descriptors need action on. */ -void +int SelectReactor::WaitForEvents (void) { int iret; @@ -71,11 +68,13 @@ else { rfds = &m_FdsForReading; } if (m_bWritingFdSetIsEmpty == true) { wfds = NULL; } else { wfds = &m_FdsForWriting; } + /* make sure we are waiting for something */ if ((m_bReadingFdSetIsEmpty == true) && (m_bWritingFdSetIsEmpty == true)) { LOG3 ("<%p>: Who are we waiting for??", this); } + /* wake-up time. we are not sleeping forever */ tv.tv_sec = 0L; tv.tv_usec = (TIME_SENSITIVITY * 1000); @@ -89,19 +88,20 @@ this, strerror (errno), m_FdCount); } } - /* update the pending file-descriptor events */ - m_PendingFDEvents = iret; + + /* return the pending file-descriptor events */ + return iret; } -/** - * \brief Builds file-descriptor sets for select () +/* + * Builds file-descriptor sets for select () */ void SelectReactor::BuildFdSets (void) { - size_t i; - Reactor::Event * e; + Reactor::Event * ev; + std::list<Event *>::iterator it; m_bReadingFdSetIsEmpty = true; m_bWritingFdSetIsEmpty = true; @@ -111,18 +111,18 @@ FD_ZERO (&m_FdsForReading); FD_ZERO (&m_FdsForWriting); - for (i=0; i<m_readEvents.size(); i++) + for (it = m_readEvents.begin(); it != m_readEvents.end(); it++) { - e = m_readEvents[i]; - FD_SET (e->m_Fd, &m_FdsForReading); - if (m_maxFd < e->m_Fd) { m_maxFd = e->m_Fd; } + ev = *it; + FD_SET (ev->Fd, &m_FdsForReading); + if (m_maxFd < ev->Fd) { m_maxFd = ev->Fd; } m_FdCount ++; } - for (i=0; i<m_writeEvents.size(); i++) + for (it = m_writeEvents.begin(); it != m_writeEvents.end(); it++) { - e = m_writeEvents[i]; - FD_SET (e->m_Fd, &m_FdsForWriting); - if (m_maxFd < e->m_Fd) { m_maxFd = e->m_Fd; } + ev = *it; + FD_SET (ev->Fd, &m_FdsForWriting); + if (m_maxFd < ev->Fd) { m_maxFd = ev->Fd; } m_FdCount ++; } m_maxFd++; @@ -132,47 +132,40 @@ } -/** - * \brief Process the pending file-descriptor events - * - * \details This method looks up the FDSETs setup by the select() - * system call and triggers the appropriate event. +/* + * This method looks up the FDSETs setup by the select() system call + * and triggers the appropriate events. */ void -SelectReactor::ProcessFDEvents (void) +SelectReactor::ProcessEvents (void) { - size_t i; - Reactor::Event * e; + Reactor::Event * ev; fd_set *read_fds, *write_fds; + std::list<Event *>::iterator it; read_fds = &m_FdsForReading; write_fds = &m_FdsForWriting; - /* check for readable descriptors */ - for (i=0; i<m_readEvents.size(); i++) + /* check the readers list for 'Readable's */ + for (it = m_readEvents.begin(); it != m_readEvents.end(); it++) { - e = m_readEvents[i]; - if (FD_ISSET (e->m_Fd, read_fds)) - { - DoFDEventNotification (e); + ev = *it; + if (FD_ISSET (ev->Fd, read_fds)) + { + /* Notify that the 'Selectable' is now readable */ + ev->pSelectable->Readable(); } - else - { - DoFDTimeoutNotification (e); - } } + /* check for writable descriptors */ - for (i=0; i<m_writeEvents.size(); i++) + for (it = m_writeEvents.begin(); it != m_writeEvents.end(); it++) { - e = m_writeEvents[i]; - if (FD_ISSET (e->m_Fd, write_fds)) + ev = *it; + if (FD_ISSET (ev->Fd, write_fds)) { - DoFDEventNotification (e); + /* Notify that the 'Selectable' is now writable */ + ev->pSelectable->Writable(); } - else - { - DoFDTimeoutNotification (e); - } } } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |