#ifndef INDIBASE_H
#define INDIBASE_H
#include "indiapi.h"
#include "indidevapi.h"
#define MAXRBUF 2048
/**
 * \namespace INDI
   \brief Namespace to encapsulate INDI client, device, and mediator classes
   
   - BaseClient: Base class for INDI clients. By subclassing BaseClient, client can easily connect to INDI server
   and handle device communication, command, and notifcation.
- BaseMediator: Abstract class to provide interface for event notifications in INDI::BaseClient.
- BaseDriver: Base class for all INDI virtual driver as handled and stored in INDI::BaseClient.
- DefaultDriver: INDI::BaseDriver with extended functionality such as debug, simulation, and configuration support.
       It is \e only used by drivers directly, it cannot be used by clients.
*/
namespace INDI
{
    class BaseMediator;
    class BaseClient;
    class BaseDriver;
    class DefaultDriver;
}
/**
 * \class INDI::BaseMediator
   \brief Meditates event notification as generated by devices and passed to clients.
*/
class INDI::BaseMediator
{
public:
    /** \brief Emmited when a new device is created from INDI server.
    */
    virtual void newDevice()  =0;
    /** \brief Emmited when a new BLOB value arrives from INDI server.
        \param bp Pointer to filled and process BLOB.
    */
    virtual void newBLOB(IBLOB *bp) =0;
    /** \brief Emmited when a new switch value arrives from INDI server.
        \param svp Pointer to a switch vector property.
    */
    virtual void newSwitch(ISwitchVectorProperty *svp) =0;
    /** \brief Emmited when a new number value arrives from INDI server.
        \param nvp Pointer to a number vector property.
    */
    virtual void newNumber(INumberVectorProperty *nvp) =0;
    /** \brief Emmited when a new text value arrives from INDI server.
        \param tvp Pointer to a text vector property.
    */
    virtual void newText(ITextVectorProperty *tvp) =0;
    /** \brief Emmited when a new light value arrives from INDI server.
        \param lvp Pointer to a light vector property.
    */
    virtual void newLight(ILightVectorProperty *lvp) =0;
    /** \brief Emmited when the server gets disconnected.
    */
    virtual void serverDisconnected() =0;
};
#endif // INDIBASE_H