/[RomCheater]/trunk/RomCheater.PluginFramework/Core/PluginLoader.cs
ViewVC logotype

Diff of /trunk/RomCheater.PluginFramework/Core/PluginLoader.cs

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 84 by william, Wed May 9 17:55:55 2012 UTC revision 148 by william, Sun May 27 23:33:54 2012 UTC
# Line 5  using System.Text; Line 5  using System.Text;
5  using RomCheater.PluginFramework.Interfaces;  using RomCheater.PluginFramework.Interfaces;
6  using RomCheater.Logging;  using RomCheater.Logging;
7  using System.IO;  using System.IO;
8    using System.Reflection;
9    
10  namespace RomCheater.PluginFramework.Core  namespace RomCheater.PluginFramework.Core
11  {  {
# Line 20  namespace RomCheater.PluginFramework.Cor Line 21  namespace RomCheater.PluginFramework.Cor
21    
22          public void LoadPlugins()          public void LoadPlugins()
23          {          {
24              logger.Info.WriteLine("Loading Plugins...");              try
25                {
26                    logger.Info.WriteLine("Loading Plugins...");
27    
28                    string PluginPath = string.Format(@"{0}\Plugins", typeof(PluginLoader).Assembly.Location.Replace(@"\RomCheater.PluginFramework.dll", ""));
29                    logger.Debug.WriteLine("Plugins Path: {0}", PluginPath);
30                    List<string> dlls = new List<string>(Directory.GetFiles(PluginPath, "*.dll"));
31                    logger.Debug.WriteLine("  Found: {0} plugin dlls", dlls.Count);
32                    foreach (string dll in dlls)
33                    {
34                        FileInfo fi = new FileInfo(dll);
35                        logger.Debug.WriteLine("    plugin[{0}]: {1}", dlls.IndexOf(dll), fi.Name);
36                        GetConfigPluginsFromDll(fi);
37                        GetInputPluginsFromDll(fi);
38                        GetWindowPluginsFromDll(fi);
39                    }
40    
41              string PluginPath = string.Format(@"{0}\Plugins", typeof(PluginLoader).Assembly.Location.Replace(@"\RomCheater.PluginFramework.dll", ""));                  logger.Info.WriteLine("  Loaded {0} config plugins", LoadedConfigPlugins.Count);
42              logger.Debug.WriteLine("Plugins Path: {0}", PluginPath);                  logger.Info.WriteLine("  Loaded {0} input plugins", LoadedInputPlugins.Count);
43              List<string> dlls = new List<string>(Directory.GetFiles(PluginPath, "*.dll"));                  logger.Info.WriteLine("  Loaded {0} window plugins", LoadedWindowPlugins.Count);
44              logger.Debug.WriteLine("  Found: {0} plugin dlls", dlls.Count);  
45              foreach (string dll in dlls)                  logger.Info.WriteLine("Plugins Loaded.");
46                }
47                catch (ReflectionTypeLoadException ex)
48              {              {
49                  FileInfo fi = new FileInfo(dll);                  StringBuilder builder = new StringBuilder();
50                  logger.Debug.WriteLine("    plugin[{0}]: {1}", dlls.IndexOf(dll), fi.Name);                  if (ex.LoaderExceptions.Count() > 0)
51                    {
52                        foreach (Exception c in ex.LoaderExceptions)
53                        {
54                            builder.AppendLine(c.ToString());
55                        }
56                    }
57                    logger.Error.WriteLine("Failed to load one or more plugins{0}Possible Reason:{0}{1}", System.Environment.NewLine, builder.ToString());
58                }
59                catch (Exception ex)
60                {
61                    logger.Error.WriteLine("Failed to load one or more plugins{0}Possible Reason:{0}{1}", System.Environment.NewLine, ex.ToString());
62              }              }
             logger.Info.WriteLine("Plugins Loaded.");  
63          }          }
64          public List<IConfigPlugin> LoadedConfigPlugins { get; private set; }          public List<IConfigPlugin> LoadedConfigPlugins { get; private set; }
65          public List<IInputPlugin> LoadedInputPlugins { get; private set; }          public List<IInputPlugin> LoadedInputPlugins { get; private set; }
66          public List<IWindowPlugin> LoadedWindowPlugins { get; private set; }          public List<IWindowPlugin> LoadedWindowPlugins { get; private set; }
67    
68            public IConfigPlugin GetConfigPlugin(string t)
69            {
70                foreach (IConfigPlugin c in LoadedConfigPlugins) { if (c.ToString().ToLower() == t.ToLower()) { return c; } }
71                return GetGenericConfigPlugin();
72            }
73            private IConfigPlugin GetGenericConfigPlugin()
74            {
75                foreach (IConfigPlugin c in LoadedConfigPlugins) { if (c.ID.ToString().ToLower() == "478e225b-c3e8-9280-57ca-384b884fc4cc".ToLower()) { return c; } }
76                return null;
77            }
78            public IInputPlugin GetInputPlugin(string t)
79            {
80                foreach (IInputPlugin c in LoadedInputPlugins) { if (c.ToString().ToLower() == t.ToLower()) { return c; } }
81                return GetGenericInputPlugin();
82            }
83            private IInputPlugin GetGenericInputPlugin()
84            {
85                foreach (IInputPlugin c in LoadedInputPlugins) { }
86                return null;
87            }
88            public IWindowPlugin GetWindowPlugin(string t)
89            {
90                foreach (IWindowPlugin c in LoadedWindowPlugins) { if (c.ToString().ToLower() == t.ToLower()) { return c; } }
91                return GetGenericWindowPlugin();
92            }
93            private IWindowPlugin GetGenericWindowPlugin()
94            {
95                foreach (IWindowPlugin c in LoadedWindowPlugins) { }
96                return null;
97            }
98          #endregion          #endregion
99    
100            private void GetConfigPluginsFromDll(FileInfo dll)
101            {
102                logger.Debug.WriteLine("  Getting Config plugins contained in {0}", dll.Name);
103                Assembly asm = Assembly.LoadFile(dll.FullName);
104                List<Type> types = new List<Type>(asm.GetTypes());
105                foreach (Type type in types)
106                {
107                    if (type.BaseType == typeof(ConfigPlugin))
108                    {
109                        ConstructorInfo ci = null;
110                        ci = type.GetConstructor(new Type[] {});
111                        if (ci == null)
112                        {
113                            throw new NullReferenceException(string.Format("Unable to bind to constructor for type: {0}", type.Name));
114                        }
115                        else
116                        {
117                            object o = ci.Invoke(new object[] { });
118                            IConfigPlugin c = (IConfigPlugin)o;
119                            if (c == null)
120                            {
121                                throw new NullReferenceException(string.Format("Failed to cast type {0} to IConfigPlugin", type.Name));
122                            }
123                            else
124                            {
125                                logger.Debug.WriteLine("    Loaded Config Plugin [name={0}] from {1}", c.Name, dll.Name);
126                                LoadedConfigPlugins.Add(c);
127                            }
128                        }
129                    }
130                }
131            }
132            private void GetInputPluginsFromDll(FileInfo dll)
133            {
134                logger.Debug.WriteLine("  Getting Input plugins contained in {0}", dll.Name);
135                Assembly asm = Assembly.LoadFile(dll.FullName);
136                List<Type> types = new List<Type>(asm.GetTypes());
137                foreach (Type type in types)
138                {
139                    if (type.BaseType == typeof(InputPlugin))
140                    {
141                        ConstructorInfo ci = null;
142                        ci = type.GetConstructor(new Type[] { });
143                        if (ci == null)
144                        {
145                            throw new NullReferenceException(string.Format("Unable to bind to constructor for type: {0}", type.Name));
146                        }
147                        else
148                        {
149                            object o = ci.Invoke(new object[] { });
150                            IInputPlugin c = (IInputPlugin)o;
151                            if (c == null)
152                            {
153                                throw new NullReferenceException(string.Format("Failed to cast type {0} to IConfigPlugin", type.Name));
154                            }
155                            else
156                            {
157                                logger.Debug.WriteLine("    Loaded Input Plugin [name={0}] from {1}", c.Name, dll.Name);
158                                LoadedInputPlugins.Add(c);
159                            }
160                        }
161                    }
162                }
163            }
164            private void GetWindowPluginsFromDll(FileInfo dll)
165            {
166                logger.Debug.WriteLine("  Getting Window plugins contained in {0}", dll.Name);
167                Assembly asm = Assembly.LoadFile(dll.FullName);
168                List<Type> types = new List<Type>(asm.GetTypes());
169                foreach (Type type in types)
170                {
171                    if (type.BaseType == typeof(WindowPlugin))
172                    {
173                        ConstructorInfo ci = null;
174                        ci = type.GetConstructor(new Type[] { });
175                        if (ci == null)
176                        {
177                            throw new NullReferenceException(string.Format("Unable to bind to constructor for type: {0}", type.Name));
178                        }
179                        else
180                        {
181                            object o = ci.Invoke(new object[] { });
182                            IWindowPlugin c = (IWindowPlugin)o;
183                            if (c == null)
184                            {
185                                throw new NullReferenceException(string.Format("Failed to cast type {0} to IConfigPlugin", type.Name));
186                            }
187                            else
188                            {
189                                logger.Debug.WriteLine("    Loaded Window Plugin [name={0}] from {1}", c.Name, dll.Name);
190                                LoadedWindowPlugins.Add(c);
191                            }
192                        }
193                    }
194                }
195            }
196      }      }
197  }  }

Legend:
Removed from v.84  
changed lines
  Added in v.148

  ViewVC Help
Powered by ViewVC 1.1.22