Пример #1
0
 private static void adicionarValor(string[] entrada, ref Stack <DicionarioFredis> torrePrincipal, ref Stack <Transacao> listaDeTransacoes)
 {
     if (!torrePrincipal.Any(d => d.Chave == entrada[1]))
     {
         var objNovo = new DicionarioFredis(entrada[1], entrada[2], Operacao.Insercao, listaDeTransacoes.Count == 0 ? null : listaDeTransacoes.Peek());
         torrePrincipal.Push(objNovo);
         Ok();
     }
     else
     {
         adicionaValorQueJaExiste(entrada, ref torrePrincipal, ref listaDeTransacoes);
     }
 }
Пример #2
0
        static void Main(string[] args)
        {
            int geradorIndiceTransacao = 0;

            var listaDeTransacoes = new Stack <Transacao>();



            var torrePrincipal = new Stack <DicionarioFredis>();

            Console.WriteLine(@" " + Environment.NewLine + "Menu:" + Environment.NewLine +
                              " " + Environment.NewLine +
                              "0 - Zerar dados para novo teste" + Environment.NewLine +
                              " clear " + Environment.NewLine +
                              " " + Environment.NewLine +
                              "1 - Adicionando dados:" + Environment.NewLine +

                              "  Add:" + Environment.NewLine +
                              "   Add chave valor." + Environment.NewLine +
                              "  Set:" + Environment.NewLine +
                              "   Set chave valor." + Environment.NewLine +
                              " " + Environment.NewLine +
                              "2 - Pegando dados: " + Environment.NewLine +

                              "   get chave" + Environment.NewLine +
                              " " + Environment.NewLine +
                              "3 - Deletando dados" + Environment.NewLine +

                              "   del chave" + Environment.NewLine +
                              " " + Environment.NewLine +
                              "4 - Retornando quantidade de chaves" + Environment.NewLine +

                              "   count" + Environment.NewLine +
                              " " + Environment.NewLine +
                              "5 - Iniciando uma transação" + Environment.NewLine +

                              "  begin" + Environment.NewLine +
                              " " + Environment.NewLine +
                              "6 - Confirmando todas as operações realizadas" + Environment.NewLine +

                              "  commit" + Environment.NewLine +
                              " " + Environment.NewLine +
                              "7 - Desfazendo todas as operações da última " +
                              "transação" + Environment.NewLine +

                              "   rollback" + Environment.NewLine +

                              " " + Environment.NewLine +
                              "8 - Printar valores da pilha " + Environment.NewLine +
                              " print" + Environment.NewLine +

                              " " + Environment.NewLine +
                              "9 - Sair do programa " + Environment.NewLine +
                              " exit"
                              );


            bool naoSair = true;

            while (naoSair)
            {
                Console.Write("> ");
                var entrada = Console.ReadLine().Split(" ");

                switch (entrada[0].ToLower())
                {
                    #region set pronto
                case "set":

                    try
                    {
                        adicionarValor(entrada, ref torrePrincipal, ref listaDeTransacoes);
                    }
                    catch (Exception e)
                    {
                        Console.WriteLine("Erro no set: " + e.Message);
                    }

                    break;
                    #endregion

                    #region get pronto
                case "get":

                    try
                    {
                        var chaveValor = torrePrincipal.FirstOrDefault(d => d.Chave == entrada[1] && d.Operacao != Operacao.Exclusao);

                        if (chaveValor == null)
                        {
                            Nil();
                        }
                        else
                        {
                            Console.WriteLine("Chave -> " + chaveValor.Chave + " com valor -> " + chaveValor.Valor);
                        }
                    }
                    catch (Exception e)
                    {
                        Console.WriteLine("Erro no get: " + e.Message);
                    }

                    break;
                    #endregion

                    #region del
                case "del":
                    try
                    {
                        if (torrePrincipal.Where(d => d.Chave == entrada[1]) == null)
                        {
                            Nil();
                            break;
                        }
                        if (listaDeTransacoes.Any())
                        {
                            delChave(entrada[1], ref torrePrincipal, listaDeTransacoes.Peek());
                        }
                        else
                        {
                            delChave(entrada[1], ref torrePrincipal);
                        }
                    }
                    catch (Exception e)
                    {
                        Console.WriteLine("Erro no deletar: " + e.Message);
                    }

                    break;
                    #endregion

                    #region add pronto
                case "add":

                    try
                    {
                        var o = new DicionarioFredis(entrada[1], entrada[2], Operacao.Insercao, listaDeTransacoes.Count == 0 ? null : listaDeTransacoes.Peek());

                        if (!torrePrincipal.Any(d => d.Chave == o.Chave))
                        {
                            torrePrincipal.Push(o);
                            Ok();
                        }
                        else
                        {
                            Console.WriteLine("Já existe uma chave valor");
                            Console.WriteLine("Caso Queira sobrescrever, utilize o set no lugar do add.");
                        }
                    }
                    catch (Exception e)
                    {
                        Console.WriteLine("Erro no add: " + e.Message);
                    }
                    break;
                    #endregion

                    #region count pronto
                case "count":
                    var totalChaves = torrePrincipal.Where(df => df.Operacao == Operacao.Insercao).Count();
                    Console.WriteLine(totalChaves);
                    break;
                    #endregion

                    #region begin
                case "begin":
                    listaDeTransacoes.Push(new Transacao(geradorIndiceTransacao));
                    geradorIndiceTransacao++;
                    break;
                    #endregion

                    #region commit
                case "commit":

                    try
                    {
                        if (listaDeTransacoes == null || listaDeTransacoes.Count == 0)
                        {
                            Console.WriteLine("(no transactions)");
                            break;
                        }

                        commitTransacoes(ref torrePrincipal, ref listaDeTransacoes);
                    }
                    catch (Exception e)
                    {
                        Console.WriteLine("Erro no commit: " + e.Message);
                    }

                    break;
                    #endregion

                    #region rollback
                case "rollback":
                    try
                    {
                        if (listaDeTransacoes == null || listaDeTransacoes.Count == 0)
                        {
                            Console.WriteLine("(no transactions)");
                            break;
                        }
                        rollbackStack(ref torrePrincipal, ref listaDeTransacoes);
                    }
                    catch (Exception e)
                    {
                        Console.WriteLine("Erro no rollback: " + e.Message);
                    }

                    break;
                    #endregion

                    #region print pronto
                case "print":
                    try
                    {
                        if (torrePrincipal.Count == 0)
                        {
                            Console.WriteLine("Não há dados");
                        }
                        else
                        {
                            foreach (var item in torrePrincipal)
                            {
                                if (item.Operacao == Operacao.Exclusao)
                                {
                                    Console.WriteLine("Item chave {0} valor {1} excluído", item.Chave, item.Valor);
                                }
                                else
                                {
                                    Console.WriteLine("Item chave {0} valor {1}", item.Chave, item.Valor);
                                }
                            }
                        }
                    }
                    catch (Exception e)
                    {
                        Console.WriteLine("Erro no print: " + e.Message);
                    }

                    break;

                    #endregion
                case "clear":
                    listaDeTransacoes.Clear();
                    torrePrincipal.Clear();
                    break;

                case "exit":
                    naoSair = false;
                    Console.WriteLine("O programa será desligado...");
                    Thread.Sleep(2000);
                    break;

                default:
                    Console.WriteLine("Comando inválido");
                    break;
                }
            }
        }