コード例 #1
0
 void NodeListener_2(object s, ExtensionNodeEventArgs args)
 {
     counters[2].Update(args);
 }
コード例 #2
0
        static void HandleUserDataMigration(object sender, ExtensionNodeEventArgs args)
        {
            if (args.Change != ExtensionChange.Add)
            {
                return;
            }

            var node = (UserDataMigrationNode)args.ExtensionNode;

            if (!CheckVersion(node, version))
            {
                return;
            }

            FilePath source = FilePath.Null;
            FilePath target = FilePath.Null;

            try {
                source = profile.GetLocation(node.SourceKind).Combine(node.SourcePath);
                target = UserProfile.Current.GetLocation(node.TargetKind).Combine(node.TargetPath);

                bool sourceIsDirectory = Directory.Exists(source);

                if (sourceIsDirectory)
                {
                    if (Directory.Exists(target))
                    {
                        return;
                    }
                }
                else
                {
                    if (File.Exists(target) || Directory.Exists(target) || !File.Exists(source))
                    {
                        return;
                    }
                }

                LoggingService.LogInfo("Migrating '{0}' to '{1}'", source, target);
                if (!sourceIsDirectory)
                {
                    FileService.EnsureDirectoryExists(target.ParentDirectory);
                }

                var handler = node.GetHandler();
                if (handler != null)
                {
                    handler.Migrate(source, target);
                    return;
                }

                if (sourceIsDirectory)
                {
                    DirectoryCopy(source, target);
                }
                else
                {
                    File.Copy(source, target);
                }
            } catch (Exception ex) {
                string message = string.Format("{0}: Failed to migrate '{1}' to '{2}'",
                                               node.Addin.Id, source.ToString() ?? "", target.ToString() ?? "");
                LoggingService.LogError(message, ex);
            }
        }
コード例 #3
0
 static void HandleExtensionNodeEventHandler(object sender, ExtensionNodeEventArgs args)
 {
     unitTestMarkers = AddinManager.GetExtensionNodes(TestMarkersPath).OfType <IUnitTestMarkers> ().ToArray();
 }
コード例 #4
0
ファイル: CSPluginManager.cs プロジェクト: SharpStar/Star
        protected virtual void OnExtensionChanged(object sender, ExtensionNodeEventArgs args)
        {
            var plugin = args.ExtensionObject as CSPlugin;

            if (plugin != null)
            {
                string id    = Addin.GetFullId(null, args.ExtensionNode.Addin.Id, args.ExtensionNode.Addin.Version);
                Addin  addin = AddinManager.Registry.GetAddin(id);

                if (args.Change == ExtensionChange.Add)
                {
                    var property = addin.Properties.SingleOrDefault(p => p.Name.Equals("star", StringComparison.OrdinalIgnoreCase));

                    if (property != null)
                    {
                        string verStr = string.Format("{0}.{1}.{2}.{3}", StarVersion.Major, StarVersion.Minor, StarVersion.Build, StarVersion.Revision);

                        if (Addin.CompareVersions(verStr, property.Value) > 0)
                        {
                            Logger.Error("Plugin {0} requires Star version {1}+. Load failed!", addin.Description.LocalId, property.Value);

                            AddinManager.Registry.DisableAddin(id);
                        }
                    }
                    else
                    {
                        Logger.Error("Plugin {0} does not define a minimum Star version requirement. Load failed!", addin.Description.LocalId);

                        AddinManager.Registry.DisableAddin(id);
                    }

                    string path = Path.GetDirectoryName(args.ExtensionObject.GetType().Assembly.Location);

                    ResolveEventHandler handler = (s, e) =>
                    {
                        AssemblyName reqName = new AssemblyName(e.Name);

                        string dllFile     = string.Format("{0}.dll", reqName.Name);
                        string fullDllPath = Path.Combine(path, dllFile);

                        return(Assembly.LoadFrom(fullDllPath));
                    };

                    AppDomain.CurrentDomain.AssemblyResolve += handler;

                    _plugins.AddOrUpdate(id, plugin, (k, p) => p);
                    plugin.Load();

                    Parallel.ForEach(_plugins.Values, x => x.PluginLoaded(plugin));

                    Logger.Info("Loaded plugin \"{0}\" ({1})", plugin.Name, addin.Version);
                }
                else if (args.Change == ExtensionChange.Remove)
                {
                    plugin.Unload();

                    Parallel.ForEach(_plugins.Values, x => x.PluginUnloaded(plugin));

                    CSPlugin removed;
                    while (!_plugins.TryRemove(id, out removed))
                    {
                        Thread.Sleep(1);
                    }

                    Logger.Info("Unloaded plugin \"{0}\"", plugin.Name);
                }
            }
        }