示例#1
0
        private void GetServices(IList <System.ServiceProcess.ServiceBase> services, PluginTreeNode node)
        {
            if (services == null || node == null)
            {
                return;
            }

            if (node.NodeType != PluginTreeNodeType.Empty)
            {
                object value = node.UnwrapValue(ObtainMode.Auto, this, null);

                if (value is System.ServiceProcess.ServiceBase)
                {
                    services.Add((System.ServiceProcess.ServiceBase)value);
                }
                else if (value is IWorker)
                {
                    //注意:服务的运行时的名称与安装时注册使用的名称必须相同,但服务的注册名与Worker的Name属性并不确保一致!
                    //因此,运行时必须使用节点名作为后台服务的名称,以确保与服务安装过程中的注册名一致。
                    services.Add(new ServiceWrapper((IWorker)value, node.Name));
                }
            }

            foreach (PluginTreeNode child in node.Children)
            {
                this.GetServices(services, child);
            }
        }
		protected override Filter CreateFilter(PluginTreeNode node, FilterScope scope)
		{
			var value = node.UnwrapValue(ObtainMode.Auto, null);

			if(value is Filter)
				return (Filter)value;

			var filter = new Filter(value, this.GetFilterScope(scope), null);
			node.Tree.Mount(node, filter);
			return filter;
		}
        protected override FilterInfo CreateFilter(PluginTreeNode node, FilterScope scope)
        {
            var value = node.UnwrapValue(ObtainMode.Auto, null);

            if (value is FilterInfo)
            {
                return((FilterInfo)value);
            }

            if (value is IFilter)
            {
                var filterInfo = new FilterInfo((IFilter)value, this.GetFilterScope(scope));
                node.Tree.Mount(node, filterInfo);
                return(filterInfo);
            }

            return(null);
        }
示例#4
0
        public void WritePluginTree(ICommandOutlet output, PluginTreeNode node, int maxDepth, int depth, int index, bool isFullPath)
        {
            if (node == null)
            {
                return;
            }

            var indent = depth > 0 ? new string('\t', depth) : string.Empty;

            if (depth > 0)
            {
                output.Write(CommandOutletColor.DarkMagenta, indent + "[{0}.{1}] ", depth, index);
            }

            output.Write(isFullPath ? node.FullPath : node.Name);
            output.Write(CommandOutletColor.DarkGray, " [{0}]", node.NodeType);

            if (node.Plugin == null)
            {
                output.WriteLine();
            }
            else
            {
                output.Write(CommandOutletColor.DarkGreen, "@");
                output.WriteLine(CommandOutletColor.DarkGray, node.Plugin.Name);
            }

            var target = node.UnwrapValue(ObtainMode.Never, null);

            if (target != null)
            {
                output.WriteLine(CommandOutletColor.DarkYellow, "{0}{1}", indent, target.GetType().FullName);
            }

            if (maxDepth > 0 && depth >= maxDepth)
            {
                return;
            }

            for (int i = 0; i < node.Children.Count; i++)
            {
                WritePluginTree(output, node.Children[i], maxDepth, depth + 1, i + 1, isFullPath);
            }
        }
		private void GetServices(IList<System.ServiceProcess.ServiceBase> services, PluginTreeNode node)
		{
			if(services == null || node == null)
				return;

			if(node.NodeType != PluginTreeNodeType.Empty)
			{
				object value = node.UnwrapValue(ObtainMode.Auto, this, null);

				if(value is System.ServiceProcess.ServiceBase)
					services.Add((System.ServiceProcess.ServiceBase)value);
				else if(value is IWorker)
				{
					//注意:服务的运行时的名称与安装时注册使用的名称必须相同,但服务的注册名与Worker的Name属性并不确保一致!
					//因此,运行时必须使用节点名作为后台服务的名称,以确保与服务安装过程中的注册名一致。
					services.Add(new ServiceWrapper((IWorker)value, node.Name));
				}
			}

			foreach(PluginTreeNode child in node.Children)
				this.GetServices(services, child);
		}
