Swapper.NET Logo

Source Code Interfaces ~ IMetaDataExtractor.cs


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

}