Пример #1
0
 IEnumerable <Type> LoadPluginAssembly(System.Reflection.Assembly asm)
 {
     try {
         var res = asm.GetTypes()
                   .Where(type => type.GetCustomAttributes(typeof(PluginAttribute), true).Length > 0)
                   .Where(type => type.GetInterfaces().Contains(typeof(IPlugin)));
         foreach (var settingtype in asm.GetTypes().Where(type => type.GetCustomAttributes(typeof(PecaSettingsAttribute), true).Length > 0))
         {
             foreach (var attr in settingtype.GetCustomAttributes(typeof(PecaSettingsAttribute), true).Cast <PecaSettingsAttribute>())
             {
                 if (attr.Alias != null)
                 {
                     PecaSettings.RegisterType(attr.Alias, settingtype);
                 }
                 else
                 {
                     PecaSettings.RegisterType(settingtype.FullName, settingtype);
                 }
             }
         }
         foreach (var enumtype in asm.GetTypes().Where(type => type.IsEnum && type.IsPublic && !type.IsNested))
         {
             PecaSettings.RegisterType(enumtype.FullName, enumtype);
         }
         return(res);
     }
     catch (BadImageFormatException) {
         return(Enumerable.Empty <Type>());
     }
     catch (System.Reflection.ReflectionTypeLoadException) {
         return(Enumerable.Empty <Type>());
     }
 }
Пример #2
0
 IEnumerable <Type> LoadPluginAssembly(System.Reflection.Assembly asm)
 {
     try {
         var res = asm.GetTypes()
                   .Where(type => type.GetCustomAttributes(typeof(PluginAttribute), true).Length > 0)
                   .Where(type => type.GetInterfaces().Contains(typeof(IPlugin)))
                   .OrderBy(type => ((PluginAttribute)(type.GetCustomAttributes(typeof(PluginAttribute), true)[0])).Priority);
         foreach (var settingtype in asm.GetTypes().Where(type => type.GetCustomAttributes(typeof(PecaSettingsAttribute), true).Length > 0))
         {
             PecaSettings.RegisterType(settingtype);
         }
         return(res);
     }
     catch (System.Reflection.ReflectionTypeLoadException) {
         return(Enumerable.Empty <Type>());
     }
 }
Пример #3
0
        public AppBase(string basepath, string[] args)
        {
            Args     = args;
            basePath = basepath;
            var opts        = optionParser.Parse(args);
            var optSettings = opts.FirstOrDefault(opt => opt.LongName == "--settings");

            if (optSettings != null)
            {
                SettingsFileName = optSettings.Arguments[0];
            }
            else
            {
                SettingsFileName = PecaSettings.DefaultFileName;
            }
            var optLinkPID = opts.FirstOrDefault(opt => opt.LongName == "--linkPID");

            if (optLinkPID != null)
            {
                int pid = 0;
                if (Int32.TryParse(optLinkPID.Arguments[0], out pid))
                {
                    try {
                        LinkProcess         = System.Diagnostics.Process.GetProcessById(pid);
                        LinkProcess.Exited += (sender, ev) => {
                            Stop();
                        };
                        LinkProcess.EnableRaisingEvents = true;
                    }
                    catch (Exception) {
                    }
                }
            }
            settings           = new PecaSettings(SettingsFileName);
            peerCast.AgentName = AppSettingsReader.GetString("AgentName", "PeerCastStation");
            LoadPlugins();
        }