using System;
using System.Xml.Schema;
namespace RevolutionaryStuff.P2P.Basics
{
///
/// A meta data extractor
///
public interface IMetaDataExtractor : ISchemaResolver
{
///
/// A unique ID for this extractor
///
string Id { get; }
///
/// Is there any work that can be done on the current target
///
/// The target of our extraction
/// Our affinity todo work
MetaDataExtractorTodoStatus IsThereWorkToDo(object target);
///
/// Begin the process of extracting metadata for the target
///
/// The target of our extraction
/// The AsyncCallback delegate.
/// An object containing state information for this request.
/// An Async result that should be passed to EndExtract
IAsyncResult BeginExtract(object target, AsyncCallback callback, object state);
///
/// End the extraction process and return the complete set of extracted metadata
///
/// The AsyncResult that was returned from BeginExtract
/// The metadata as an Xml String
string EndExtract(IAsyncResult ar);
///
/// Is this extracter overloaded with work?
///
bool IsOverloaded { get; }
}
public enum MetaDataExtractorTodoStatus
{
ReadyToWork,
AllComplete,
WaitingForPreReqs
}
public interface IMetaDataExtractor2
{
IAsyncResult BeginExtract(object target, int priority, BeforeMetaDataExtractorEventHandler before, AfterMetaDataExtractorEventHandler after, AsyncCallback callback, object state);
void EndExtract(IAsyncResult ar);
XmlSchemaCollection SchemaCollection { get; }
}
#region MetaDataExgtractorEventArgs And Delegates
public abstract class BaseMetaDataExtractorEventArgs
{
public IMetaDataExtractor Extractor;
public object Target;
public IAsyncResult AsyncResult;
protected BaseMetaDataExtractorEventArgs(IMetaDataExtractor extractor, object target, IAsyncResult asyncResult)
{
if (null==extractor) throw new ArgumentNullException("extractor");
if (null==asyncResult) throw new ArgumentNullException("asyncResult");
this.Extractor = extractor;
this.Target = target;
this.AsyncResult = asyncResult;
}
}
public class BeforeMetaDataExtractorEventArgs : BaseMetaDataExtractorEventArgs
{
public bool Cancel;
public BeforeMetaDataExtractorEventArgs(IMetaDataExtractor extractor, object target, IAsyncResult asyncResult) : base(extractor, target, asyncResult)
{}
}
public delegate void BeforeMetaDataExtractorEventHandler(object sender, BeforeMetaDataExtractorEventArgs e);
public class AfterMetaDataExtractorEventArgs : BaseMetaDataExtractorEventArgs
{
public string Xml;
public AfterMetaDataExtractorEventArgs(IMetaDataExtractor extractor, object target, IAsyncResult asyncResult) : base(extractor, target, asyncResult)
{}
}
public delegate void AfterMetaDataExtractorEventHandler(object sender, AfterMetaDataExtractorEventArgs e);
#endregion
}
|