// Ocorre quando um novo cliente é aceito private void AceitaCliente() { srReceptor = new System.IO.StreamReader(tcpCliente.GetStream()); swEnviador = new System.IO.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 (JogoServidor.htUsuarios.Contains(usuarioAtual) == true) { // 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 JogoServidor.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) { JogoServidor.RemoveUsuario(tcpCliente); } else { // envia a mensagem para todos os outros usuários JogoServidor.EnviaMensagem(usuarioAtual, strResposta); } } } catch { // Se houve um problema com este usuário desconecta-o JogoServidor.RemoveUsuario(tcpCliente); } }
private void BtnIniciar_Click(object sender, EventArgs e) { if (BtnIniciar.Text.Trim() == "Iniciar") { string porta = TxtPorta.Text; if (string.IsNullOrWhiteSpace(porta)) { MessageBox.Show("Informe a porta que o servidor irá trabalhar!"); } else if (!Regex.IsMatch(porta, "[ ^ 0-9]")) { MessageBox.Show("Informe apenas números para a porta do servidor!"); } int portaConexao; if (!int.TryParse(porta, out portaConexao)) { MessageBox.Show("Erro ao converter a porta para inteiro!"); } if (portaConexao < 0 || portaConexao > 65535) { MessageBox.Show("Porta inválida! Informe uma porta entre 0 e 65535."); return; } //Inciar servido try { // Analisa o endereço IP do servidor informado no textbox IPAddress enderecoIP = IPAddress.Parse(TxtIp.Text); // Cria uma nova instância do objeto JogoServidor mainServidor = new JogoServidor(enderecoIP, portaConexao); // Vincula o tratamento de evento StatusChanged a mainServer_StatusChanged JogoServidor.StatusChanged += new StatusChangedEventHandler(mainServidor_StatusChanged); // Inicia o atendimento das conexões mainServidor.IniciarServidor(); //Se der certo, alterar o status TxtIp.ReadOnly = true; TxtPorta.ReadOnly = true; LabStatus.Text = $"Ligado!"; LabStatus.ForeColor = System.Drawing.Color.Green; BtnIniciar.Text = "Parar"; // Mostra que nos iniciamos o atendimento para conexões txtLogs.AppendText("Monitorando as conexões...\r\n"); } catch (Exception ex) { MessageBox.Show("Erro de conexão : " + ex.Message); } } else if (BtnIniciar.Text.Trim() == "Parar") { try { mainServidor.DesligarServidor(); txtLogs.AppendText("Servidor parado...\r\n"); //Se der certo, alterar o status TxtIp.ReadOnly = false; TxtPorta.ReadOnly = false; LabStatus.Text = "Desligado!"; LabStatus.ForeColor = System.Drawing.Color.DarkRed; BtnIniciar.Text = "Iniciar"; } catch (Exception ex) { MessageBox.Show("Erro de conexão : " + ex.Message); } } else { MessageBox.Show("Operação não programada. Reinicie a aplicação!"); } }