private static IBSharpProject SetupProject(IDictionary<string, string> adict, IUserLog log, BSharpBuilder builder) {
		    var project = new BSharpProject {IsFullyQualifiedProject = true};
		    project.IsFullyQualifiedProject = true;
            
            if (adict.ContainsKey("project")) {
	            project.ProjectName = adict["project"];
	            project.IsFullyQualifiedProject = false;
            }else if (adict.ContainsKey("arg1")) {
				project.ProjectName = adict["arg1"];
				project.IsFullyQualifiedProject = false;
            }


            if (!project.OutputAttributes.HasFlag(BSharpBuilderOutputAttributes.IncludeWork)) {
                if (!adict.ContainsKey("noIncludeWork")) {
                    project.OutputAttributes |= BSharpBuilderOutputAttributes.IncludeWork;
                }
            }

            if (adict.ContainsKey("out-layout")) {
                project.OutputAttributes = adict["out-layout"].To<BSharpBuilderOutputAttributes>();
            }

		    if (adict.ContainsKey("out")) {
			    project.MainOutputDirectory = adict["out"];
		    }
            
            if (adict.ContainsKey("log")) {
                project.LogOutputDirectory = adict["log"];
            }
		    
            if (adict.ContainsKey("extension")) {
			    project.OutputExtension = adict["extension"];
		    }

		    if (adict.ContainsKey("root")) {
			    project.RootDirectory = adict["root"];
		    }
            if (adict.ContainsKey("dot"))
            {
                project.GenerateGraph = adict["dot"].ToBool();
            }

            if (adict.ContainsKey("include")) {
                project.Targets.Paths.RemoveTarget("*");
                var parsed = ParseKeyValueEnumeration(adict["include"], ',', ':');
                foreach (var el in parsed) {
                    Console.WriteLine("Include: <" +el.Key+ "," + el.Value+">");
                    WriteTarget(project, el.Key, el.Value, BSharpBuilderTargetType.Include);
                }
            }

            if (adict.ContainsKey("exclude")) {
                var parsed = ParseKeyValueEnumeration(adict["exclude"], ',', ':');
                foreach (var el in parsed) {
                    Console.WriteLine("Exclude: <" + el.Key + "," + el.Value + ">");
                    WriteTarget(project, el.Key, el.Value, BSharpBuilderTargetType.Exclude);
                }
            }

		    project.Log = log;
			foreach (var c in adict) {
				if (c.Key.StartsWith("set-")) {
					project.Conditions[c.Key.Substring(4)] = c.Value;
					log.Info("set option " + c.Key.Substring(4) + " = " + c.Value);
				}
			}

			log.Info("root dir = " + project.GetRootDirectory());
			log.Info("out dir = " + project.GetOutputDirectory());
			log.Info("log dir = " + project.GetLogDirectory());

		    return project;
	    }
