X-Git-Url: https://git.netwichtig.de/gitweb/?a=blobdiff_plain;f=include%2Fsocketengine.h;h=c0026bfc6f2513335b0af7ba3853a12d017cff6b;hb=6c4a6b1753926f7de2cc210bf25d1b3c87c181e9;hp=f30289913b8b929008c08281e02c57cc12759e11;hpb=30b78bc2f4f7b74574abfbb3a3c2dc04686d2e7d;p=user%2Fhenk%2Fcode%2Finspircd.git diff --git a/include/socketengine.h b/include/socketengine.h index f30289913..c0026bfc6 100644 --- a/include/socketengine.h +++ b/include/socketengine.h @@ -37,23 +37,6 @@ #define IOV_MAX 1024 #endif -/** Types of event an EventHandler may receive. - * EVENT_READ is a readable file descriptor, - * and EVENT_WRITE is a writeable file descriptor. - * EVENT_ERROR can always occur, and indicates - * a write error or read error on the socket, - * e.g. EOF condition or broken pipe. - */ -enum EventType -{ - /** Read event */ - EVENT_READ = 0, - /** Write event */ - EVENT_WRITE = 1, - /** Error event */ - EVENT_ERROR = 2 -}; - /** * Event mask for SocketEngine events */ @@ -101,7 +84,7 @@ enum EventMask * EINPROGRESS. An event MAY be sent at any time that writes will not * block. * - * Before calling HandleEvent, a socket engine MAY change the state of + * Before calling OnEventHandler*(), a socket engine MAY change the state of * the FD back to FD_WANT_EDGE_WRITE if it is simpler (for example, if a * one-shot notification was registered). If further writes are needed, * it is the responsibility of the event handler to change the state to @@ -115,7 +98,7 @@ enum EventMask */ FD_WANT_EDGE_WRITE = 0x80, /** Request a one-shot poll-style write notification. The socket will - * return to the FD_WANT_NO_WRITE state before HandleEvent is called. + * return to the FD_WANT_NO_WRITE state before OnEventHandler*() is called. */ FD_WANT_SINGLE_WRITE = 0x100, @@ -123,17 +106,17 @@ enum EventMask FD_WANT_WRITE_MASK = 0x1F0, /** Add a trial read. During the next DispatchEvents invocation, this - * will call HandleEvent with EVENT_READ unless reads are known to be + * will call OnEventHandlerRead() unless reads are known to be * blocking. */ FD_ADD_TRIAL_READ = 0x1000, /** Assert that reads are known to block. This cancels FD_ADD_TRIAL_READ. - * Reset by SE before running EVENT_READ + * Reset by SE before running OnEventHandlerRead(). */ FD_READ_WILL_BLOCK = 0x2000, /** Add a trial write. During the next DispatchEvents invocation, this - * will call HandleEvent with EVENT_WRITE unless writes are known to be + * will call OnEventHandlerWrite() unless writes are known to be * blocking. * * This could be used to group several writes together into a single @@ -142,7 +125,7 @@ enum EventMask */ FD_ADD_TRIAL_WRITE = 0x4000, /** Assert that writes are known to block. This cancels FD_ADD_TRIAL_WRITE. - * Reset by SE before running EVENT_WRITE + * Reset by SE before running OnEventHandlerWrite(). */ FD_WRITE_WILL_BLOCK = 0x8000, @@ -153,17 +136,14 @@ enum EventMask /** This class is a basic I/O handler class. * Any object which wishes to receive basic I/O events * from the socketengine must derive from this class and - * implement the HandleEvent() method. The derived class + * implement the OnEventHandler*() methods. The derived class * must then be added to SocketEngine using the method * SocketEngine::AddFd(), after which point the derived - * class will receive events to its HandleEvent() method. - * The derived class should also implement one of Readable() - * and Writeable(). In the current implementation, only - * Readable() is used. If this returns true, the socketengine - * inserts a readable socket. If it is false, the socketengine - * inserts a writeable socket. The derived class should never - * change the value this function returns without first - * deleting the socket from the socket engine. The only + * class will receive events to its OnEventHandler*() methods. + * The event mask passed to SocketEngine::AddFd() determines + * what events the EventHandler gets notified about and with + * what semantics. SocketEngine::ChangeEventMask() can be + * called to update the event mask later. The only * requirement beyond this for an event handler is that it * must have a file descriptor. What this file descriptor * is actually attached to is completely up to you. @@ -207,16 +187,20 @@ class CoreExport EventHandler : public classbase */ virtual ~EventHandler() {} - /** Process an I/O event. - * You MUST implement this function in your derived - * class, and it will be called whenever read or write - * events are received. - * @param et either one of EVENT_READ for read events, - * EVENT_WRITE for write events and EVENT_ERROR for - * error events. - * @param errornum The error code which goes with an EVENT_ERROR. + /** Called by the socket engine in case of a read event + */ + virtual void OnEventHandlerRead() = 0; + + /** Called by the socket engine in case of a write event. + * The default implementation does nothing. + */ + virtual void OnEventHandlerWrite(); + + /** Called by the socket engine in case of an error event. + * The default implementation does nothing. + * @param errornum Error code */ - virtual void HandleEvent(EventType et, int errornum = 0) = 0; + virtual void OnEventHandlerError(int errornum); friend class SocketEngine; }; @@ -341,7 +325,7 @@ public: /** Add an EventHandler object to the engine. Use AddFd to add a file * descriptor to the engine and have the socket engine monitor it. You * must provide an object derived from EventHandler which implements - * HandleEvent(). + * the required OnEventHandler*() methods. * @param eh An event handling object to add * @param event_mask The initial event mask for the object */ @@ -400,8 +384,7 @@ public: * this doesn't wait long, only a couple of milliseconds. It returns the * number of events which occurred during this call. This method will * dispatch events to their handlers by calling their - * EventHandler::HandleEvent() methods with the necessary EventType - * value. + * EventHandler::OnEventHandler*() methods. * @return The number of events which have occured. */ static int DispatchEvents();