示例#6
0
            public PluginNodeDescriptor(PluginTreeNode node)
            {
                if (node == null)
                {
                    throw new ArgumentNullException(nameof(node));
                }

                this.Name     = node.Name;
                this.Path     = node.Path;
                this.FullPath = node.FullPath;
                this.NodeType = node.NodeType;
                this.Value    = node.UnwrapValue(ObtainMode.Never);

                if (node.HasProperties)
                {
                    this.Properties = new Dictionary <string, string>();

                    foreach (var property in node.Properties)
                    {
                        this.Properties.Add(property.Name, property.RawValue);
                    }
                }
            }
        private void GetServiceInstallers(IList <ServiceInstaller> installers, PluginTreeNode node)
        {
            if (installers == null || node == null)
            {
                return;
            }

            if (node.NodeType != PluginTreeNodeType.Empty)
            {
                Type   serviceType = null;
                bool   disabled    = false;
                string serviceName = node.Name;

                if (node.NodeType == PluginTreeNodeType.Custom)
                {
                    var worker = node.UnwrapValue <Zongsoft.Services.IWorker>(ObtainMode.Auto, this, null);

                    if (worker != null)
                    {
                        serviceName = worker.Name;
                        serviceType = worker.GetType();
                        disabled    = !worker.Enabled;
                    }
                }
                else
                {
                    if (typeof(IWorker).IsAssignableFrom(node.ValueType))
                    {
                        serviceType = node.ValueType;
                    }

                    disabled = ((Builtin)node.Value).Properties.GetValue <bool>("disabled", false);
                }

                if (serviceType != null)
                {
                    ServiceInstaller installer = new ServiceInstaller();

                    installer.DelayedAutoStart = false;
                    installer.ServiceName      = serviceName;
                    installer.StartType        = (disabled ? ServiceStartMode.Disabled : ServiceStartMode.Automatic);

                    //设置安装服务的描述文本
                    var descriptionAttribute = (DescriptionAttribute)Attribute.GetCustomAttribute(serviceType, typeof(DescriptionAttribute));
                    if (descriptionAttribute != null)
                    {
                        installer.Description = Resources.ResourceUtility.GetString(descriptionAttribute.Description, serviceType.Assembly);
                    }

                    //设置安装服务的显示名称
                    var displayAttribute = (DisplayNameAttribute)Attribute.GetCustomAttribute(serviceType, typeof(DisplayNameAttribute));
                    if (displayAttribute != null)
                    {
                        installer.DisplayName = Resources.ResourceUtility.GetString(displayAttribute.DisplayName, serviceType.Assembly) + " (" + serviceName + ")";
                    }

                    installers.Add(installer);
                }
            }

            foreach (PluginTreeNode child in node.Children)
            {
                this.GetServiceInstallers(installers, child);
            }
        }
		private void GetServiceInstallers(IList<ServiceInstaller> installers, PluginTreeNode node)
		{
			if(installers == null || node == null)
				return;

			if(node.NodeType != PluginTreeNodeType.Empty)
			{
				Type serviceType = null;
				bool disabled = false;
				string serviceName = node.Name;

				if(node.NodeType == PluginTreeNodeType.Custom)
				{
					var worker = node.UnwrapValue<Zongsoft.Services.IWorker>(ObtainMode.Auto, this, null);

					if(worker != null)
					{
						serviceName = worker.Name;
						serviceType = worker.GetType();
						disabled = worker.Disabled;
					}
				}
				else
				{
					if(typeof(IWorker).IsAssignableFrom(node.ValueType))
						serviceType = node.ValueType;

					disabled = ((Builtin)node.Value).Properties.GetValue<bool>("disabled", false);
				}

				if(serviceType != null)
				{
					ServiceInstaller installer = new ServiceInstaller();

					installer.DelayedAutoStart = false;
					installer.ServiceName = serviceName;
					installer.StartType = (disabled ? ServiceStartMode.Disabled : ServiceStartMode.Automatic);

					//设置安装服务的描述文本
					var descriptionAttribute = (DescriptionAttribute)Attribute.GetCustomAttribute(serviceType, typeof(DescriptionAttribute));
					if(descriptionAttribute != null)
						installer.Description = Resources.ResourceUtility.GetString(descriptionAttribute.Description, serviceType.Assembly);

					//设置安装服务的显示名称
					var displayAttribute = (DisplayNameAttribute)Attribute.GetCustomAttribute(serviceType, typeof(DisplayNameAttribute));
					if(displayAttribute != null)
						installer.DisplayName = Resources.ResourceUtility.GetString(displayAttribute.DisplayName, serviceType.Assembly) + " (" + serviceName + ")";

					installers.Add(installer);
				}
			}

			foreach(PluginTreeNode child in node.Children)
				this.GetServiceInstallers(installers, child);
		}