Exemple #2
0
        /// <summary>
        ///     Загружает конфигурационный файл из XML
        /// </summary>
        /// <param name="xml"></param>
        /// <param name="context"></param>
        public void LoadXmlConfig(XElement xml, IBSharpContext context = null)
        {
            foreach (var condition in xml.Elements("machine"))
            {
                var machine = condition.Attr("code").ToLowerInvariant();
                var not     = false;
                if (machine == "not" && !string.IsNullOrWhiteSpace(condition.Attr("name")))
                {
                    not     = true;
                    machine = condition.Attr("name").ToLowerInvariant();
                }
                if ((machine == MachineName && !not) || (not && machine != MachineName))
                {
                    var target = condition.Attr("use");
                    if (context == null)
                    {
                        throw new Exception("Cannot resolve machine-related config cause context is null");
                    }
                    var config = context[target];
                    if (config == null)
                    {
                        throw new Exception("Cannot resolve machine-related config");
                    }
                    xml = config.Compiled;
                    Log.Info("Usage config " + target + " because machine name is " + (not ? "not " : "") + MachineName);
                    break;
                }
            }
            this.BSharpContext = context;
            this.Definition    = xml;
            RootFolder         = xml.ResolveValue("root", RootFolder);
            RootFolder         = xml.ResolveValue(HostUtils.RootFolderXmlName, RootFolder);
            ConfigFolder       = xml.ResolveValue(HostUtils.ConfigFolderXmlName, ConfigFolder);
            DllFolder          = xml.ResolveValue(HostUtils.DllFolderXmlName, DllFolder);
            LogFolder          = xml.ResolveValue(HostUtils.LogFolderXmlName, LogFolder);
            TmpFolder          = xml.ResolveValue(HostUtils.TmpFolderXmlName, TmpFolder);
            LogLevel           = xml.ResolveValue(HostUtils.LogLevelXmlName, "Info").To <LogLevel>();
            UseApplicationName = xml.ResolveValue(HostUtils.UseApplicationName, "false").To <bool>();
            AuthCookieName     = xml.ResolveValue(HostUtils.AuthCookieName, AuthCookieName);
            AuthCookieDomain   = xml.ResolveValue(HostUtils.AuthCookieDomain, AuthCookieDomain);
            EncryptBasis       = xml.ResolveValue(HostUtils.EncryptBasis, Guid.NewGuid().ToString());
            DefaultPage        = xml.ResolveValue(HostUtils.DefaultPage, "default.html");
            MaxRequestSize     = xml.ResolveValue("maxrequestsize", "10000000").ToInt();
            RequireLogin       = xml.ResolveValue("requirelogin").ToBool();
            foreach (XElement bind in xml.Elements(HostUtils.BindingXmlName))
            {
                var  excludehost = bind.Attr("excludehost").SmartSplit();
                bool process     = true;
                if (0 != excludehost.Count)
                {
                    var machine = Environment.MachineName.ToUpperInvariant();
                    foreach (var h in excludehost)
                    {
                        if (machine == h.ToUpperInvariant().Trim())
                        {
                            process = false;
                            break;
                        }
                    }
                }
                if (!process)
                {
                    continue;
                }
                var hostbind = new HostBinding();
                hostbind.Port      = bind.Attr(HostUtils.PortXmlName).ToInt();
                hostbind.Interface = bind.Attr(HostUtils.InterfaceXmlName);
                string schema = bind.Attr(HostUtils.SchemaXmlName);
                if (!string.IsNullOrWhiteSpace(schema))
                {
                    if (schema == HostUtils.HttpsXmlValue)
                    {
                        hostbind.Schema = HostSchema.Https;
                    }
                }
                if (hostbind.Port == 0)
                {
                    hostbind.Port = HostUtils.DefaultBindingPort;
                }
                if (string.IsNullOrWhiteSpace(hostbind.Interface))
                {
                    hostbind.Interface = HostUtils.DefaultBindingInterface;
                }
                Bindings.Add(hostbind);
            }
            foreach (var constant in xml.Elements("constant"))
            {
                if (string.IsNullOrWhiteSpace(constant.Attr("code")))
                {
                    continue;
                }
                Constants[constant.Attr("code").ToLowerInvariant()] = constant.Attr("name");
            }
            foreach (XElement e in xml.Elements(HostUtils.ContentFolder))
            {
                ContentFolders.Add(e.Attr("code"));
            }
            ReadModules(xml);
            foreach (var e in xml.Elements("connection"))
            {
                var name = e.Attr("code");
                var cstr = e.Attr("name");
                if (string.IsNullOrWhiteSpace(name))
                {
                    continue;
                }
                if (string.IsNullOrWhiteSpace(cstr))
                {
                    continue;
                }
                ConnectionStrings[name] = cstr;
            }
            foreach (var e in xml.Elements("static"))
            {
                var name   = e.Attr("code");
                var folder = EnvironmentInfo.ResolvePath(e.Attr("name"));
                var role   = e.Attr("role");
                if (!name.StartsWith("/"))
                {
                    name = "/" + name;
                }
                if (!name.EndsWith("/"))
                {
                    name += "/";
                }
                if (e.Attr("cache").ToBool())
                {
                    this.StaticContentCacheMap[name] = e;
                }
                else
                {
                    this.StaticContentMap[name] = new StaticFolderDescriptor {
                        Key = name, Path = folder, Role = role
                    };
                }
            }
            foreach (var e in xml.Elements("startup"))
            {
                var name = e.Attr("code");
                Initializers.Add(name);
            }
            foreach (XElement e in xml.Elements(HostUtils.ExContentFolder))
            {
                ExtendedContentFolders.Add(e.Attr("code"));
            }
            foreach (XElement e in xml.Elements(HostUtils.IncludeConfigXmlName))
            {
                IncludeConfigMasks.Add(e.Describe().GetEfficienValue());
            }
            foreach (XElement e in xml.Elements(HostUtils.ExcludeConfigXmlName))
            {
                ExcludeConfigMasks.Add(e.Describe().GetEfficienValue());
            }
            foreach (XElement e in xml.Elements("cache"))
            {
                Cached.Add(e.Value);
            }
            foreach (XElement e in xml.Elements("proxize"))
            {
                var key = e.Attr("code");
                var url = e.Attr("url");
                if (string.IsNullOrWhiteSpace(url))
                {
                    if (!string.IsNullOrWhiteSpace(e.Attr("appid")))
                    {
                        url += "appid=" + e.Attr("appid") + ";";
                    }
                    if (!string.IsNullOrWhiteSpace(e.Attr("secure")))
                    {
                        url += "secure=" + e.Attr("secure") + ";";
                    }
                    if (!string.IsNullOrWhiteSpace(e.Attr("server")))
                    {
                        url += "server=" + e.Attr("server") + ";";
                    }
                }
                Proxize[key] = url;
            }
            foreach (XElement e in xml.Elements("lib"))
            {
                AutoconfigureAssemblies.Add(e.AttrOrValue("code"));
            }
            ForceNoCache = xml.Attr("forcenocache").ToBool();

            var appid = xml.ResolveValue("appid", "0").ToInt();

            if (appid != 0)
            {
                AddQorpentBinding(appid);
                Loggy.Info(string.Concat("AppId is [", appid, "]"));
            }

            LoggerName   = xml.ResolveValue("loggername", "");
            LoggerHost   = xml.ResolveValue("loggerhost", "");
            LoggerPort   = xml.ResolveValue("loggerport", "0").ToInt();
            LoggerFormat = xml.ResolveValue("loggerformat", "").Replace("%{", "${");

            this.AccessAllowOrigin = xml.ResolveValue("origin", "");

            foreach (var e in xml.Elements("require"))
            {
                var appname = e.Attr("code") + e.Attr("suffix");

                var proxize = e.GetSmartValue("proxize").ToBool() || e.Attr("name") == "proxize";
                if (proxize)
                {
                    if (null == context)
                    {
                        this.Log.Error("context not provi " + appname);
                    }
                    var cls = context[appname];
                    if (null == cls)
                    {
                        this.Log.Error("cannot find application for proxize " + appname);
                    }
                    else
                    {
                        var sappid   = cls.Compiled.ResolveValue("appid");
                        var services = cls.Compiled.Elements("service");
                        foreach (var srv in services)
                        {
                            var root   = srv.Attr("code");
                            var server = e.Attr("server");
                            var cp     = "appid=" + sappid + ";";
                            if (!string.IsNullOrWhiteSpace(server))
                            {
                                cp += "server=" + server;
                            }
                            this.Proxize[root] = cp;
                        }
                    }
                }
            }
        }
