/*
 * Copyright (C) 2009 Huw Davies
 *
 * This library is free software; you can redistribute it and/or
 * modify it under the terms of the GNU Lesser General Public
 * License as published by the Free Software Foundation; either
 * version 2.1 of the License, or (at your option) any later version.
 *
 * This library is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 * Lesser General Public License for more details.
 *
 * You should have received a copy of the GNU Lesser General Public
 * License along with this library; if not, write to the Free Software
 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
 */

#if 0
#pragma makedep install
#endif

[
    object,
    uuid(0c733a96-2a1c-11ce-ade5-00aa0044773d),
    pointer_default(unique)
]
interface IDBAsynchNotify : IUnknown
{
    [local]
    HRESULT OnLowResource([in] DB_DWRESERVE dwReserved);

    [call_as(OnLowResource)]
    HRESULT RemoteOnLowResource([in] DB_DWRESERVE dwReserved);

    [local]
    HRESULT OnProgress([in] HCHAPTER hChapter,
                       [in] DBASYNCHOP eOperation,
                       [in] DBCOUNTITEM ulProgress,
                       [in] DBCOUNTITEM ulProgressMax,
                       [in] DBASYNCHPHASE eAsynchPhase,
                       [in, annotation("__in_opt")] LPOLESTR pwszStatusText);

    [call_as(OnProgress)]
    HRESULT RemoteOnProgress([in] HCHAPTER hChapter,
                             [in] DBASYNCHOP eOperation,
                             [in] DBCOUNTITEM ulProgress,
                             [in] DBCOUNTITEM ulProgressMax,
                             [in] DBASYNCHPHASE eAsynchPhase,
                             [in, unique, string] LPOLESTR pwszStatusText);

    [local]
    HRESULT OnStop([in] HCHAPTER hChapter,
                   [in] DBASYNCHOP eOperation,
                   [in] HRESULT hrStatus,
                   [in, annotation("__in_opt")] LPOLESTR pwszStatusText);

    [call_as(OnStop)]
    HRESULT RemoteOnStop([in] HCHAPTER hChapter,
                         [in] DBASYNCHOP eOperation,
                         [in] HRESULT hrStatus,
                         [in, unique, string] LPOLESTR pwszStatusText);
}