示例#9
0
        public static void PrintPluginNode(ICommandOutlet output, PluginTreeNode node, ObtainMode obtainMode, int maxDepth)
        {
            if (node == null)
            {
                return;
            }

            output.Write(CommandOutletColor.DarkYellow, "[{0}]", node.NodeType);
            output.WriteLine(node.FullPath);
            output.Write(CommandOutletColor.DarkYellow, "Plugin File: ");

            if (node.Plugin == null)
            {
                output.WriteLine(CommandOutletColor.Red, "N/A");
            }
            else
            {
                output.WriteLine(node.Plugin.FilePath);
            }

            output.Write(CommandOutletColor.DarkYellow, "Node Properties: ");
            output.WriteLine(node.Properties.Count);

            if (node.Properties.Count > 0)
            {
                output.WriteLine(CommandOutletColor.Gray, "{");

                foreach (PluginExtendedProperty property in node.Properties)
                {
                    output.Write(CommandOutletColor.DarkYellow, "\t" + property.Name);
                    output.Write(" = ");
                    output.Write(property.RawValue);

                    if (property.Value != null)
                    {
                        output.Write(CommandOutletColor.DarkGray, " [");
                        output.Write(CommandOutletColor.Blue, property.Value.GetType().FullName);
                        output.Write(CommandOutletColor.DarkGray, "]");
                    }

                    output.WriteLine();
                }

                output.WriteLine(CommandOutletColor.Gray, "}");
            }

            output.WriteLine(CommandOutletColor.DarkYellow, "Children: {0}", node.Children.Count);
            if (node.Children.Count > 0)
            {
                output.WriteLine();

                foreach (var child in node.Children)
                {
                    output.WriteLine(child);
                }
            }

            object value = node.UnwrapValue(obtainMode, null);

            if (value != null)
            {
                output.WriteLine();
                output.WriteLine(Zongsoft.Runtime.Serialization.Serializer.Text.Serialize(value));
            }
        }
		private Filter GetFilter(PluginTreeNode node, FilterScope scope)
		{
			return node.UnwrapValue<Filter>(ObtainMode.Auto, null, ctx =>
			{
				var instance = PluginUtility.BuildBuiltin(ctx.Builtin, new string[]{ "order", "action", "method"});

				if(instance == null)
					return;

				ctx.Result = new Filter(instance,
				                 scope,
				                 ctx.Builtin.Properties.GetValue<int>("order", Filter.DefaultOrder));
			});
		}
