示例#1
0
        /// <summary>
        /// Metodo construtor que e chamado para os varios clientes
        /// </summary>
        /// <param name="sockRecep"></param>
        /// <param name="sockEnvio"></param>
        public ConnectionThread(Socket sockRecep, Socket sockEnvio)
        {
            this.sockRecep = sockRecep;
            this.sockEnvio = sockEnvio;

            //codigo que trata da desserializacao na socket
            SC = new SockComunica(sockEnvio, sockRecep);
        }
示例#2
0
        /// <summary>
        /// Permite ver o saldo do utilizador
        /// </summary>
        public void VerSaldo(int idUtil)
        {
            //variaveis auxiliares
            float saldo;

            Console.WriteLine("O utilizador selecionou a opcao de ver o saldo");

            //Estabelecer uma coneccao com o servidor de contabilidade
            Console.WriteLine("Tentando abrir uma conneccao com o servidor de contabilidade");

            //Para envio de mensagens
            Socket newSEnvio = AbrirConecSerCont();
            //Para recepcao de mensagens
            Socket newSRecepcao = AbrirConecSerCont();
            //Para facilitar o codigo de comunicacao com o servidor de contabilidade
            SockComunica SC1 = new SockComunica(newSEnvio, newSRecepcao);

            //receber uma confirmacao se o servidor de contabilidade esta online
            Console.WriteLine(SC1.RecebeSer());
            SC1.EnviaSer("ack");

            //Enviar a id de utilizador
            SC1.EnviaSer(idUtil);
            SC1.RecebeSer();

            //Enviar a operecao do utilizador que neste caso é verificar o saldo
            SC1.EnviaSer("saldo");
            SC1.RecebeSer();

            //**********************************

            //Receber o saldo do utilizador(float)
            saldo = (float)SC1.RecebeSer();
            SC1.EnviaSer("ack");
            //SC1.EnviaSer("ack");

            Console.WriteLine("O saldo do cliente: " + saldo);
            //Console.ReadLine();

            //Enviar o saldo para a aplicacao cliente
            //SC.EnviaSer(saldo);
            //SC.RecebeSer();

            //Fechar a coneccao com o servidor de contabilidade
            Console.WriteLine("A fechar ligacao com o servidor de contabilidade");
            newSEnvio.Close();
            newSRecepcao.Close();

            Console.WriteLine("Operacao de ver saldo realizada com sucesso");
            //Console.ReadLine();

            //Enviar o saldo para a aplicacao cliente
            SC.EnviaSer(saldo);
            //SC.EnviaSer(saldo);
            SC.RecebeSer();
        }
示例#3
0
        /// <summary>
        /// Permite despositar dinheiro
        /// </summary>
        public void DepositarDinheiro(int idUtil)
        {
            //Variaveis auxiliares
            float saldoIncre;
            float saldo;

            //Receber da aplicacao cliente o valor a incrementar ao saldo
            saldoIncre = (float)SC.RecebeSer();
            SC.EnviaSer("ack");

            //Estabelecer uma coneccao com o servidor de contabilidade
            Console.WriteLine("Tentando abrir uma conneccao com o servidor de contabilidade");
            //Para envio de mensagens
            Socket newSEnvio = AbrirConecSerCont();
            //Para recepcao de mensagens
            Socket newSRecepcao = AbrirConecSerCont();
            //Para facilitar o codigo de comunicacao com o servidor de contabilidade
            SockComunica SC1 = new SockComunica(newSEnvio, newSRecepcao);

            //receber uma confirmacao se o servidor de contabilidade esta online
            Console.WriteLine(SC1.RecebeSer());
            SC1.EnviaSer("ack");

            //Enviar a operacao que o id de utilizador
            SC1.EnviaSer(idUtil);
            SC1.RecebeSer();

            //Enviar a operacao do utilizador que neste caso é incrementar o saldo
            SC1.EnviaSer("depDin");
            SC1.RecebeSer();

            //*************************

            //Enviar o valor a incrementar ao saldo
            SC1.EnviaSer(saldoIncre);
            SC1.RecebeSer();

            //Receber o valor final do saldo
            saldo = (float)SC1.RecebeSer();
            SC1.EnviaSer("ack");

            //Fechar a coneccao com o servidor de contabilidade
            Console.WriteLine("A fechar ligacao com o servidor de contabilidade");
            newSEnvio.Close();
            newSRecepcao.Close();

            //Enviar o valor do saldo final para a aplicacao cliente
            SC.EnviaSer(saldo);
            SC.RecebeSer();

            Console.WriteLine("Operacao de ver o depositar dinheiro realizada com sucesso");
        }
