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); }
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); }
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); }
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)); }); }
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); } }
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); } }