]> git.netwichtig.de Git - user/henk/code/inspircd.git/blobdiff - include/inspsocket.h
Dispatch EventHandler events to dedicated virtual functions
[user/henk/code/inspircd.git] / include / inspsocket.h
index 720489b7763dffa5e49d069752c496b5c87d94e4..8c93f884e837dfeb7d3d36809ef6e710aeb87223 100644 (file)
@@ -90,7 +90,7 @@ class CoreExport SocketTimeout : public Timer
         * @param secs_from_now Seconds from now to time out
         * @param now The current time
         */
-       SocketTimeout(int fd, BufferedSocket* thesock, long secs_from_now, time_t now) : Timer(secs_from_now, now), sock(thesock), sfd(fd) { }
+       SocketTimeout(int fd, BufferedSocket* thesock, long secs_from_now) : Timer(secs_from_now), sock(thesock), sfd(fd) { }
 
        /** Handle tick event
         */
@@ -113,6 +113,12 @@ class CoreExport StreamSocket : public EventHandler
        size_t sendq_len;
        /** Error - if nonempty, the socket is dead, and this is the reason. */
        std::string error;
+
+       /** Check if the socket has an error set, if yes, call OnError
+        * @param err Error to pass to OnError()
+        */
+       void CheckError(BufferedSocketError err);
+
  protected:
        std::string recvq;
  public:
@@ -120,15 +126,24 @@ class CoreExport StreamSocket : public EventHandler
        IOHook* GetIOHook() const;
        void AddIOHook(IOHook* hook);
        void DelIOHook();
-       /** Handle event from socket engine.
-        * This will call OnDataReady if there is *new* data in recvq
-        */
-       virtual void HandleEvent(EventType et, int errornum = 0);
        /** Dispatched from HandleEvent */
        virtual void DoRead();
        /** Dispatched from HandleEvent */
        virtual void DoWrite();
 
+       /** Called by the socket engine on a read event
+        */
+       void OnEventHandlerRead() CXX11_OVERRIDE;
+
+       /** Called by the socket engine on a write event
+        */
+       void OnEventHandlerWrite() CXX11_OVERRIDE;
+
+       /** Called by the socket engine on error
+        * @param errcode Error
+        */
+       void OnEventHandlerError(int errcode) CXX11_OVERRIDE;
+
        /** Sets the error message for this socket. Once set, the socket is dead. */
        void SetError(const std::string& err) { if (error.empty()) error = err; }
 
@@ -226,7 +241,7 @@ class CoreExport BufferedSocket : public StreamSocket
 
        virtual ~BufferedSocket();
  protected:
-       virtual void DoWrite();
+       void OnEventHandlerWrite() CXX11_OVERRIDE;
        BufferedSocketError BeginConnect(const irc::sockets::sockaddrs& dest, const irc::sockets::sockaddrs& bind, unsigned long timeout);
        BufferedSocketError BeginConnect(const std::string &ipaddr, int aport, unsigned long maxtime, const std::string &connectbindip);
 };