From 8e51111564e51bd1633c4f6416d76b330c7b262c Mon Sep 17 00:00:00 2001 From: CyberL1 Date: Sat, 25 May 2024 19:58:05 +0200 Subject: [PATCH] feat(realms): docker helper --- .../{ => Controllers}/InvitesController.cs | 8 ++-- .../Realms/{ => Controllers}/McoController.cs | 2 +- .../Realms/{ => Controllers}/OpsController.cs | 2 +- .../SubscriptionsController.cs | 4 +- .../{ => Controllers}/TrialController.cs | 2 +- .../{ => Controllers}/WorldsController.cs | 35 +++------------ .../Modes/Realms/Helpers/DockerHelper.cs | 43 +++++++++++++++++++ 7 files changed, 58 insertions(+), 38 deletions(-) rename Minecraft-Realms-Emulator/Modes/Realms/{ => Controllers}/InvitesController.cs (97%) rename Minecraft-Realms-Emulator/Modes/Realms/{ => Controllers}/McoController.cs (95%) rename Minecraft-Realms-Emulator/Modes/Realms/{ => Controllers}/OpsController.cs (97%) rename Minecraft-Realms-Emulator/Modes/Realms/{ => Controllers}/SubscriptionsController.cs (87%) rename Minecraft-Realms-Emulator/Modes/Realms/{ => Controllers}/TrialController.cs (92%) rename Minecraft-Realms-Emulator/Modes/Realms/{ => Controllers}/WorldsController.cs (93%) create mode 100644 Minecraft-Realms-Emulator/Modes/Realms/Helpers/DockerHelper.cs diff --git a/Minecraft-Realms-Emulator/Modes/Realms/InvitesController.cs b/Minecraft-Realms-Emulator/Modes/Realms/Controllers/InvitesController.cs similarity index 97% rename from Minecraft-Realms-Emulator/Modes/Realms/InvitesController.cs rename to Minecraft-Realms-Emulator/Modes/Realms/Controllers/InvitesController.cs index a48c24e..33229f2 100644 --- a/Minecraft-Realms-Emulator/Modes/Realms/InvitesController.cs +++ b/Minecraft-Realms-Emulator/Modes/Realms/Controllers/InvitesController.cs @@ -6,7 +6,7 @@ using Minecraft_Realms_Emulator.Entities; using Minecraft_Realms_Emulator.Requests; using Minecraft_Realms_Emulator.Responses; -namespace Minecraft_Realms_Emulator.Modes.Realms +namespace Minecraft_Realms_Emulator.Modes.Realms.Controllers { [Route("modes/realms/[controller]")] [ApiController] @@ -29,7 +29,7 @@ namespace Minecraft_Realms_Emulator.Modes.Realms var invites = await _context.Invites.Where(i => i.RecipeintUUID == playerUUID).Include(i => i.World).ToListAsync(); List invitesList = []; - + foreach (var invite in invites) { InviteResponse inv = new() @@ -38,7 +38,7 @@ namespace Minecraft_Realms_Emulator.Modes.Realms WorldName = invite.World.Name, WorldOwnerName = invite.World.Owner, WorldOwnerUuid = invite.World.OwnerUUID, - Date = ((DateTimeOffset) invite.Date).ToUnixTimeMilliseconds(), + Date = ((DateTimeOffset)invite.Date).ToUnixTimeMilliseconds(), }; invitesList.Add(inv); @@ -78,7 +78,7 @@ namespace Minecraft_Realms_Emulator.Modes.Realms var invite = _context.Invites.Include(i => i.World).FirstOrDefault(i => i.InvitationId == id); if (invite == null) return NotFound("Invite not found"); - + _context.Invites.Remove(invite); string cookie = Request.Headers.Cookie; diff --git a/Minecraft-Realms-Emulator/Modes/Realms/McoController.cs b/Minecraft-Realms-Emulator/Modes/Realms/Controllers/McoController.cs similarity index 95% rename from Minecraft-Realms-Emulator/Modes/Realms/McoController.cs rename to Minecraft-Realms-Emulator/Modes/Realms/Controllers/McoController.cs index 3bfda6a..82e1f50 100644 --- a/Minecraft-Realms-Emulator/Modes/Realms/McoController.cs +++ b/Minecraft-Realms-Emulator/Modes/Realms/Controllers/McoController.cs @@ -5,7 +5,7 @@ using Minecraft_Realms_Emulator.Enums; using Minecraft_Realms_Emulator.Helpers; using Minecraft_Realms_Emulator.Responses; -namespace Minecraft_Realms_Emulator.Modes.Realms +namespace Minecraft_Realms_Emulator.Modes.Realms.Controllers { [Route("modes/realms/[controller]")] [ApiController] diff --git a/Minecraft-Realms-Emulator/Modes/Realms/OpsController.cs b/Minecraft-Realms-Emulator/Modes/Realms/Controllers/OpsController.cs similarity index 97% rename from Minecraft-Realms-Emulator/Modes/Realms/OpsController.cs rename to Minecraft-Realms-Emulator/Modes/Realms/Controllers/OpsController.cs index 5fc25e5..78d6c84 100644 --- a/Minecraft-Realms-Emulator/Modes/Realms/OpsController.cs +++ b/Minecraft-Realms-Emulator/Modes/Realms/Controllers/OpsController.cs @@ -3,7 +3,7 @@ using Minecraft_Realms_Emulator.Attributes; using Minecraft_Realms_Emulator.Data; using Minecraft_Realms_Emulator.Responses; -namespace Minecraft_Realms_Emulator.Modes.Realms +namespace Minecraft_Realms_Emulator.Modes.Realms.Controllers { [Route("modes/realms/[controller]")] [ApiController] diff --git a/Minecraft-Realms-Emulator/Modes/Realms/SubscriptionsController.cs b/Minecraft-Realms-Emulator/Modes/Realms/Controllers/SubscriptionsController.cs similarity index 87% rename from Minecraft-Realms-Emulator/Modes/Realms/SubscriptionsController.cs rename to Minecraft-Realms-Emulator/Modes/Realms/Controllers/SubscriptionsController.cs index 1ae2f7f..1f1e00b 100644 --- a/Minecraft-Realms-Emulator/Modes/Realms/SubscriptionsController.cs +++ b/Minecraft-Realms-Emulator/Modes/Realms/Controllers/SubscriptionsController.cs @@ -4,7 +4,7 @@ using Minecraft_Realms_Emulator.Attributes; using Minecraft_Realms_Emulator.Data; using Minecraft_Realms_Emulator.Responses; -namespace Minecraft_Realms_Emulator.Modes.Realms +namespace Minecraft_Realms_Emulator.Modes.Realms.Controllers { [Route("modes/realms/[controller]")] [ApiController] @@ -28,7 +28,7 @@ namespace Minecraft_Realms_Emulator.Modes.Realms var sub = new SubscriptionResponse { StartDate = ((DateTimeOffset)world.Subscription.StartDate).ToUnixTimeMilliseconds(), - DaysLeft = ((DateTimeOffset)world.Subscription.StartDate.AddDays(30) - DateTime.Today).Days, + DaysLeft = ((DateTimeOffset)world.Subscription.StartDate.AddDays(30) - DateTime.Today).Days, SubscriptionType = world.Subscription.SubscriptionType }; diff --git a/Minecraft-Realms-Emulator/Modes/Realms/TrialController.cs b/Minecraft-Realms-Emulator/Modes/Realms/Controllers/TrialController.cs similarity index 92% rename from Minecraft-Realms-Emulator/Modes/Realms/TrialController.cs rename to Minecraft-Realms-Emulator/Modes/Realms/Controllers/TrialController.cs index 2a108f3..cd8bf80 100644 --- a/Minecraft-Realms-Emulator/Modes/Realms/TrialController.cs +++ b/Minecraft-Realms-Emulator/Modes/Realms/Controllers/TrialController.cs @@ -4,7 +4,7 @@ using Minecraft_Realms_Emulator.Data; using Minecraft_Realms_Emulator.Enums; using Minecraft_Realms_Emulator.Helpers; -namespace Minecraft_Realms_Emulator.Modes.Realms +namespace Minecraft_Realms_Emulator.Modes.Realms.Controllers { [Route("modes/realms/[controller]")] [ApiController] diff --git a/Minecraft-Realms-Emulator/Modes/Realms/WorldsController.cs b/Minecraft-Realms-Emulator/Modes/Realms/Controllers/WorldsController.cs similarity index 93% rename from Minecraft-Realms-Emulator/Modes/Realms/WorldsController.cs rename to Minecraft-Realms-Emulator/Modes/Realms/Controllers/WorldsController.cs index d984f5e..c89b764 100644 --- a/Minecraft-Realms-Emulator/Modes/Realms/WorldsController.cs +++ b/Minecraft-Realms-Emulator/Modes/Realms/Controllers/WorldsController.cs @@ -5,6 +5,7 @@ using Minecraft_Realms_Emulator.Data; using Minecraft_Realms_Emulator.Entities; using Minecraft_Realms_Emulator.Enums; using Minecraft_Realms_Emulator.Helpers; +using Minecraft_Realms_Emulator.Modes.Realms.Helpers; using Minecraft_Realms_Emulator.Requests; using Minecraft_Realms_Emulator.Responses; using Newtonsoft.Json; @@ -13,7 +14,7 @@ using System.Diagnostics; using System.Net; using System.Net.Sockets; -namespace Minecraft_Realms_Emulator.Modes.Realms +namespace Minecraft_Realms_Emulator.Modes.Realms.Controllers { [Route("modes/realms/[controller]")] [ApiController] @@ -275,15 +276,7 @@ namespace Minecraft_Realms_Emulator.Modes.Realms CommandBlocks = false }; - // Run docker container - ProcessStartInfo serverProcessInfo = new(); - - serverProcessInfo.FileName = "docker"; - serverProcessInfo.Arguments = $"run -d --name realm-server-{world.Id} -p {port}:25565 realm-server"; - - Process serverProcess = new(); - serverProcess.StartInfo = serverProcessInfo; - serverProcess.Start(); + new DockerHelper().CreateServer(world.Id, port); _context.Worlds.Update(world); @@ -316,15 +309,7 @@ namespace Minecraft_Realms_Emulator.Modes.Realms if (world == null) return NotFound("World not found"); - // Start the server - ProcessStartInfo serverProcessInfo = new(); - - serverProcessInfo.FileName = "docker"; - serverProcessInfo.Arguments = $"container start realm-server-{world.Id}"; - - Process serverProcess = new(); - serverProcess.StartInfo = serverProcessInfo; - serverProcess.Start(); + new DockerHelper().StartServer(wId); world.State = nameof(StateEnum.OPEN); @@ -400,7 +385,7 @@ namespace Minecraft_Realms_Emulator.Modes.Realms slot.CommandBlocks = body.CommandBlocks; _context.SaveChanges(); - + return Ok(true); } @@ -476,15 +461,7 @@ namespace Minecraft_Realms_Emulator.Modes.Realms if (world == null) return NotFound("World not found"); - // Remove docker container - ProcessStartInfo serverProcessInfo = new(); - - serverProcessInfo.FileName = "docker"; - serverProcessInfo.Arguments = $"container rm realm-server-{world.Id}"; - - Process serverProcess = new(); - serverProcess.StartInfo = serverProcessInfo; - serverProcess.Start(); + new DockerHelper().DeleteServer(wId); _context.Worlds.Remove(world); _context.SaveChanges(); diff --git a/Minecraft-Realms-Emulator/Modes/Realms/Helpers/DockerHelper.cs b/Minecraft-Realms-Emulator/Modes/Realms/Helpers/DockerHelper.cs new file mode 100644 index 0000000..0175137 --- /dev/null +++ b/Minecraft-Realms-Emulator/Modes/Realms/Helpers/DockerHelper.cs @@ -0,0 +1,43 @@ +using System.Diagnostics; + +namespace Minecraft_Realms_Emulator.Modes.Realms.Helpers +{ + public class DockerHelper + { + public void CreateServer(int id, int port) + { + ProcessStartInfo serverProcessInfo = new(); + + serverProcessInfo.FileName = "docker"; + serverProcessInfo.Arguments = $"run -d --name realm-server-{id} -p {port}:25565 realm-server"; + + Process serverProcess = new(); + serverProcess.StartInfo = serverProcessInfo; + serverProcess.Start(); + } + + public void StartServer(int id) + { + ProcessStartInfo serverProcessInfo = new(); + + serverProcessInfo.FileName = "docker"; + serverProcessInfo.Arguments = $"container start realm-server-{id}"; + + Process serverProcess = new(); + serverProcess.StartInfo = serverProcessInfo; + serverProcess.Start(); + } + + public void DeleteServer(int id) + { + ProcessStartInfo serverProcessInfo = new(); + + serverProcessInfo.FileName = "docker"; + serverProcessInfo.Arguments = $"container rm realm-server-{id}"; + + Process serverProcess = new(); + serverProcess.StartInfo = serverProcessInfo; + serverProcess.Start(); + } + } +}