// Copyright (c) 2002 David Muse
// See the COPYING file for more information.

#ifndef RUDIMENTS_CLIENT_H
#define RUDIMENTS_CLIENT_H

#include <rudiments/private/clientincludes.h>

// The client class provides a base class for classes that implement the client
// side of a client-server communication model.

#ifdef RUDIMENTS_NAMESPACE
namespace rudiments {
#endif

class clientprivate;

class client : public filedescriptor {
        public:

                        client();
                        client(const client &c);
                client  &operator=(const client &c);
                virtual ~client();

                virtual void  initialize(constnamevaluepairs *cd)=0;
                virtual int   connect()=0;
                                // This method return an int instead of a bool
                                // because we want child classes that have non
                                // atomic connection procedures (such as a
                                // modem) to be able to implement return codes
                                // other than success or failure (such as
                                // abort).
                virtual       const char    *getVerboseConnectError();
                virtual       void          setVerboseConnectError(
                                                const char *error);

        #include <rudiments/private/client.h>
};

#ifdef RUDIMENTS_NAMESPACE
}
#endif

#endif