#ifndef _EVENT_H_
#define _EVENT_H_

#include "iface.h"          // for IARPEvent


//------------------------------------------------------------------------
//
//  CEventBroker
//
//  This class brokers events sent from the OSP to the OSP listener
//  or the data source listener.
// 
//------------------------------------------------------------------------

class CEventBroker : public IARPEvent
{
public:
    // *** IUnknown ***
    STDMETHOD_(ULONG, AddRef)   (void);
    STDMETHOD_(ULONG, Release)  (void);
    STDMETHOD(QueryInterface)   (REFIID riid, LPVOID * ppvObj);

    // *** IARPEvent ***
    STDMETHOD(SetDataSourceListener)(DataSourceListener *);
    STDMETHOD(IsOSPListener)        (OLEDBSimpleProviderListener * posp);
    STDMETHOD(SetOSPListener)       (OLEDBSimpleProviderListener * posp);
    STDMETHOD(AboutToDeleteRows)    (DBROWCOUNT iRowStart, DBROWCOUNT cRows);
    STDMETHOD(DeletedRows)          (DBROWCOUNT iRowStart, DBROWCOUNT cRows);
    STDMETHOD(RowsAvailable)        (DBROWCOUNT iRowStart, DBROWCOUNT cRows);
    STDMETHOD(RowChanged)           (DBROWCOUNT iRow);
    STDMETHOD(LoadCompleted)        (void);
    STDMETHOD(LoadAborted)          (void);
    STDMETHOD(DataSetChanged)       (void);
    
    CEventBroker(LPWSTR pszQualifier);
    ~CEventBroker();

private:
    
    ULONG _cRef;         
    
    DataSourceListener * _pdsl;
    OLEDBSimpleProviderListener *_pospl;

    BSTR _cbstrQualifier;
};

HRESULT CARPEvent_CreateInstance(REFIID riid, LPVOID * ppvObj, LPWSTR pszQualifier);


#endif // _EVENT_H_