From a26502ff51141c3cd74c078876d3322b49a3833c Mon Sep 17 00:00:00 2001 From: danieldg Date: Fri, 6 Nov 2009 22:37:36 +0000 Subject: Move StreamSocket inheritance off of User git-svn-id: http://svn.inspircd.org/repository/trunk/inspircd@12047 e03df62e-2008-0410-955e-edbf42e46eb7 --- include/users.h | 36 +++++++++++++++++++++++------------- 1 file changed, 23 insertions(+), 13 deletions(-) (limited to 'include/users.h') diff --git a/include/users.h b/include/users.h index ed649f1b9..5cf7669af 100644 --- a/include/users.h +++ b/include/users.h @@ -140,7 +140,7 @@ struct CoreExport ConnectClass : public refcountbase /** Create a new connect class with inherited settings. */ ConnectClass(ConfigTag* tag, char type, const std::string& mask, const ConnectClass& parent); - + /** Update the settings in this block to match the given block */ void Update(const ConnectClass* newSettings); @@ -149,7 +149,7 @@ struct CoreExport ConnectClass : public refcountbase const std::string& GetPass() { return pass; } const std::string& GetHost() { return host; } const int GetPort() { return port; } - + /** Returns the registration timeout */ time_t GetRegTimeout() @@ -213,7 +213,7 @@ struct CoreExport ConnectClass : public refcountbase * connection is stored here primarily, from the user's socket ID (file descriptor) through to the * user's nickname and hostname. */ -class CoreExport User : public StreamSocket +class CoreExport User : public Extensible { private: /** Cached nick!ident@dhost value using the displayed hostname @@ -706,14 +706,28 @@ class CoreExport User : public StreamSocket */ void ShowRULES(); - virtual void OnDataReady(); - virtual void OnError(BufferedSocketError error); /** Default destructor */ virtual ~User(); virtual CullResult cull(); }; +class CoreExport UserIOHandler : public StreamSocket +{ + public: + LocalUser* const user; + UserIOHandler(LocalUser* me) : user(me) {} + void OnDataReady(); + void OnError(BufferedSocketError error); + + /** Adds to the user's write buffer. + * You may add any amount of text up to this users sendq value, if you exceed the + * sendq value, the user will be removed, and further buffer adds will be dropped. + * @param data The data to add to the write buffer + */ + void AddWriteBuf(const std::string &data); +}; + class CoreExport LocalUser : public User { /** A list of channels the user has a pending invite to. @@ -726,6 +740,8 @@ class CoreExport LocalUser : public User LocalUser(int fd, irc::sockets::sockaddrs* client, irc::sockets::sockaddrs* server); CullResult cull(); + UserIOHandler eh; + /** Stats counter for bytes inbound */ int bytes_in; @@ -797,18 +813,10 @@ class CoreExport LocalUser : public User */ void SetClass(const std::string &explicit_name = ""); - void OnDataReady(); void SendText(const std::string& line); void Write(const std::string& text); void Write(const char*, ...) CUSTOM_PRINTF(2, 3); - /** Adds to the user's write buffer. - * You may add any amount of text up to this users sendq value, if you exceed the - * sendq value, the user will be removed, and further buffer adds will be dropped. - * @param data The data to add to the write buffer - */ - void AddWriteBuf(const std::string &data); - /** Returns the list of channels this user has been invited to but has not yet joined. * @return A list of channels the user is invited to */ @@ -859,6 +867,8 @@ class CoreExport LocalUser : public User * @return True if the user can set or unset this mode. */ bool HasModePermission(unsigned char mode, ModeType type); + + inline int GetFd() { return eh.GetFd(); } }; class CoreExport RemoteUser : public User -- cgit v1.2.3