Esempio n. 1
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();
        }
Esempio n. 2
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");
        }
Esempio n. 3
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();
        }
Esempio n. 4
0
        public void handleConnection()
        {
            //incrementa o numero de utilizadores ligados ao servidor central
            cont++;

            //Variaveis auxiliares
            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
            int    idUtil;       //para guardar o id de utilizador

            //Envia a informacao ao cliente que foi conectado com sucesso
            SC.EnviaSer("Connectado com sucesso ao servidor de contabilidade");
            SC.RecebeSer();

            //Receber o id de utilizador
            idUtil = (int)SC.RecebeSer();
            SC.EnviaSer("ack");
            //Console.WriteLine("O id de utilizador: "+idUtil);
            //Console.ReadLine();

            //Menu de opccoes do utilizador
            do
            {
                //Limpar o ecran da consola
                //Console.Clear();

                //Receber a opcao do menu do utilizador
                //Console.WriteLine("A espera de uma escolha do utilizador");

                //Receber o comando que o utilizador selecionou
                cmd = (string)SC.RecebeSer();
                SC.EnviaSer("ack");

                if (cmd.Equals("saldo"))
                {
                    VerSaldo(idUtil);
                }
                else if (cmd.Equals("depDin"))
                {
                    DepositarDinheiro(idUtil);
                }
                else if (cmd.Equals("trans"))
                {
                    RealizarTransicao(idUtil);
                }
            }while(!exit);

            //Console.WriteLine("A coneccao com o servidor de contabilidade esta aberta");
            //Console.ReadLine();
        }
Esempio n. 5
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();
        }
Esempio n. 6
0
        /// <summary>
        /// Permite ver o saldo do utilizador
        /// </summary>
        public static void VerSaldo(string cmd)
        {
            //enviar a operacao que o utilizador vai efectuar no servidor de leiloes
            Console.WriteLine("A enviar comando para o servidor de leiloes");
            SC.EnviaSer(cmd);
            SC.RecebeSer();

            //Receber saldo do servidor de leiloes
            Console.WriteLine("A espera de receber o saldo");
            Console.WriteLine("Saldo: {0:0.00}", (float)SC.RecebeSer());
            //Console.WriteLine("Saldo: "+ SC.RecebeSer());
            SC.EnviaSer("ack");

            Console.WriteLine("A operacao de ver saldo foi realizada com sucesso. Prima enter");
            Console.ReadLine();
        }
Esempio n. 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);
                }
            }
        }
Esempio n. 8
0
        /// <summary>
        /// Metodo que e chamado cada vez que e necessario
        /// </summary>
        public void handleConnection()
        {
            //incrementa o numero de utilizadores ligados ao servidor central
            cont++;

            //Variaveis auxiliares
            //Utilizador util = new Utilizador { };
            string login        = "";    //para guardar o login que vem da aplicacao cliente
            string password     = "";    //para guarda a password que vem da aplicacao cliente
            bool   utilExist    = false; //para guardar a resposta que vai para o servidor se existe um utilizador com um determinado login
            bool   passCorrecta = false; //para guardar a resposta que vai para o servidor de 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
            int    idUtil;               //para guardar o id de utilizador que vai ser utilizado para obter o saldo no servidor de contabilidade

            //codigo que trata da desserializacao na socket
            //SC = new SockComunica(sock);

            //IPEndPoint clientep = (IPEndPoint) client.RemoteEndPoint;
            //Console.WriteLine("Ligado a {0} no porto {1}",clientep.Address,clientep.Port);

            //Envia a informacao ao cliente que foi conectado com sucesso
            SC.EnviaSer("Connectado com sucesso ao servidor de leiloes");
            Console.WriteLine(SC.RecebeSer());

            do
            {
                //Receber login de utilizador(string)
                login = (string)SC.RecebeSer();
                SC.EnviaSer("ack");

                //Verificar se existe um utilizador com esse login
                Console.WriteLine("A verificar o login de utilizador");
                utilExist = Utilizadores.VerificarUtilizador(login);

                //Enviar a confirmacao de que existe ou nao um utilizador com esse login(boolean)
                SC.EnviaSer(utilExist);
                SC.RecebeSer();
            }while(!utilExist);

            //Console.WriteLine("Confirmado que existe login de utilizador");

            do
            {
                //Receber a password(string)
                password = (string)SC.RecebeSer();
                SC.EnviaSer("ack");

                //Verificar se a password de utilizador é a correcta
                Console.WriteLine("A verificar a password de utilizador");
                passCorrecta = Utilizadores.VerificarPassWord(login, password);

                //Enviar a confirmacao de que a password é correcta ao nao(boolean)
                SC.EnviaSer(passCorrecta);
                SC.RecebeSer();
            }while(!passCorrecta);

            //obter o id de utilizador para obter o saldo e depositar dinheiro
            idUtil = Utilizadores.ObterIdUtilizador(login);

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

                //Receber a opcao de menu do utilizador
                Console.WriteLine("A espera de uma escolha do utilizador");

                //Receber o comando que o utilizador selecionou
                cmd = (string)SC.RecebeSer();
                SC.EnviaSer("ack1");
                //SC.EnviaSer("ack2");

                //Console.WriteLine("O utilizador introduzio o seguinte comando: |"+cmd+"|");
                //Console.ReadLine();//Por alguma razao so funciona com este readline

                if (cmd.Equals("saldo"))
                {
                    VerSaldo(idUtil);
                }
                else if (cmd.Equals("depDin"))
                {
                    DepositarDinheiro(idUtil);
                }
                else if (cmd.Equals("not"))
                {
                    VerNotificacoes(login);
                }
                else if (cmd.Equals("verLei"))
                {
                    VerListaLeiloes(login);
                }
                else if (cmd.Equals("verLeiAct"))
                {
                    VerListaLeiloesActivos(login);
                }
                else if (cmd.Equals("criarLei"))
                {
                    CriarLeilao(login);
                }
                else if (cmd.Equals("infoLei"))
                {
                    InfoLeilao();
                }
                else if (cmd.Equals("licitar"))
                {
                    Licitar(login);
                }
                else if (cmd.Equals("valorLic"))
                {
                    ValorMaximoLic(idUtil, login);
                }
                else if (cmd.Equals("verLeiFech"))
                {
                    VerListaLeiloesFech(login);
                }
                else if (cmd.Equals("listarLei"))
                {
                    VerListaTodosLeiloes();
                }
                else if (cmd.Equals("exit"))
                {
                    exit = true;
                }
                else
                {
                    Console.WriteLine("Erro comando nao e reconhecido pelo servidor");
                }
            }while(!exit);

            //do
            //{
            //    recebe = client.Receive(data, data.Length, SocketFlags.None);

            //    txt = Encoding.ASCII.GetString(data,0,recebe);

            //    //Isto é o que fazia broadcast das mensagens pelo que ja nao é necessario no entanto vou deixar comentado
            //    //Program.Broadcast(txt);
            //} while (txt!="exit");

            cont--;
            Console.WriteLine("O cliente desconectou-se");
            SC.EnviaSer("ack");
        }