+class EventHandler : public Extensible
+{
+ protected:
+ /** File descriptor.
+ * All events which can be handled
+ * must have a file descriptor.
+ * This allows you to add events for
+ * sockets, fifo's, pipes, and various
+ * other forms of IPC.
+ */
+ int fd;
+ public:
+ /** Get the current file descriptor
+ * @return The file descriptor of this handler
+ */
+ int GetFd();
+
+ /** Set a new file desciptor
+ * @param FD The new file descriptor. Do not
+ * call this method without first deleting the
+ * object from the SocketEngine if you have
+ * added it to a SocketEngine instance.
+ */
+ void SetFd(int FD);
+
+ /** Constructor
+ */
+ EventHandler() {}
+
+ /** Destructor
+ */
+ virtual ~EventHandler() {}
+
+ /** Override this function to indicate readability.
+ * @return This should return true if the function
+ * wishes to receive EVENT_READ events. Do not change
+ * what this function returns while the event handler
+ * is still added to a SocketEngine instance!
+ * If this function is unimplemented, the base class
+ * will return true.
+ *
+ * NOTE: You cannot set both Readable() and
+ * Writeable() to true. If you wish to receive
+ * a write event for your object, you must call
+ * SocketEngine::WantWrite() instead. This will
+ * trigger your objects next EVENT_WRITE type event.
+ */
+ virtual bool Readable();
+
+ /** Override this function to indicate writeability.
+ * @return This should return true if the function
+ * wishes to receive EVENT_WRITE events. Do not change
+ * what this function returns while the event handler
+ * is still added to a SocketEngine instance!
+ * If this function is unimplemented, the base class
+ * will return false.
+ *
+ * NOTE: You cannot set both Readable() and
+ * Writeable() to true. If you wish to receive
+ * a write event for your object, you must call
+ * SocketEngine::WantWrite() instead. This will
+ * trigger your objects next EVENT_WRITE type event.
+ */
+ virtual bool Writeable();