[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.
|