diff --git a/src/Client.hxx b/src/Client.hxx index e9d3b56c8..3a2fda282 100644 --- a/src/Client.hxx +++ b/src/Client.hxx @@ -20,15 +20,103 @@ #ifndef MPD_CLIENT_H #define MPD_CLIENT_H +#include "check.h" +#include "ClientMessage.hxx" +#include "CommandListBuilder.hxx" +#include "event/FullyBufferedSocket.hxx" +#include "event/TimeoutMonitor.hxx" #include "Compiler.h" +#include +#include +#include + #include #include struct sockaddr; class EventLoop; struct Partition; -class Client; + +class Client final : private FullyBufferedSocket, TimeoutMonitor { +public: + Partition &partition; + struct playlist &playlist; + struct player_control &player_control; + + unsigned permission; + + /** the uid of the client process, or -1 if unknown */ + int uid; + + CommandListBuilder cmd_list; + + unsigned int num; /* client number */ + + /** is this client waiting for an "idle" response? */ + bool idle_waiting; + + /** idle flags pending on this client, to be sent as soon as + the client enters "idle" */ + unsigned idle_flags; + + /** idle flags that the client wants to receive */ + unsigned idle_subscriptions; + + /** + * A list of channel names this client is subscribed to. + */ + std::set subscriptions; + + /** + * The number of subscriptions in #subscriptions. Used to + * limit the number of subscriptions. + */ + unsigned num_subscriptions; + + /** + * A list of messages this client has received. + */ + std::list messages; + + Client(EventLoop &loop, Partition &partition, + int fd, int uid, int num); + + bool IsConnected() const { + return FullyBufferedSocket::IsDefined(); + } + + gcc_pure + bool IsSubscribed(const char *channel_name) const { + return subscriptions.find(channel_name) != subscriptions.end(); + } + + gcc_pure + bool IsExpired() const { + return !FullyBufferedSocket::IsDefined(); + } + + void Close(); + void SetExpired(); + + using FullyBufferedSocket::Write; + + /** + * Send "idle" response to this client. + */ + void IdleNotify(); + void IdleAdd(unsigned flags); + bool IdleWait(unsigned flags); + +private: + /* virtual methods from class BufferedSocket */ + virtual InputResult OnSocketInput(void *data, size_t length) override; + virtual void OnSocketError(Error &&error) override; + virtual void OnSocketClosed() override; + + /* virtual methods from class TimeoutMonitor */ + virtual void OnTimeout() override; +}; void client_manager_init(void); diff --git a/src/ClientInternal.hxx b/src/ClientInternal.hxx index 4e252a24c..4df58eee6 100644 --- a/src/ClientInternal.hxx +++ b/src/ClientInternal.hxx @@ -22,103 +22,13 @@ #include "check.h" #include "Client.hxx" -#include "ClientMessage.hxx" -#include "CommandListBuilder.hxx" -#include "event/FullyBufferedSocket.hxx" -#include "event/TimeoutMonitor.hxx" #include "command.h" -#include -#include -#include - enum { CLIENT_MAX_SUBSCRIPTIONS = 16, CLIENT_MAX_MESSAGES = 64, }; -struct Partition; - -class Client final : private FullyBufferedSocket, TimeoutMonitor { -public: - Partition &partition; - struct playlist &playlist; - struct player_control &player_control; - - unsigned permission; - - /** the uid of the client process, or -1 if unknown */ - int uid; - - CommandListBuilder cmd_list; - - unsigned int num; /* client number */ - - /** is this client waiting for an "idle" response? */ - bool idle_waiting; - - /** idle flags pending on this client, to be sent as soon as - the client enters "idle" */ - unsigned idle_flags; - - /** idle flags that the client wants to receive */ - unsigned idle_subscriptions; - - /** - * A list of channel names this client is subscribed to. - */ - std::set subscriptions; - - /** - * The number of subscriptions in #subscriptions. Used to - * limit the number of subscriptions. - */ - unsigned num_subscriptions; - - /** - * A list of messages this client has received. - */ - std::list messages; - - Client(EventLoop &loop, Partition &partition, - int fd, int uid, int num); - - bool IsConnected() const { - return FullyBufferedSocket::IsDefined(); - } - - gcc_pure - bool IsSubscribed(const char *channel_name) const { - return subscriptions.find(channel_name) != subscriptions.end(); - } - - gcc_pure - bool IsExpired() const { - return !FullyBufferedSocket::IsDefined(); - } - - void Close(); - void SetExpired(); - - using FullyBufferedSocket::Write; - - /** - * Send "idle" response to this client. - */ - void IdleNotify(); - void IdleAdd(unsigned flags); - bool IdleWait(unsigned flags); - -private: - /* virtual methods from class BufferedSocket */ - virtual InputResult OnSocketInput(void *data, size_t length) override; - virtual void OnSocketError(Error &&error) override; - virtual void OnSocketClosed() override; - - /* virtual methods from class TimeoutMonitor */ - virtual void OnTimeout() override; -}; - extern const class Domain client_domain; extern int client_timeout; diff --git a/src/DatabaseCommands.cxx b/src/DatabaseCommands.cxx index fe6746a74..652b2b6d5 100644 --- a/src/DatabaseCommands.cxx +++ b/src/DatabaseCommands.cxx @@ -24,7 +24,7 @@ #include "DatabasePrint.hxx" #include "DatabaseSelection.hxx" #include "CommandError.hxx" -#include "ClientInternal.hxx" +#include "Client.hxx" #include "tag/Tag.hxx" #include "util/UriUtil.hxx" #include "util/Error.hxx" diff --git a/src/MessageCommands.cxx b/src/MessageCommands.cxx index 21067f1a9..c2b272713 100644 --- a/src/MessageCommands.cxx +++ b/src/MessageCommands.cxx @@ -20,7 +20,7 @@ #include "config.h" #include "MessageCommands.hxx" #include "ClientSubscribe.hxx" -#include "ClientInternal.hxx" +#include "Client.hxx" #include "ClientList.hxx" #include "Instance.hxx" #include "Main.hxx" diff --git a/src/OtherCommands.cxx b/src/OtherCommands.cxx index 2250c37b4..038a6448b 100644 --- a/src/OtherCommands.cxx +++ b/src/OtherCommands.cxx @@ -40,7 +40,7 @@ #include "Permission.hxx" #include "PlaylistFile.hxx" #include "ClientFile.hxx" -#include "ClientInternal.hxx" +#include "Client.hxx" #include "Idle.hxx" #ifdef ENABLE_SQLITE diff --git a/src/PlayerCommands.cxx b/src/PlayerCommands.cxx index 8b9a96ca5..26503ee52 100644 --- a/src/PlayerCommands.cxx +++ b/src/PlayerCommands.cxx @@ -23,7 +23,7 @@ #include "Playlist.hxx" #include "PlaylistPrint.hxx" #include "UpdateGlue.hxx" -#include "ClientInternal.hxx" +#include "Client.hxx" #include "Volume.hxx" #include "OutputAll.hxx" #include "Partition.hxx" diff --git a/src/PlaylistCommands.cxx b/src/PlaylistCommands.cxx index 57be3453a..4eaaf8145 100644 --- a/src/PlaylistCommands.cxx +++ b/src/PlaylistCommands.cxx @@ -27,7 +27,7 @@ #include "PlaylistVector.hxx" #include "PlaylistQueue.hxx" #include "TimePrint.hxx" -#include "ClientInternal.hxx" +#include "Client.hxx" #include "protocol/ArgParser.hxx" #include "protocol/Result.hxx" #include "ls.hxx" diff --git a/src/QueueCommands.cxx b/src/QueueCommands.cxx index 9ab6244bb..0e2a3604c 100644 --- a/src/QueueCommands.cxx +++ b/src/QueueCommands.cxx @@ -26,7 +26,7 @@ #include "Playlist.hxx" #include "PlaylistPrint.hxx" #include "ClientFile.hxx" -#include "ClientInternal.hxx" +#include "Client.hxx" #include "Partition.hxx" #include "protocol/ArgParser.hxx" #include "protocol/Result.hxx" diff --git a/src/Stats.cxx b/src/Stats.cxx index 4c488e85e..88f76928f 100644 --- a/src/Stats.cxx +++ b/src/Stats.cxx @@ -20,7 +20,7 @@ #include "config.h" #include "Stats.hxx" #include "PlayerControl.hxx" -#include "ClientInternal.hxx" +#include "Client.hxx" #include "DatabaseSelection.hxx" #include "DatabaseGlue.hxx" #include "DatabasePlugin.hxx"