/// <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); }
/// <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(); }
/// <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"); }
/// <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); }
/// <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(); }
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(); }
/// <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); } } }