Exemple #3
0
        private static IBSharpProject SetupProject(IDictionary <string, string> adict, IUserLog log, BSharpBuilder builder)
        {
            var project = new BSharpProject {
                IsFullyQualifiedProject = true
            };

            project.IsFullyQualifiedProject = true;
            var filename = adict.resolvestr("arg1");

            if (!string.IsNullOrWhiteSpace(filename) && filename.Contains("."))
            {
                //direct file
                log.Info("Single file compiled");
                project = (BSharpProject)SingleFileProject(EnvironmentInfo.ResolvePath(filename), adict, log, builder);
            }
            else
            {
                if (adict.ContainsKey("project"))
                {
                    project.ProjectName             = adict["project"];
                    project.IsFullyQualifiedProject = false;
                }
                else if (adict.ContainsKey("arg1"))
                {
                    project.ProjectName             = adict["arg1"];
                    project.IsFullyQualifiedProject = false;
                }
            }


            if (!project.OutputAttributes.HasFlag(BSharpBuilderOutputAttributes.IncludeWork))
            {
                if (!adict.ContainsKey("noIncludeWork"))
                {
                    project.OutputAttributes |= BSharpBuilderOutputAttributes.IncludeWork;
                }
            }

            if (adict.ContainsKey("out-layout"))
            {
                project.OutputAttributes = adict["out-layout"].To <BSharpBuilderOutputAttributes>();
            }



            if (adict.ContainsKey("compile-extensions"))
            {
                project.DoCompileExtensions = adict["compile-extensions"].ToBool();
            }

            if (adict.ContainsKey("out"))
            {
                project.MainOutputDirectory = adict["out"];
            }

            if (adict.ContainsKey("log"))
            {
                project.LogOutputDirectory = adict["log"];
            }

            if (adict.ContainsKey("extension"))
            {
                project.OutputExtension = adict["extension"];
            }

            if (adict.ContainsKey("root"))
            {
                project.RootDirectory = adict["root"];
            }
            if (adict.ContainsKey("dot"))
            {
                project.GenerateGraph = adict["dot"].ToBool();
            }

            if (adict.ContainsKey("include"))
            {
                project.Targets.Paths.RemoveTarget("*");
                var parsed = ParseKeyValueEnumeration(adict["include"], ',', ':');
                foreach (var el in parsed)
                {
                    Console.WriteLine("Include: <" + el.Key + "," + el.Value + ">");
                    WriteTarget(project, el.Key, el.Value, BSharpBuilderTargetType.Include);
                }
            }

            if (adict.ContainsKey("exclude"))
            {
                var parsed = ParseKeyValueEnumeration(adict["exclude"], ',', ':');
                foreach (var el in parsed)
                {
                    Console.WriteLine("Exclude: <" + el.Key + "," + el.Value + ">");
                    WriteTarget(project, el.Key, el.Value, BSharpBuilderTargetType.Exclude);
                }
            }

            project.Log = log;
            foreach (var c in adict)
            {
                if (c.Key.StartsWith("set-"))
                {
                    project.Conditions[c.Key.Substring(4)] = c.Value;
                    log.Info("set option " + c.Key.Substring(4) + " = " + c.Value);
                }
            }

            log.Info("root dir = " + project.GetRootDirectory());
            log.Info("out dir = " + project.GetOutputDirectory());
            log.Info("log dir = " + project.GetLogDirectory());

            return(project);
        }