Ejemplo n.º 1
0
        public async Task StopServer()
        {
            while (true)
            {
                await Task.Delay((int)BotConfig.GetCachedConfig().PollingDelay);

                MineStat ms = new MineStat(BotConfig.GetCachedConfig().Minecraft.MinecraftServerIP, BotConfig.GetCachedConfig().Minecraft.MinecraftServerPort);
                Console.WriteLine("Current player count: " + ms.CurrentPlayers);
                if (ms.CurrentPlayers == "0")
                {
                    Console.WriteLine("Server player is count is zero. Sleeping, and checking again.");
                    await Task.Delay((int)BotConfig.GetCachedConfig().StopServerDelay);

                    ms = new MineStat(BotConfig.GetCachedConfig().Minecraft.MinecraftServerIP, BotConfig.GetCachedConfig().Minecraft.MinecraftServerPort);
                    if (ms.ServerUp && ms.CurrentPlayers == "0")
                    {
                        Console.WriteLine("Player count is still zero. Stopping.");
                        await Embeds.EditMessage(Embeds.ServerStopping());

                        var stopRequest = new StopInstancesRequest();
                        var request     = new StopInstancesRequest();
                        request.InstanceIds = new List <string>()
                        {
                            BotConfig.GetCachedConfig().Aws.EC2InstanceId
                        };
                        request.Force = false;
                        var response = await client.StopInstancesAsync(request);

                        ushort pollCounter = 0;
                        while (pollCounter < BotConfig.GetCachedConfig().Aws.MaxInstanceStartAttempts)
                        {
                            pollCounter++;
                            await Task.Delay(5000);

                            var serverState = await this.GetState();

                            if (serverState.InstanceState.Code == 80)
                            {
                                break;
                            }
                        }
                        await Embeds.EditMessage(Embeds.ServerStopped());

                        break;
                    }
                }
            }
            IsWorking = false;
        }