示例#4
0
        /// <summary>
        /// Metodo construtor
        /// </summary>
        /// <param name="sock">Recebe a socket de uma dada conneccao</param>
        public ConnectionThread(Socket sockRecep, Socket sockEnvio)
        {
            this.sockRecep = sockRecep;
            this.sockEnvio = sockEnvio;

            //codigo que trata da desserializacao na socket
            SC = new SockComunica(sockEnvio, sockRecep);

            //Colocar valores dummy na lista de saldos
            //ListaSaldos.Add(10.00f);
            //ListaSaldos.Add(0.00f);
            //ListaSaldos.Add(2000.00f);
        }
示例#5
0
        /// <summary>
        /// Para obter o valor maximo que o utilizador pode licitar
        /// </summary>
        public void ValorMaximoLic(int idUtil, String login)
        {
            //variaveis auxiliares
            float valorTotal; //valor total licitado em todos os leiloes
            float saldo;      //saldo que o utilizador tem para investir

            Console.WriteLine("O utilizador selecionou a opcao de ver o valor maximo que pode licitar");

            //Estabelecer uma conneccao com o servidor de contabilidade
            Console.WriteLine("Tentando abrir uma conneccao com o servidor de contabilidade");

            //Para o envio de mensagens
            Socket newEnvio = AbrirConecSerCont();
            //Para recepcao de mensagens
            Socket newSRecepcao = AbrirConecSerCont();
            //Para facilitar o codigo de comunicacao com o servidor de contaibilidade
            SockComunica SC1 = new SockComunica(newEnvio, newSRecepcao);

            //Receber uma confirmacao se o servidor de contabilidade esta online
            Console.WriteLine(SC1.RecebeSer());
            SC1.EnviaSer("ack");

            //Enviar o id de utilizador
            SC1.EnviaSer(idUtil);
            SC1.RecebeSer();

            //Enviar a operacao do utilizador que neste caso é verificar o saldo(operacao é a mesma que em cima)
            SC1.EnviaSer("saldo");
            SC1.RecebeSer();

            //Receber o saldo do utilizador(float)
            saldo = (float)SC1.RecebeSer();
            SC1.EnviaSer("ack");

            //Vai buscar o valor total das licitacoes ja feitas
            valorTotal = Leiloes.ValorLic(login);

            //Enviar o saldo do utilizador
            SC.EnviaSer(saldo);
            SC.RecebeSer();

            //Enviar o valor total licitado em leiloes
            SC.EnviaSer(valorTotal);
            SC.RecebeSer();

            Console.WriteLine("Operacao de ver o valor maximo que pode licitar realizada com sucesso");
            //Console.ReadLine();
        }
