private void btnStartServer_Click(object sender, EventArgs e) { if (conectado) { Application.Exit(); return; } if (txtIP.Text == string.Empty) { MessageBox.Show("Informe o endereço IP."); txtIP.Focus(); return; } try { // Analisa o endereço IP do servidor informado no textbox IPAddress enderecoIP = IPAddress.Parse(txtIP.Text); int portaHost = (int)numPorta.Value; // Cria uma nova instância do objeto ChatServidor Servidor mainServidor = new Servidor(enderecoIP, portaHost); // Vincula o tratamento de evento StatusChanged a mainServer_StatusChanged Servidor.StatusChanged += new StatusChangedEventHandler(mainServidor_StatusChanged); // Inicia o atendimento das conexões mainServidor.IniciaAtendimento(); // Mostra que nos iniciamos o atendimento para conexões listaLog.Items.Add("Servidor ativo, aguardando usuários conectarem-se..."); listaLog.SetSelected(listaLog.Items.Count - 1, true); } catch (Exception ex) { listaLog.Items.Add("Erro de conexão : " + ex.Message); listaLog.SetSelected(listaLog.Items.Count - 1, true); return; } conectado = true; txtIP.Enabled = false; numPorta.Enabled = false; btnStartServer.ForeColor = Color.Red; btnStartServer.Text = "Sair"; }
// Ocorre quando um novo cliente é aceito private void AceitaCliente() { srReceptor = new StreamReader(tcpCliente.GetStream()); swEnviador = new StreamWriter(tcpCliente.GetStream()); // Lê a informação da conta do cliente usuarioAtual = srReceptor.ReadLine(); // temos uma resposta do cliente if (usuarioAtual != "") { // Armazena o nome do usuário na hash table if (Servidor.htUsuarios.Contains(usuarioAtual)) { // 0 => significa não conectado swEnviador.WriteLine("0|Este nome de usuário já existe."); swEnviador.Flush(); FechaConexao(); return; } else if (usuarioAtual == "Administrator") { // 0 => não conectado swEnviador.WriteLine("0|Este nome de usuário é reservado."); swEnviador.Flush(); FechaConexao(); return; } else { // 1 => conectou com sucesso swEnviador.WriteLine("1"); swEnviador.Flush(); // Inclui o usuário na hash table e inicia a escuta de suas mensagens Servidor.IncluiUsuario(tcpCliente, usuarioAtual); } } else { FechaConexao(); return; } try { // Continua aguardando por uma mensagem do usuário while ((strResposta = srReceptor.ReadLine()) != "") { // Se for inválido remove-o if (strResposta == null) { Servidor.RemoveUsuario(tcpCliente); } else { // envia a mensagem para todos os outros usuários Servidor.EnviaMensagem(usuarioAtual, strResposta); } } } catch { // Se houve um problema com este usuário desconecta-o Servidor.RemoveUsuario(tcpCliente); } }