Exemplo n.º 1
0
        private void dockerInstallDatabaseContainerButton_Click(object sender, EventArgs e)
        {
            Program.ShowConsole();
            Console.Clear();

            PrintHeader("Creating database container");

            int localPort = Parameter.DEFAULT_DATABASE_SERVER_STARTING_PORT;

            Console.WriteLine($"Enter the starting number of local ports you wish to use (default is {Parameter.DEFAULT_DATABASE_SERVER_STARTING_PORT}): ");
            int.TryParse(Console.ReadLine(), out localPort);

            Console.WriteLine("Select your database login name: ");
            string dbALogin = Console.ReadLine();

            Console.WriteLine("Select your database password (preferably a hard password with 8 or more characters including special ones): ");
            string dbAPassword = Console.ReadLine();

            Dictionary <string, string> replacingTemplateFields
                = new Dictionary <string, string>()
                {
                { "__versioning_folder__", $"/{NetworkObjectParameters.FetchServerVersioningFolder}/" },
                { "__game_patches_folder__", $"/{NetworkObjectParameters.FetchServerPatchesFolder}" },
                { "__container_name__", Parameter.DEFAULT_DATABASE_SERVER_CONTAINER_NAME },
                { "__volume_name__", Parameter.DEFAULT_DATABASE_SERVER_VOLUME_NAME },
                { "__local_port__", localPort.ToString() },
                { "__container_port__", Parameter.DEFAULT_DATABASE_SERVER_CONTAINER_PORT.ToString() },
                { "__context__", Parameter.DEFAULT_DATABASE_SERVER_CONTEXT },
                { "__dockerfile_path__", Parameter.DEFAULT_DATABASE_SERVER_DOCKERFILE_PATH },
                { "__db_password__", Parameter.DEFAULT_DATABASE_SERVER_PASSWORD },
                { "__db_sql_pid__", Parameter.DEFAULT_DATABASE_SERVER_PID },
                { "__db_sql_admin_login__", dbALogin },
                { "__db_sql_admin_password__", dbAPassword },
                };

            string templatePath = Directory.GetCurrentDirectory() + @"\DockerTemplates\OpenBound Database";

            List <string> files = PipelineHelper.GenerateTemplateFiles(templatePath, templatePath, replacingTemplateFields, "*.Template.Dockerfile").ToList();

            files.AddRange(PipelineHelper.GenerateTemplateFiles(templatePath, templatePath, replacingTemplateFields, "*.Template.yml").ToList());
            files.AddRange(PipelineHelper.GenerateTemplateFiles(templatePath, templatePath, replacingTemplateFields, "*.Template.sql").ToList());

            PipelineHelper.ExecuteShellCommand($"docker-compose -p=openbound -f \".\\DockerTemplates\\OpenBound Database\\OpenBoundDatabase.yml\" up -d {Parameter.DEFAULT_DATABASE_SERVER_CONTAINER_NAME}");

            Console.WriteLine("Waiting 10s for the container to boot up. If your PC is too slow the following scripts might fail.");
            Thread.Sleep(10000);


            PipelineHelper.ExecuteShellCommand($"docker cp \"{files.Find((x) => x.Contains(".sql"))}\" \"{Parameter.DEFAULT_DATABASE_SERVER_CONTAINER_NAME}:/OpenBoundDatabase.sql\"");
            PipelineHelper.ExecuteShellCommand($"docker exec -it {Parameter.DEFAULT_DATABASE_SERVER_CONTAINER_NAME} /opt/mssql-tools/bin/sqlcmd -S localhost -U SA -P \"{Parameter.DEFAULT_DATABASE_SERVER_PASSWORD}\" -i \"/OpenBoundDatabase.sql\"");
            PipelineHelper.ExecuteShellCommand($"docker exec -it {Parameter.DEFAULT_DATABASE_SERVER_CONTAINER_NAME} rm /OpenBoundDatabase.sql");

            Console.WriteLine("Press any key to continue...");
            Console.ReadKey();

            Program.HideConsole();
        }