示例#6
0
        static void Main(string[] args)
        {
            //codigo para defenir a posicao da janela
            int xpos = 300;
            int ypos = 300;

            SetWindowPos(MyConsole, 0, xpos, ypos, 0, 0, SWP_NOSIZE);

            Console.Title = "Cliente";
            Console.WriteLine("**********Cliente**********");

            //Variaveis auxilixares
            string login        = "";
            string password     = "";
            bool   utilExist    = false; //para guardar a resposta que vem do servidor leiloes se existe um utilizador com um determinado login
            bool   passCorrecta = false; //para guadar a resposta que vem do servidor leiloes se a password é correcta ao nao
            bool   exit         = false; //quando esta variavel é colocada a true significa que o utilizador vai sair do programa
            string cmd          = "";    //para guardar a variavel do comando do utilizador

            //o servidor dos leiloes é na porta 6000
            IPEndPoint ipe = new IPEndPoint(IPAddress.Parse("127.0.0.1"), 6000);

            //codigo que trata do Envio
            Socket sockEnvio = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);

            sockEnvio.Connect(ipe);
            //Console.WriteLine("Socket de envio aberta com sucesso");

            //codigo que trata da Recepcao
            Socket sockRecepcao = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);

            sockRecepcao.Connect(ipe);
            //Console.WriteLine("Socket de recepcao aberta com sucesso");

            //codigo que trata da desserializacao na socket
            SC = new SockComunica(sockEnvio, sockRecepcao);

            //Recebe uma mensagem de confirmacao de que o cliente foi conectado ao servidor com sucesso
            Console.WriteLine(SC.RecebeSer());
            SC.EnviaSer("O cliente conectou-se com sucesso a este servidor");

            do
            {
                //Introduzir o login
                Console.WriteLine("Introduza o login: "******"ack");

                Console.WriteLine(utilExist?"Login existe":"Esse login nao existe");
            }while(!utilExist);

            do
            {
                //enviar a password(string)
                Console.WriteLine("Introduza a password:"******"ack");

                Console.WriteLine(passCorrecta?"Password correcta":"Password incorrecta");
            }while(!passCorrecta);

            Console.WriteLine("Utilizador autenticado com sucesso");
            Console.ReadLine();

            //mostrar entao um menu de opcoes
            do
            {
                //Limpar o ecran da consola
                Console.Clear();

                //Imprimir as opcoes de menu
                PrintMenu();

                //Receber a opcao da consola que o utilizador deseja efectuar
                cmd = Console.ReadLine();

                //enviar a operacao que o utilizador vai efectuar no servidor de leiloes
                //SC.EnviaSer(cmd);
                //Console.WriteLine(SC.RecebeSer());

                if (cmd.Equals("saldo"))
                {
                    VerSaldo(cmd);
                }
                else if (cmd.Equals("depDin"))
                {
                    DepositarDinheiro(cmd);
                }
                else if (cmd.Equals("not"))
                {
                    VerNotificacoes(cmd);
                }
                else if (cmd.Equals("verLei"))
                {
                    VerListaLeiloes(cmd);
                }
                else if (cmd.Equals("verLeiAct"))
                {
                    VerListaLeiloesActivos(cmd);
                }
                else if (cmd.Equals("criarLei"))
                {
                    CriarLeilao(cmd);
                }
                else if (cmd.Equals("infoLei"))
                {
                    InfoLeilao(cmd);
                }
                else if (cmd.Equals("licitar"))
                {
                    Licitar(cmd);
                }
                else if (cmd.Equals("valorLic"))
                {
                    ValorMaximoLic(cmd);
                }
                else if (cmd.Equals("verLeiFech"))
                {
                    VerListaLeiloesFech(cmd);
                }
                else if (cmd.Equals("listarLei"))
                {
                    VerListaTodosLeiloes(cmd);
                }
                else if (cmd.Equals("exit"))
                {
                    exit = true;
                }
                else
                {
                    Console.WriteLine("Esse comando nao e reconhecido. Prima enter.");
                    Console.ReadLine();
                }

                //Console.ReadLine();
            }while(!exit);

            //Enviar o comando exit para o servidor de leiloes
            SC.EnviaSer("exit");
            SC.RecebeSer();
            SC.RecebeSer();

            //Fechar ligacoes com o servidor de leiloes
            sockEnvio.Close();
            sockRecepcao.Close();
        }
