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; }
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); } }
public ConcoctApplication(ConcoctConfiguration config, ILog log) { this.config = config; this.log = log; }
public Program(TextWriter log, ConcoctConfiguration config) { application = new ConcoctApplication(config, this); this.log = log; }