示例#11
0
 public override IHttpController CreateController(System.Net.Http.HttpRequestMessage request)
 {
     return(_controllerNode.UnwrapValue(ObtainMode.Alway) as IHttpController);
 }
 protected override object CreateService()
 {
     return(_node.UnwrapValue(ObtainMode.Auto, this));
 }
		public static void WritePluginNode(ITerminal terminal, PluginTreeNode node, ObtainMode obtainMode, int maxDepth)
		{
			if(node == null)
				return;

			terminal.Write(TerminalColor.DarkYellow, "[{0}]", node.NodeType);
			terminal.WriteLine(node.FullPath);
			terminal.Write(TerminalColor.DarkYellow, "Plugin File: ");

			if(node.Plugin == null)
				terminal.WriteLine(TerminalColor.Red, "N/A");
			else
				terminal.WriteLine(node.Plugin.FilePath);

			terminal.Write(TerminalColor.DarkYellow, "Node Properties: ");
			terminal.WriteLine(node.Properties.Count);

			if(node.Properties.Count > 0)
			{
				terminal.WriteLine(TerminalColor.Gray, "{");

				foreach(PluginExtendedProperty property in node.Properties)
				{
					terminal.Write(TerminalColor.DarkYellow, "\t" + property.Name);
					terminal.Write(" = ");
					terminal.Write(property.RawValue);

					if(property.Value != null)
					{
						terminal.Write(TerminalColor.DarkGray, " [");
						terminal.Write(TerminalColor.Blue, property.Value.GetType().FullName);
						terminal.Write(TerminalColor.DarkGray, "]");
					}

					terminal.WriteLine();
				}

				terminal.WriteLine(TerminalColor.Gray, "}");
			}

			terminal.WriteLine(TerminalColor.DarkYellow, "Children: {0}", node.Children.Count);
			if(node.Children.Count > 0)
			{
				terminal.WriteLine();

				foreach(var child in node.Children)
				{
					terminal.WriteLine(child);
				}
			}

			object value = node.UnwrapValue(obtainMode, null);
			if(value != null)
			{
				terminal.WriteLine();
				Zongsoft.Runtime.Serialization.Serializer.Text.Serialize(terminal.OutputStream, value);
			}
		}
示例#14
0
        public static void PrintPluginNode(ICommandOutlet output, PluginTreeNode node, ObtainMode obtainMode, int maxDepth)
        {
            if (node == null)
            {
                return;
            }

            output.Write(CommandOutletColor.DarkYellow, "[{0}]", node.NodeType);
            output.WriteLine(node.FullPath);
            output.Write(CommandOutletColor.DarkYellow, "Plugin File: ");

            if (node.Plugin == null)
            {
                output.WriteLine(CommandOutletColor.Red, "N/A");
            }
            else
            {
                output.WriteLine(node.Plugin.FilePath);
            }

            output.Write(CommandOutletColor.DarkYellow, "Node Properties: ");
            output.WriteLine(node.Properties.Count);

            if (node.Properties.Count > 0)
            {
                output.WriteLine(CommandOutletColor.Gray, "{");

                foreach (PluginExtendedProperty property in node.Properties)
                {
                    output.Write(CommandOutletColor.DarkYellow, "\t" + property.Name);
                    output.Write(" = ");
                    output.Write(property.RawValue);

                    if (property.Value != null)
                    {
                        output.Write(CommandOutletColor.DarkGray, " [");
                        output.Write(CommandOutletColor.Blue, property.Value.GetType().FullName);
                        output.Write(CommandOutletColor.DarkGray, "]");
                    }

                    output.WriteLine();
                }

                output.WriteLine(CommandOutletColor.Gray, "}");
            }

            output.WriteLine(CommandOutletColor.DarkYellow, "Children: {0}", node.Children.Count);
            if (node.Children.Count > 0)
            {
                output.WriteLine();

                foreach (var child in node.Children)
                {
                    output.WriteLine(child);
                }
            }

            object value = node.UnwrapValue(obtainMode);

            if (value != null)
            {
                var json = JsonSerializer.Serialize(value, new JsonSerializerOptions()
                {
                    MaxDepth         = maxDepth,
                    WriteIndented    = true,
                    ReferenceHandler = ReferenceHandler.Preserve,
                });

                output.WriteLine();
                output.WriteLine(json);
            }
        }