//+-------------------------------------------------------------------------
//
//  Microsoft Windows Media Technologies
//  Copyright (C) Microsoft Corporation. All rights reserved.
//
//  File:       event.idl
//
//  Contents:
//
//--------------------------------------------------------------------------

cpp_quote("//+-------------------------------------------------------------------------")
cpp_quote("//")
cpp_quote("//  Microsoft Windows Media Technologies")
cpp_quote("//  Copyright (C) Microsoft Corporation. All rights reserved.")
cpp_quote("//")
cpp_quote("//  Automatically generated by Midl from event.idl")
cpp_quote("//")
cpp_quote("//  DO NOT EDIT THIS FILE.")
cpp_quote("//")
cpp_quote("//--------------------------------------------------------------------------")

cpp_quote("#if _MSC_VER > 1000")
cpp_quote("#pragma once")
cpp_quote("#endif // _MSC_VER > 1000")

import "oaidl.idl";

import "WMSContext.idl";
import "WMSEvent.idl";

cpp_quote( "EXTERN_GUID( IID_IWMSEventNotificationPlugin , 0xBE185FF0,0x6932,0x11d2,0x8B,0x3B,0x00,0x60,0x97,0xB0,0x12,0x06  );" )
cpp_quote( "EXTERN_GUID( IID_IWMSEventAuthorizationPlugin , 0xBE185FF1,0x6932,0x11d2,0x8B,0x3B,0x00,0x60,0x97,0xB0,0x12,0x06  );" )
cpp_quote( "EXTERN_GUID( IID_IWMSEventAuthorizationCallback , 0xBE185FF2,0x6932,0x11d2,0x8B,0x3B,0x00,0x60,0x97,0xB0,0x12,0x06  );" )
cpp_quote( "EXTERN_GUID( IID_IWMSCustomEventCallback , 0x8fbd4d04,0x970d,0x4d37,0xbb,0xc6,0x6f,0xbb,0xb7,0x4e,0xac,0x9d  );" )

interface IWMSEventNotificationPlugin;
interface IWMSEventAuthorizationPlugin;
interface IWMSEventAuthorizationCallback;

typedef [public] enum WMS_SERVER_EVENT_TYPE
{
    WMS_EVENT_SERVER_ONLINE = 0,
    WMS_EVENT_SERVER_OFFLINE = 1,
    WMS_EVENT_SERVER_CRITICAL_ERROR = 2,
    WMS_EVENT_SERVER_PROPERTY_CHANGE = 3,
    WMS_EVENT_SERVER_ALLOW_CLIENTS_TO_CONNECT_CHANGE = 4,
    WMS_EVENT_SERVER_PLUGIN_LOAD_TYPE_CHANGE = 5,
    WMS_EVENT_SERVER_REVERSE_PROXY_MODE_CHANGE = 6,
    WMS_EVENT_SERVER_DOWNLOAD_START = 7,
    WMS_EVENT_SERVER_DOWNLOAD_COMPLETE = 8,
    [hidden] WMS_NUM_SERVER_EVENTS = 9
}   WMS_SERVER_EVENT_TYPE;

typedef [public] enum WMS_PUBLISHING_POINT_EVENT_TYPE
{
    WMS_EVENT_PUBLISHING_POINT_ADD = 0,
    WMS_EVENT_PUBLISHING_POINT_REMOVE = 1,
    WMS_EVENT_PUBLISHING_POINT_ALLOW_CLIENTS_TO_CONNECT_CHANGE = 2,
    WMS_EVENT_PUBLISHING_POINT_START_WITHOUT_DATA = 3,
    WMS_EVENT_PUBLISHING_POINT_START = 4,
    WMS_EVENT_PUBLISHING_POINT_STOP = 5,
    WMS_EVENT_PUBLISHING_POINT_START_ARCHIVE = 6,
    WMS_EVENT_PUBLISHING_POINT_STOP_ARCHIVE = 7,
    WMS_EVENT_PUBLISHING_POINT_NAME_CHANGE = 8,
    WMS_EVENT_PUBLISHING_POINT_PATH_CHANGE = 9,
    WMS_EVENT_PUBLISHING_POINT_ALLOW_CLIENT_TO_START_AND_STOP_CHANGE = 10,
    WMS_EVENT_PUBLISHING_POINT_PROPERTY_CHANGE = 11,
    WMS_EVENT_PUBLISHING_POINT_WRAPPER_PATH_CHANGE = 12,
    WMS_EVENT_PUBLISHING_POINT_ENABLE_WRAPPER_PATH_CHANGE = 13,
    WMS_EVENT_PUBLISHING_POINT_ALLOW_CONTENT_CACHING_CHANGE = 14,
    WMS_EVENT_PUBLISHING_POINT_STREAM_END = 15,
    WMS_EVENT_PUBLISHING_POINT_CRITICAL_ERROR = 16,
    WMS_EVENT_PUBLISHING_POINT_ENABLE_CLIENT_WILDCARD_DIRECTORY_ACCESS_CHANGE = 17,
    WMS_EVENT_PUBLISHING_POINT_DISTRIBUTION_USER_NAME_CHANGE = 18,
    WMS_EVENT_PUBLISHING_POINT_DISTRIBUTION_PASSWORD_CHANGE = 19,
    WMS_EVENT_PUBLISHING_POINT_ALLOW_PLAYER_SIDE_DISK_CACHING_CHANGE = 20,
    WMS_EVENT_PUBLISHING_POINT_BUFFER_SETTING_CHANGE = 21,
    WMS_EVENT_PUBLISHING_POINT_ENABLE_FEC_CHANGE = 22,
    WMS_EVENT_PUBLISHING_POINT_ENABLE_STARTUPPROFILE_CHANGE = 23,
    WMS_EVENT_PUBLISHING_POINT_ENABLE_VROOT_START_CHANGE = 24,
    [hidden] WMS_NUM_PUBLISHINGPOINT_EVENTS = 25
}   WMS_PUBLISHING_POINT_EVENT_TYPE;