Exemplo n.º 2
0
        private void DockerInstallFetchServerContainersButton_Click(object sender, EventArgs e)
        {
            Program.ShowConsole();
            Console.Clear();

            PrintHeader("Creating fetch server container");

            int    containerPort = Parameter.DEFAULT_FETCH_SERVER_CONTAINER_PORT;
            int    localPort     = Parameter.DEFAULT_FETCH_SERVER_STARTING_PORT;
            string containerName = Parameter.DEFAULT_FETCH_SERVER_CONTAINER_NAME;
            string volumeName    = Parameter.DEFAULT_FETCH_SERVER_VOLUME_NAME;

            Console.WriteLine($"Enter the starting number of local ports you wish to use (default is {localPort}): ");
            int.TryParse(Console.ReadLine(), out localPort);

            Dictionary <string, string> replacingTemplateFields
                = new Dictionary <string, string>()
                {
                { "__versioning_folder__", $"/{NetworkObjectParameters.FetchServerVersioningFolder}/" },
                { "__game_patches_folder__", $"/{NetworkObjectParameters.FetchServerPatchesFolder}" },
                { "__container_name__", containerName },
                { "__volume_name__", volumeName },
                { "__local_port__", localPort.ToString() },
                { "__container_port__", containerPort.ToString() },
                { "__context__", Parameter.DEFAULT_FETCH_SERVER_CONTEXT },
                { "__dockerfile_path__", Parameter.DEFAULT_FETCH_SERVER_DOCKERFILE_PATH }
                };

            string templatePath = Directory.GetCurrentDirectory() + @"\DockerTemplates\FetchServer";

            List <string> files = PipelineHelper.GenerateTemplateFiles(templatePath, templatePath, replacingTemplateFields, "*.Template.Dockerfile").ToList();

            files.AddRange(PipelineHelper.GenerateTemplateFiles(templatePath, templatePath, replacingTemplateFields, "*.Template.yml").ToList());
            files.AddRange(PipelineHelper.GenerateTemplateFiles(templatePath, templatePath, replacingTemplateFields, "*.Template.conf").ToList());

            PipelineHelper.ExecuteShellCommand(@$ "docker-compose -p=openbound -f .\DockerTemplates\FetchServer\OpenBoundFetchServer.yml build");
            PipelineHelper.ExecuteShellCommand(@$ "docker-compose -p openbound -f .\DockerTemplates\FetchServer\OpenBoundFetchServer.yml up -d {containerName}");

            Console.WriteLine("Press any key to continue...");
            Console.ReadKey();

            Program.HideConsole();
        }
Exemplo n.º 3
0
        private void DockerInstallGameServerContainerButton_Click(object sender, EventArgs e)
        {
            Program.ShowConsole();
            Console.Clear();

            //Creating containers
            PrintHeader("Creating Game Server container");

            int    containerPort     = Parameter.DEFAULT_GAME_SERVER_CONTAINER_PORT;
            int    startingLocalPort = Parameter.DEFAULT_GAME_SERVER_STARTING_PORT;
            string containerName     = Parameter.DEFAILT_GAME_SERVER_CONTAINER_NAME;
            string volumeName        = Parameter.DEFAULT_GAME_SERVER_VOLUME_NAME;

            Console.WriteLine($"Enter the local ports you wish to use (default is {startingLocalPort}): ");
            int.TryParse(Console.ReadLine(), out startingLocalPort);

            Console.WriteLine("Enter the server ID (copy this id on ServerID txt): ");
            int containerID = 0;

            int.TryParse(Console.ReadLine(), out containerID);

            containerName += $"-{containerID}";

            Dictionary <string, string> replacingTemplateFields
                = new Dictionary <string, string>()
                {
                { "__container_name__", containerName },
                { "__volume_name__", volumeName },
                { "__local_port__", startingLocalPort.ToString() },
                { "__container_port__", containerPort.ToString() },
                { "__context__", Parameter.DEFAULT_GAME_SERVER_CONTEXT },
                { "__dockerfile_path__", Parameter.DEFAULT_GAME_SERVER_DOCKERFILE_PATH }
                };

            Console.WriteLine("Select the base project folder. This folder contains the \".sln\" file.");

            string slnDir = PipelineHelper.SelectSLNFile();

            slnDir = slnDir.Replace("\\" + slnDir.Split("\\").Last(), "");
            string gspDir = $@"{slnDir}\OpenBound Game Server";

            List <string> files = PipelineHelper.GenerateTemplateFiles(slnDir, slnDir, replacingTemplateFields, "*.Template.yml").ToList();

            files.AddRange(PipelineHelper.GenerateTemplateFiles(gspDir, gspDir, replacingTemplateFields, "*.Template.Dockerfile").ToList());

            //Building & Starting Container
            PrintHeader("Building Containers");

            PipelineHelper.ExecuteShellCommand(@$ "docker-compose -f {slnDir}\OpenBoundServerCompose.yml build");
            PipelineHelper.ExecuteShellCommand(@$ "docker-compose -f {slnDir}\OpenBoundServerCompose.yml up -d");

            //Configuring Container
            ConfigFileManager.CreateConfigFile(RequesterApplication.GameServer, true);
            PrintHeader("Building Containers");

            Console.WriteLine("Close the notepad in order to continue the server configuration. Reminder: host.docker.internal is your ip from container's perspective.");
            Thread.Sleep(5000);

            PipelineHelper.ExecuteShellCommand($@"notepad.exe {Directory.GetCurrentDirectory()}\Config\DatabaseConfig.json");
            PipelineHelper.ExecuteShellCommand($@"notepad.exe {Directory.GetCurrentDirectory()}\Config\GameServerServerConfig.json");

            PipelineHelper.ExecuteShellCommand($"docker cp \"{Directory.GetCurrentDirectory()}\\Config\\DatabaseConfig.json\" \"{containerName}:\\OpenBound Game Server\\Config\\DatabaseConfig.json\"");
            PipelineHelper.ExecuteShellCommand($"docker cp \"{Directory.GetCurrentDirectory()}\\Config\\GameServerServerConfig.json\" \"{containerName}:\\OpenBound Game Server\\Config\\GameServerServerConfig.json\"");

            foreach (string file in files)
            {
                try { File.Delete(file); } catch { }
            }

            PipelineHelper.ExecuteShellCommand(@$ "docker restart {containerName}");

            Console.WriteLine("Press any key to continue...");
            Console.ReadKey();

            Program.HideConsole();
        }