Ejemplo n.º 1
0
        /// <summary>
        /// handles the web server state
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void StartWebServerButton_Click(object sender, RoutedEventArgs e)
        {
            try
            {
                if (!WebServerManager.WebServerStarted)
                {
                    int.TryParse(OptionsManager.CurrentOptions.Port, out var port);
                    if (port == 0)
                    {
                        port = 8080;
                        LogManager.AddLogMessage("invalid port, fallback to port 8080");
                    }
                    WebServerManager.StartWebServer(port);
                    //AddonCompiler.Insatnce.WebServer = new WebServerClient();
                    //AddonCompiler.Insatnce.WebServer.Start();
                }
                else
                {
                    AddonCompiler.Insatnce.WebServer.Stop();
                }
            }
            catch (Exception ex)
            {
                LogManager.AddErrorLog(ex);
                WebServerManager.WebServerStarted = false;
            }

            WebServerButton.Content = WebServerManager.WebServerStarted ? "Stop Web Server" : "Start Web Server";
            ApplicationWindows.TestWidnow.Update();
        }
Ejemplo n.º 2
0
        /// <summary>
        /// started the web server
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void StartWebServerButton_OnClick(object sender, RoutedEventArgs e)
        {
            int.TryParse(OptionsManager.CurrentOptions.Port, out var port);
            if (port == 0)
            {
                port = 8080;
                LogManager.AddLogMessage("invalid port, failling back to port 8080");
            }

            WebServerManager.StartWebServer(port);
            Update();
        }
Ejemplo n.º 3
0
        /// <summary>
        /// compiles an addon and starts the web server
        /// </summary>
        /// <param name="addon"></param>
        /// <param name="startWebServer"></param>
        /// <returns></returns>
        public async Task <bool> CompileAddon(C3Addon addon, bool startWebServer = true)
        {
            if (!ValidateFiles(addon))
            {
                IsCompilationValid = false;
                return(false);
            }
            IsCompilationValid = true;

            try
            {
                LogManager.CompilerLog.Insert($"compilation starting...");

                //generate unique folder for specific addon class
                var folderName = addon.Class.ToLower();
                addon.AddonFolder = Path.Combine(OptionsManager.CurrentOptions.CompilePath, folderName);

                //check for addon id
                if (string.IsNullOrWhiteSpace(addon.AddonId))
                {
                    addon.AddonId = $"{addon.Author}_{addon.Class}";
                }

                //clear out compile path
                if (Directory.Exists(addon.AddonFolder))
                {
                    LogManager.CompilerLog.Insert($"compile directory exists => { addon.AddonFolder}");
                    System.IO.Directory.Delete(addon.AddonFolder, true);
                    LogManager.CompilerLog.Insert($"removed compile directory...");
                }

                //create main compile directory
                LogManager.CompilerLog.Insert($"recreating compile directory => { addon.AddonFolder}");
                if (!Directory.Exists(OptionsManager.CurrentOptions.CompilePath))
                {
                    System.IO.Directory.CreateDirectory(OptionsManager.CurrentOptions.CompilePath);
                }

                //create addon compile directory and addon specific paths
                System.IO.Directory.CreateDirectory(addon.AddonFolder);
                System.IO.Directory.CreateDirectory(Path.Combine(addon.AddonFolder, "lang"));
                if (addon.Type != PluginType.Effect && addon.Type != PluginType.Theme)
                {
                    System.IO.Directory.CreateDirectory(Path.Combine(addon.AddonFolder, "c3runtime"));
                }
                if (!string.IsNullOrWhiteSpace(addon.C2RunTime) || (addon.ThirdPartyFiles != null && addon.ThirdPartyFiles.Any(x => x.Value.C2Folder)))
                {
                    System.IO.Directory.CreateDirectory(Path.Combine(addon.AddonFolder, "c2runtime"));
                }
                LogManager.CompilerLog.Insert($"compile directory created successfully => { addon.AddonFolder}");


                if (addon.Type == PluginType.Effect)
                {
                    //todo: effect validator http://shdr.bkcore.com/
                    CreateEffectFiles(addon, folderName);
                }
                else if (addon.Type == PluginType.Theme)
                {
                    CreateThemeFiles(addon, folderName);
                }
                else
                {
                    CreateAddonFiles(addon, folderName);
                }
            }
            catch (Exception ex)
            {
                IsCompilationValid = false;
                LogManager.AddErrorLog(ex);
                LogManager.CompilerLog.Insert($"compilation terminated due to error...");
                LogManager.CompilerLog.Insert($"error => {ex.Message}");
                NotificationManager.PublishErrorNotification("There was an error generating the addon, please check the log.");
                return(false);
            }

            //try and start the web server
            try
            {
                if (startWebServer && IsCompilationValid)
                {
                    //start web server installation
                    await Task.Run(() =>
                    {
                        int.TryParse(OptionsManager.CurrentOptions.Port, out var port);
                        if (port == 0)
                        {
                            port = 8080;
                            LogManager.AddLogMessage("invalid port, fallback to port 8080");
                        }
                        WebServerManager.StartWebServer(port);
                        //WebServer = new WebServerClient();
                        //WebServer.Start();
                    });
                }
            }
            catch (Exception ex)
            {
                IsCompilationValid = false;
                LogManager.AddErrorLog(ex);
                LogManager.CompilerLog.Insert($"web server failed to start...");
                NotificationManager.PublishErrorNotification("The web server failed to start... check that the port 8080, is not being used by another application.");
                WebServerManager.WebServerStarted = false;
                return(false);
            }

            return(true);
        }