ViewVC Help
View File | Revision Log | Show Annotations | Download File | View Changeset | Root Listing
root/xmltv_parser/trunk/libxmltv/Core/XMLTVInstance.cs
Revision: 54
Committed: Fri Mar 8 08:51:10 2013 UTC (10 years, 6 months ago) by william
File size: 4606 byte(s)
Log Message:

File Contents

# Content
1 using System;
2 using System.Collections.Generic;
3 using System.Linq;
4 using System.Text;
5 using libxmltv.Interfaces;
6 using System.ComponentModel;
7 using System.Windows.Forms;
8 using System.Threading;
9
10 namespace libxmltv.Core
11 {
12 [Serializable]
13 internal class XMLTVRuntimeInstance : MarshalByRefObject, IXMLTVRuntimeInstance, ISerializer<XMLTVRuntimeInstance>, IGetCreatedInstanceEvent, ISetCreatedInstanceEvent, IDestroyInstance
14 {
15 Thread worker;
16 public XMLTVRuntimeInstance(string xmlfile)
17 {
18 worker = new Thread(new ParameterizedThreadStart(CreateInstance));
19 //CreateInstance(xmlfile);
20 worker.Start(xmlfile);
21 }
22 //public XMLTVRuntimeInstance(string xmlfile) : this(xmlfile, null) { }
23 //public XMLTVRuntimeInstance(string xmlfile, EventHandler<CancelEventArgs> t) { CreateInstance(xmlfile,t); }
24 private void CreateInstance(object xmlfile)
25 {
26 //CancelEvent = t;
27 using (XMLTVInstance instance = new XMLTVInstance(xmlfile.ToString(), this))
28 {
29 if (OnInstanceCreated != null)
30 {
31 OnInstanceCreated.Invoke(this,new EventArgs());
32 }
33 }
34 }
35
36 //internal XMLTVInstance Instance { get; private set; }
37
38 #region IXMLTV_LOADER members
39 public System.IO.FileInfo XmlFile { get; set; }
40 public string XmlDoc { get; set; }
41 #endregion
42 #region IXMLTV_PARSER Members
43 public IXMLTVSource Source { get; set; }
44 public Dictionary<string, IXMLTVChannel> Channels { get; set; }
45 public Dictionary<int, IXMLTVProgram> Programs { get; set; }
46 #endregion
47
48 public EventHandler<EventArgs> OnInstanceCreated { get; set; }
49 public EventHandler<EventArgs> GetOnInstanceCreated() { return OnInstanceCreated; }
50 public void SetOnInstanceCreated(EventHandler<EventArgs> event_instance) { OnInstanceCreated = event_instance; }
51
52 public IXMLTVSerializer<XMLTVRuntimeInstance> Serializer
53 {
54 get
55 {
56 ///* We have to set CancelEvent to null, before returning a new instance of the serializer otherwise all subscribers to the event will have to be marked as serializeable.
57 // Most subscribers will be of type: System.Windows.Forms which is not marked as serializable and will fail to serialize. */
58 //if (CancelEvent != null) { CancelEvent = null; }
59 return new XMLTVSerializer<XMLTVRuntimeInstance>(this);
60 }
61 }
62 public void DestroyInstance()
63 {
64 xmltv_logger.Log.Debug.WriteLine("Destoying Instance of: '{0}'", this.GetType().Name);
65 this.IsAborting = true;
66 if (worker == null)
67 {
68 xmltv_logger.Log.Debug.WriteLine("Unable to destroy instance of: '{0}' - worker thread is null", this.GetType().Name);
69 return;
70 }
71 else
72 {
73 if (worker.IsAlive)
74 {
75 xmltv_logger.Log.Verbose.Debug.WriteLine("Requesting Instance to Abort...");
76 while (worker.IsAlive)
77 {
78 worker.Abort();
79 Application.DoEvents();
80 }
81 }
82 else
83 {
84 xmltv_logger.Log.Debug.WriteLine("Instance of: '{0}'- already destroyed.", this.GetType().Name);
85 }
86 }
87 }
88 public bool IsAborting
89 {
90 get;
91 private set;
92 }
93 }
94
95 internal class XMLTVInstance : IDisposable
96 {
97 public XMLTVInstance(string xmlfile, XMLTVRuntimeInstance instance)
98 {
99 CreateLoader(xmlfile, instance);
100 CreateParser(instance);
101 }
102
103 private void CreateLoader(string xml_file, XMLTVRuntimeInstance instance)
104 {
105 //XMLTVLoader loader = new XMLTVLoader(xml_file, instance);
106 XMLTVLoader.CreateInstance(xml_file, instance);
107 }
108 private void CreateParser(XMLTVRuntimeInstance instance)
109 {
110 //XMLTVParser parser = new XMLTVParser(instance);
111 XMLTVParser.CreateInstance(instance);
112 }
113
114 public void Dispose()
115 {
116 //throw new NotImplementedException();
117 }
118 }
119 }