Ejemplo n.º 1
0
        public static ConcoctConfiguration Parse(string[] args)
        {
            var configuration = new ConcoctConfiguration();
            var r = new Regex(string.Format("^{0}(?<name>.+)=(?<value>.+$)", OptionPrefix));
            var items = new List<string>();

            for(int i = 0; i != args.Length; ++i) {
                var item = args[i];
                var m = r.Match(item);
                if(m.Success) {
                    var value = m.Groups["value"].Value;
                    switch(m.Groups["name"].Value) {
                        case "port": configuration.Port = int.Parse(value); break;
                        case "path": configuration.WorkingDirectory = value; break;
                        case "log" : configuration.LogFile = value; break;
                        case "config" : configuration.configurationFile = value; break;
                        case "logRequests" : configuration.LogRequests = bool.Parse(value); break;
                    }
                }
                else
                    items.Add(item);
            }
            if(items.Count != 2)
                throw new ConfigurationErrorException();

            configuration.ApplicationAssemblyPath = items[0];
            configuration.VirtualDirectoryOrPrefix = items[1];
            return configuration;
        }
Ejemplo n.º 2
0
        public void Start(ConcoctConfiguration config, ILog log)
        {
            try {
                var site = Assembly.LoadFrom(config.ApplicationAssemblyPath);
                var types = site.GetTypes();
                var httpApplicationType = types.Where(x => x.IsTypeOf<HttpApplication>()).First();

                FileRouteHandler.MapPath = path => path.Replace("~", config.WorkingDirectory);

                host = MvcHost.Create(
                    config.GetEndPoint(),
                    config.VirtualDirectoryOrPrefix,
                    config.WorkingDirectory,
                    httpApplicationType);

                if(config.LogRequests)
                    host.RequestHandler.BeginRequest += (_, e) => log.Info("{0} {1}", e.Request.HttpMethod, e.Request.Url);

                host.Start();
            } catch(FileNotFoundException appNotFound) {
                log.Error("Failed to locate {0}", appNotFound.FileName);
                throw new ApplicationException("Failed to load application");
            } catch(ReflectionTypeLoadException loadError) {
                log.Error("Error applications.");
                foreach(var item in loadError.LoaderExceptions) {
                    Console.Error.WriteLine(item);
                }
                throw new ApplicationException("Failed to load application", loadError);
            }
        }
Ejemplo n.º 3
0
 public ConcoctApplication(ConcoctConfiguration config, ILog log)
 {
     this.config = config;
     this.log = log;
 }
Ejemplo n.º 4
0
 public Program(TextWriter log, ConcoctConfiguration config)
 {
     application = new ConcoctApplication(config, this);
     this.log = log;
 }