示例#1
0
        private bool CompileCode(string workingPath)
        {
            using (Log.DebugTraceMethodCall("CompileCode", "Compile Code on STA thread to " + workingPath))
            {
                var zetboxApiPath = GetApiPath();

                Log.DebugFormat("zetboxApiPath = [{0}]", zetboxApiPath);

                // TODO: move MsBuild logging to log4net
                if (File.Exists("TemplateCodegenLog.txt"))
                {
                    File.Delete("TemplateCodegenLog.txt");
                }

                string binPath = GetBinaryBasePath(workingPath);

                Log.DebugFormat("binPath = [{0}]", binPath);

                Directory.CreateDirectory(binPath);

                var engine = new Engine(ToolsetDefinitionLocations.Registry);
                engine.RegisterLogger(new Log4NetLogger());
                RegisterConsoleLogger(engine, workingPath);

                engine.GlobalProperties.SetProperty("Configuration", GetConfiguration());
                engine.GlobalProperties.SetProperty("OutputPathOverride", binPath);
                engine.GlobalProperties.SetProperty("ZetboxAPIPathOverride", zetboxApiPath);

                Log.Info("Dumping engine Properties");
                foreach (BuildProperty prop in engine.GlobalProperties)
                {
                    Log.InfoFormat("{0} = {1}", prop.Name, prop.Value);
                }

                try
                {
                    var result       = true;
                    var compileOrder = _generatorProviders
                                       .GroupBy(k => k.CompileOrder)
                                       .OrderBy(i => i.Key);
                    foreach (var gens in compileOrder)
                    {
                        foreach (var gen in gens)
                        {
                            result &= CompileSingle(engine, gen, workingPath, null);
                        }
                    }

                    // Additional Targets
                    var additionalTargets = _generatorProviders
                                            .Where(i => i.AdditionalTargets.Count() > 0)
                                            .GroupBy(k => k.CompileOrder)
                                            .OrderBy(i => i.Key);
                    foreach (var gens in additionalTargets)
                    {
                        foreach (var gen in gens)
                        {
                            foreach (var target in gen.AdditionalTargets)
                            {
                                result &= CompileSingle(engine, gen, workingPath, target);
                            }
                        }
                    }

                    return(result);
                }
                finally
                {
                    // close all logfiles
                    engine.UnregisterAllLoggers();
                }
            }
        }
示例#2
0
        public static int Main(string[] arguments)
        {
            Logging.Configure();

            Log.InfoFormat("Starting Zetbox Server with args [{0}]", String.Join(" ", arguments));

            try
            {
                var config = ExtractConfig(ref arguments);
                AssemblyLoader.Bootstrap(AppDomain.CurrentDomain, config);

                using (var container = CreateMasterContainer(config))
                {
                    OptionSet options = new OptionSet();

                    // activate all registered options
                    container.Resolve <IEnumerable <Option> >().OrderBy(o => o.Prototype).ForEach(o => options.Add(o));

                    List <string> extraArguments = null;
                    try
                    {
                        extraArguments = options.Parse(arguments);
                    }
                    catch (OptionException e)
                    {
                        Log.Fatal("Error in commandline", e);
                        return(1);
                    }

                    if (extraArguments != null && extraArguments.Count > 0)
                    {
                        Log.FatalFormat("Unrecognized arguments on commandline: {0}", string.Join(", ", extraArguments.ToArray()));
                        return(1);
                    }

                    var actions = config.AdditionalCommandlineActions;

                    // process command line
                    if (actions.Count > 0)
                    {
                        using (Log.DebugTraceMethodCall("CmdLineActions", "processing commandline actions"))
                        {
                            foreach (var action in actions)
                            {
                                using (var innerContainer = container.BeginLifetimeScope())
                                {
                                    action(innerContainer);
                                }
                            }
                        }
                        Log.Info("Shutting down");
                    }
                    else
                    {
                        IServiceControlManager scm = null;
                        if (container.TryResolve <IServiceControlManager>(out scm))
                        {
                            Log.Info("Starting zetbox Services");
                            scm.Start();
                            Log.Info("Waiting for console input to shutdown");
                            Console.WriteLine("Services started, press the anykey to exit");
                            Console.ReadKey();
                            Log.Info("Shutting down");
                        }
                        else
                        {
                            Log.Error("No IServiceControlManager registered");
                        }

                        if (scm != null)
                        {
                            scm.Stop();
                        }
                    }
                }
                Log.Info("Exiting");
                return(0);
            }
            catch (Exception ex)
            {
                Log.Error("Server Application failed:", ex);
                return(1);
            }
        }