typedef [public] enum WMS_LIMIT_CHANGE_EVENT_TYPE
{
    WMS_EVENT_LIMIT_CHANGE_CONNECTED_PLAYERS = 0,
    WMS_EVENT_LIMIT_CHANGE_PLAYER_BANDWIDTH = 1,
    WMS_EVENT_LIMIT_CHANGE_PLAYER_CONNECTION_BANDWIDTH = 2,
    WMS_EVENT_LIMIT_CHANGE_DISTRIBUTION_CONNECTIONS = 3,
    WMS_EVENT_LIMIT_CHANGE_PLAYER_INACTIVITY_TIMEOUT = 4,
    WMS_EVENT_LIMIT_CHANGE_PLAYER_ACKNOWLEDGEMENT_TIMEOUT = 5,
    WMS_EVENT_LIMIT_CHANGE_CONNECTION_RATE = 6,
    WMS_EVENT_LIMIT_CHANGE_CPU_UTILIZATION_DURING_CONNECTION = 7,
    WMS_EVENT_LIMIT_CHANGE_DISTRIBUTION_BANDWIDTH = 8,
    WMS_EVENT_LIMIT_CHANGE_DISTRIBUTION_CONNECTION_BANDWIDTH = 9,
    WMS_EVENT_LIMIT_CHANGE_DIAGNOSTIC_EVENTS = 10,
    WMS_EVENT_LIMIT_CHANGE_PLAYER_CACHE_DELIVERY_RATE = 11,
    WMS_EVENT_LIMIT_CHANGE_FEC_PACKET_SPAN = 12,
    WMS_EVENT_LIMIT_CHANGE_INCOMING_BANDWIDTH = 13,
    [hidden] WMS_NUM_LIMIT_CHANGE_EVENTS = 14
}   WMS_LIMIT_CHANGE_EVENT_TYPE;

typedef [public] enum WMS_LIMIT_HIT_EVENT_TYPE
{
    WMS_EVENT_LIMIT_HIT_CONNECTED_PLAYERS = 0,
    WMS_EVENT_LIMIT_HIT_PLAYER_BANDWIDTH = 1,
    WMS_EVENT_LIMIT_HIT_PLAYER_CONNECTION_BANDWIDTH = 2,
    WMS_EVENT_LIMIT_HIT_DISTRIBUTION_CONNECTIONS = 3,
    WMS_EVENT_LIMIT_HIT_PLAYER_INACTIVITY_TIMEOUT = 4,
    WMS_EVENT_LIMIT_HIT_PLAYER_ACKNOWLEDGEMENT_TIMEOUT = 5,
    WMS_EVENT_LIMIT_HIT_CONNECTION_RATE = 6,
    WMS_EVENT_LIMIT_HIT_CPU_UTILIZATION_DURING_CONNECTION = 7,
    WMS_EVENT_LIMIT_HIT_DISTRIBUTION_BANDWIDTH = 8,
    WMS_EVENT_LIMIT_HIT_DISTRIBUTION_CONNECTION_BANDWIDTH = 9,
    WMS_EVENT_LIMIT_HIT_INCOMING_BANDWIDTH = 10,
    [hidden] WMS_NUM_LIMIT_HIT_EVENTS = 11
}   WMS_LIMIT_HIT_EVENT_TYPE;

typedef [public] enum WMS_PLUGIN_EVENT_TYPE
{
    WMS_EVENT_PLUGIN_ADD = 0,
    WMS_EVENT_PLUGIN_REMOVE = 1,
    WMS_EVENT_PLUGIN_ENABLE = 2,
    WMS_EVENT_PLUGIN_DISABLE = 3,
    WMS_EVENT_PLUGIN_PROPERTY_CHANGE = 4,
    WMS_EVENT_PLUGIN_ERROR = 5,
    WMS_EVENT_PLUGIN_NAME_CHANGE = 6,
    WMS_EVENT_PLUGIN_LOAD_TYPE_CHANGE = 7,
    WMS_EVENT_PLUGIN_SELECTION_ORDER_CHANGE = 8,
    [hidden] WMS_NUM_PLUGIN_EVENTS = 9
}   WMS_PLUGIN_EVENT_TYPE;

