public async Task Logout()
        {
            var content = await File.ReadAllTextAsync("session.json");

            var sessionData    = JsonConvert.DeserializeObject <Dictionary <string, string> >(content);
            var sessionHandler = new SessionHandler();
            await sessionHandler.CloseAsync(sessionData);
        }
Exemplo n.º 2
0
        private static Command CreateCloseCommand()
        {
            var command = new Command("close", "Close Nauta session");

            command.Handler = CommandHandler.Create(
                async() =>
            {
                Log.Information("Closing Nauta session...");

                Dictionary <string, string> sessionData = null;
                try
                {
                    var sessionContent = await File.ReadAllTextAsync("session.json");
                    sessionData        = JsonSerializer.Deserialize <Dictionary <string, string> >(sessionContent);
                }
                catch (Exception e)
                {
                    Log.Error(e, "Error deserializing session data.");
                }

                if (sessionData != null)
                {
                    // TODO: Improve this
                    var policy = Policy.Handle <HttpRequestException>().WaitAndRetryForeverAsync(
                        retryAttempt => TimeSpan.FromSeconds(5),
                        (exception, retry, timeSpan) =>
                    {
                        Log.Error(exception, "Error closing Nauta session.");
                    });

                    DateTime startDateTime = default;
                    var isTimeAvailable    = sessionData.TryGetValue(SessionDataKeys.Started, out var started) &&
                                             DateTime.TryParse(started, out startDateTime);

                    var sessionHandler = new SessionHandler();

                    // var remainingTime = await policy.ExecuteAsync(() => sessionHandler.RemainingTimeAsync(sessionData));

                    await policy.ExecuteAsync(() => sessionHandler.CloseAsync(sessionData));
                    var endDateTime = DateTime.Now;

                    try
                    {
                        File.Delete("session.json");
                    }
                    catch (Exception e)
                    {
                        Log.Error(e, "Error deleting persisted session");
                    }

                    //Log.Information(
                    //    "Remaining Time: '{RemainingTime}'.",
                    //    $"{(int)remainingTime.TotalHours}hrs {remainingTime:mm}mn {remainingTime:ss}sec");

                    if (isTimeAvailable)
                    {
                        var elapsedTime = endDateTime.Subtract(startDateTime);
                        Log.Information("Nauta session closed. Duration: '{Duration}'.", $"{(int)elapsedTime.TotalHours}hrs {elapsedTime:mm}mn {elapsedTime:ss}sec");
                    }
                    else
                    {
                        Log.Information("Nauta session closed.");
                    }
                }
                else
                {
                    Log.Information("This command requires an open session. Open a nauta session first with open command.");
                }
            });

            return(command);
        }