IWMSCacheProxyServerCallback.OnDownloadContentProgress (C#)
The OnDownloadContentProgress method is called by the server to respond when a cache plug-in calls IWMSCacheProxyServer::DownloadContent. The OnDownloadContentProgress method is called every time content is downloaded. Therefore, it is called every time an entry in a playlist has been downloaded. However, it is not guaranteed to be called in the order of the entries.
void IWMSCacheProxyServerCallback.OnDownloadContentProgress(
int lHr,
WMS_RECORD_PROGRESS_OPCODE opCode,
IWMSContext pArchiveContext,
object varContext
);
Arguments
[in] int indicating whether the call to IWMSCacheProxyServer.DownloadContent. |
|
[in] Member of the WMS_RECORD_PROGRESS_OPCODE enumeration type indicating the state of the download. This must be one of the following values. |
Value |
Description |
---|---|
WMS_RECORD_PROGRESS_ARCHIVE_STARTED |
The requested content is being saved. |
WMS_RECORD_PROGRESS_ARCHIVE_FINISHED |
The archiving process has been completed. |
[in] IWMSContextIWMSContext Object (C#) containing a pointer to an INSSBufferINSSBuffer Object (C#) that contains the serialized metadata for the media item being downloaded. The metadata must be persisted by the plug-in. For more information, see Downloading Content. |
|
[in] object containing a value defined by the plug-in when it called IWMSCacheProxyServer.DownLoadContent. For example, your plug-in can use this parameter to persist state information. The server does not alter this value and passes it back when calling OnDownloadContentProgress. |
Return Value
This method does not return a value. To report an error, the plug-in can throw a COMException object to the server. If the plug-in uses the IWMSEventLogIWMSEventLog Object (C#) to log error information, it is recommended that it throw NS_E_PLUGIN_ERROR_REPORTED (0xC00D157D). Typically, the server attempts to make plug-in error information available to the server object model, the Windows Event Viewer, and the troubleshooting list in the details pane of the Windows Media Services MMC. However, if the plug-in uses the IWMSEventLog object to send custom error information to the Windows Event Viewer, throwing NS_E_PLUGIN_ERROR_REPORTED stops the server from also logging to the event viewer. For more information about plug-in error information, see Identifying Plug-in Errors.
Example
using Microsoft.WindowsMediaServices.Interop;
using System.Runtime.InteropServices;
void IWMSCacheProxyServerCallback.OnDownloadContentProgress(
int lHr,
WMS_RECORD_PROGRESS_OPCODE opCode,
IWMSContext pArchiveContext,
object varContext)
{
try
{
// The call to IWMSCacheProxyServer.DownloadContentProgress
// succeeded.
if(lHr==0)
{
// The archive has been started.
if(opCode==WMS_RECORD_PROGRESS_OPCODE.WMS_RECORD_PROGRESS_ARCHIVE_STARTED)
{
// Retrieve the name of the download file.
INSSBuffer NSBuffer=null;
Guid guid = typeof(INSSBuffer).GUID;
Object obj;
pArchiveContext.GetAndQueryIUnknownValue(WMSDefines.WMS_ARCHIVE_CONTENT_DESCRIPTION_LIST_BUFFER,
WMSDefines.WMS_ARCHIVE_CONTENT_DESCRIPTION_LIST_BUFFER_ID,
ref guid,
out obj ,
0);
NSBuffer = (INSSBuffer)obj;
string CacheFile;
pArchiveContext.GetStringValue(WMSDefines.WMS_ARCHIVE_FILENAME,
WMSDefines.WMS_ARCHIVE_FILENAME_ID,
out CacheFile,
0);
// Retrieve the user-defined ContentInfo object
// from the varContext parameter.
ContentInfo ci = (ContentInfo)varContext;
// If this is not a playlist, assign the file
// name to the cache URL.
string s = GetStringFromNSSBuffer(NSBuffer);
if((ci.ContentType & 2)==0) // not a playlist
{
ci.CDLData = s;
ci.CacheUrl = CacheFile;
}
// This is a playlist.
else
{
PlaylistItem Item = new PlaylistItem();
Item.CacheUrl = CacheFile;
Item.CDLData = s;
ci.CDL.Add((object)Item);
}
}
}
}
catch(Exception e)
{
throw new COMException();
}
return;
}
Requirements
Reference: Add a reference to Microsoft.WindowsMediaServices.
Namespace: Microsoft.WindowsMediaServices.Interop.
Assembly: Microsoft.WindowsMediaServices.dll.
Library: WMSServerTypeLib.dll.
Platform: Windows Server 2003, Enterprise Edition; Windows Server 2003, Datacenter Edition; Windows Server 2008.