typedef [public] enum WMS_CACHE_EVENT_TYPE
{
    WMS_EVENT_CACHE_HIT = 0,
    WMS_EVENT_CACHE_MISS = 1,
    WMS_EVENT_CACHE_DOWNLOAD_START = 2,
    WMS_EVENT_CACHE_DOWNLOAD_COMPLETE = 3,
    WMS_EVENT_CACHE_REDIRECT = 4,
    WMS_EVENT_CACHE_REDIRECT_TO_PROXY = 5,
    WMS_EVENT_CACHE_PRESTUFF_COMPLETE = 6,
    [hidden] WMS_NUM_CACHE_EVENTS = 7
}   WMS_CACHE_EVENT_TYPE;

typedef [public] enum WMS_PLAYLIST_EVENT_TYPE
{
    WMS_EVENT_PLAYLIST_SWITCH = 0,
    WMS_EVENT_PLAYLIST_CUE = 1,
    WMS_EVENT_PLAYLIST_MODIFY = 2,
    WMS_EVENT_PLAYLIST_FAILOVER = 3,
    [hidden] WMS_NUM_PLAYLIST_EVENTS = 4
}   WMS_PLAYLIST_EVENT_TYPE;



typedef [public] enum WMS_RECORD_PROGRESS_OPCODE
{
    WMS_RECORD_PROGRESS_ARCHIVE_STARTED     = 0,
    WMS_RECORD_PROGRESS_ARCHIVE_FINISHED    = 1,
} WMS_RECORD_PROGRESS_OPCODE;



/////////////////////////////////////////////////////////////////////////////
//
//
/////////////////////////////////////////////////////////////////////////////
[
    object,
    uuid(BE185FF0-6932-11d2-8B3B-006097B01206),
    version(9.0),
    pointer_default(unique),
    helpstring("Provides methods to retrieve the notification events that a plug-in subscribes to and to indicate when these events are fired.")
]
interface IWMSEventNotificationPlugin : IUnknown
{
    //
    // Find out which event types this plugin is interested in.
    //
    [helpstring("Called by the server to retrieve the events that a plug-in subscribes to.")] HRESULT 
    GetHandledEvents( [out, retval] VARIANT *pvarEvents );

    //
    // Called by the server when one of the event types that this plugin
    // is interested in occurs.  If the plugin needs to do a significant
    // amount of work to process an event, it should not do so during this call!
    //
    [helpstring("Called by the server to signals that an event subscribed to by the plug-in has occurred.")] HRESULT 
    OnEvent(
                [in] WMS_EVENT *pEvent,
                [in] IWMSContext *pUserCtx,
                [in] IWMSContext *pPresentationCtx,
                [in] IWMSCommandContext *pCommandCtx );
};


///////////////////////////////////////////////////////////////////////////////
[
    object,
    uuid(BE185FF1-6932-11d2-8B3B-006097B01206),
    version(9.0),
    pointer_default(unique),
    helpstring("Provides methods to retrieve the authorization events that a plugin subscribes to and to indicate when these events are fired.")
]
interface IWMSEventAuthorizationPlugin : IUnknown
{
    //
    // Find out which event types this plugin authorizes
    //
    [helpstring("Called by the server to retrieve an array of the events that the plug-in can authorize.")] HRESULT 
    GetAuthorizedEvents( [out, retval] VARIANT *pvarEvents );

    //
    // Called by the server when one of the event types this plugin
    // authorizes occurs.  The server waits for a completion callback
    // before continuing.
    //
    [helpstring("Called by the server to request that a specific event be authorized.")] HRESULT 
    AuthorizeEvent(
                [in] WMS_EVENT *pEvent,
                [in] IWMSContext *pUserCtx,
                [in] IWMSContext *pPresentationCtx,
                [in] IWMSCommandContext *pCommandCtx,
                [in] IWMSEventAuthorizationCallback *pCallback,
                [in] VARIANT Context );
};


/////////////////////////////////////////////////////////////////////////////
[
    object,
    uuid(BE185FF2-6932-11d2-8B3B-006097B01206),
    version(9.0),
    pointer_default(unique),
    helpstring("Provides a method to report the results of an event authorization.")
]
interface IWMSEventAuthorizationCallback : IUnknown
{
    [helpstring("Called by a plug-in to return the result of the IWMSEventAuthorization::AuthorizeEvent method call.")] HRESULT 
    OnAuthorizeEvent(
                [in] long hr,
                [in] VARIANT Context );
};

