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