示例#7
0
        /// <summary>
        /// De cada vez que passa um segundo este metodo e chamado
        /// </summary>
        /// <param name="stateInfo"></param>
        private void Tick(Object stateInfo)
        {
            //obter o tempo actual
            DateTime relogio = DateTime.Now;

            //Para imprimir o tempo por uma questao de testes
            //Console.WriteLine("Tick: {0}", relogio.ToString("h:mm:ss"));

            //Percorrer todos os leiloes para ver o tempo chegou ao fim
            foreach (Leilao l in ListaLeiloes.Leiloes.Where(a => a.Activo))
            {
                if (l.VerificaTempoFinal(DateTime.Now))
                {
                    //a. Notificacao para os compradores que fizeram licitacoes mas não ganharam o leilao
                    if (l.NumLicitacoes() > 1)
                    {
                        foreach (string lict in l.LicitadoresPassados())
                        {
                            Utilizadores.GetUtilizador(lict).InserirNotificacao(l.NotificacaoA(lict));
                        }
                    }

                    //b. Notificacao para o comprador que ganhou o leilao
                    if (l.NumLicitacoes() >= 1)
                    {
                        Utilizadores.GetUtilizador(l.Comprador()).InserirNotificacao(l.NotificacaoB());
                    }

                    //c. Para o vendedor quando o tempo de duracao do leilao chega ao fim sem licitacoes
                    if (l.NumLicitacoes() == 0)
                    {
                        Utilizadores.GetUtilizador(l.Utilizador).InserirNotificacao(l.NotificacaoC());
                    }

                    //d. Para o vendedor quando o tempo de duracao do leilao chega ao fim e existiram licitacoes
                    if (l.NumLicitacoes() >= 0)
                    {
                        Utilizadores.GetUtilizador(l.Utilizador).InserirNotificacao(l.NotificacaoD());
                    }

                    //Fazer a transacao bancaria se existir pelo menos um licitador
                    if (l.NumLicitacoes() >= 1)
                    {
                        //Estabelecer uma coneccao com o servidor de contabilidade
                        Console.WriteLine("Tentando abrir uma conneccao com o servidor de contabilidade");

                        //Para envio de mensagens
                        Socket newSEnvio = AbrirConecSerCont();
                        //Para recepcao de mensagens
                        Socket newSRecepcao = AbrirConecSerCont();
                        //Para facilitar o codigo de comunicacao com o servidor de contabilidade
                        SockComunica SC1 = new SockComunica(newSEnvio, newSRecepcao);

                        //receber uma confirmacao se o servidor de contabilidade esta online
                        Console.WriteLine(SC1.RecebeSer());
                        SC1.EnviaSer("ack");

                        //Enviar o id do Comprador
                        SC1.EnviaSer(Utilizadores.ObterIdUtilizador(l.Comprador()));
                        SC1.RecebeSer();

                        //Enviar a operacao que neste caso e realizar Transaccao
                        SC1.EnviaSer("trans");
                        SC1.RecebeSer();

                        //**********************************

                        //Enviar o id do vendedor
                        SC1.EnviaSer(Utilizadores.ObterIdUtilizador(l.Utilizador));
                        SC1.RecebeSer();

                        //Enviar o valor a decrementar no saldo do comprador e a ser incrementado no saldo do vendedor
                        SC1.EnviaSer(l.ValorFinalLicitacoes());
                        SC1.RecebeSer();
                    }

                    //Enviar um mail se existir pelo menos um licitador
                    if (l.NumLicitacoes() >= 1)
                    {
                        l.MandarMail(Utilizadores.ObterEnderecoMail(l.Utilizador), Utilizadores.ObterEnderecoMail(l.Comprador()));
                    }

                    Console.WriteLine("Acabou de fechar o leilao com o seguinte titulo: " + l.Titulo);
                }
            }
        }