[RESUELTO] Condiciones en C# [Aplicacion de consola]

Iniciado por laut3n, 24 Febrero 2015, 23:09 PM

0 Miembros y 1 Visitante están viendo este tema.

laut3n

Buenas , como andan ?

Soy nuevo en esto de las aplicaciones de consola en C# , programe con forms bastante tiempo y me acostumbre a ello , y ahora empezar con las aplicaciones de consola es todo un problema Jajajajja.

Les explico mi problema : Tengo un Chat echo con sockets , al momento de apretar enter para enviar el mensaje con un string obtengo dicho mensaje y me fijo si el primer index  
  • es equivalente a / (Es un sistema de comandos) estableciendo la variable "Comando" en true o en false , bueno , aca esta el verdadero problema : Me detecta perfectamente la barra pero cuando envio los mensajes sin la barra se envia uno de cada dos.

    El codigo del socket esta bien echo , funciona perfectamente sin este sistema para comprobar la barra.

    Imagen :



    Codigo :

    Parte del main :

    Código (csharp) [Seleccionar]
    while (true)
               {
                   MandarMensaje();          
               }




    El void :

    Código (csharp) [Seleccionar]
    static void MandarMensaje()
           {
               string texto = Console.ReadLine();
               if (texto[0] == '/')
               {
                   Comando = true;
               }
               else
               {
                   Comando = false;
               }

               if (Comando == false)
               {
                   byte[] sdata = Encoding.Default.GetBytes("<" + name + "> " + Console.ReadLine());
                   acc.Send(sdata, 0, sdata.Length, 0);
                   Console.WriteLine("-"); //Espaciador
               }
               else
               {
                   Console.WriteLine("Comando !");
               }
           }


    Bueno , espero que me puedan ayudar , Saludos!

Eleкtro

#1
Cita de: laut3n en 24 Febrero 2015, 23:09 PM
aca esta el verdadero problema : Me detecta perfectamente la barra pero cuando envio los mensajes sin la barra se envia uno de cada dos.

Código (csharp,3,15) [Seleccionar]
static void MandarMensaje()
       {
           string texto = Console.ReadLine();
           if (texto[0] == '/')
           {
               Comando = true;
           }
           else
           {
               Comando = false;
           }

           if (Comando == false)
           {
               byte[] sdata = Encoding.Default.GetBytes("<" + name + "> " + Console.ReadLine());
               acc.Send(sdata, 0, sdata.Length, 0);
               Console.WriteLine("-"); //Espaciador
           }
           else
           {
               Console.WriteLine("Comando !");
           }
       }



Fíjate que estás leyendo la entrada de la consola DOS veces cuanda la barra "/" no se detecta, es decir, cuando 'comando' es 'False', primero almacenas el input en la variable 'text', pero esa variable no la usas para nada ya que vuelves a leer el input del usuario una seguna vez, por lo tanto el primer mensaje nunca se llega a enviar.

Si no he entendido mal el problema entonces eso es a lo que te refieres, ¿no?, en ese caso cambia el segundo 'Console.ReadLine' por la variable 'texto'.

De todas formas te sugiero hacer más modificaciones, así:

VB.Net
Código (vbnet) [Seleccionar]
   Public Sub SendMessage()

       Dim text As String = Console.ReadLine()

       If String.IsNullOrEmpty(text) Then
           Exit Sub

       Else
           Dim command As Boolean =
               text.TrimStart({" "c, ControlChars.NullChar}).
                    StartsWith("/"c, StringComparison.OrdinalIgnoreCase)

           Select Case command

               Case True
                   Console.WriteLine("Comando !")

               Case Else
                   Dim sdata As Byte() = Encoding.Default.GetBytes(String.Format("<{0}> {1}", name, text))
                   acc.Send(sdata, 0, sdata.Length, 0)
                   Console.WriteLine("-")

           End Select

       End If

   End Sub


Traducción a C#:
Código (csharp) [Seleccionar]
static void SendMessage()
{
string text = Console.ReadLine();

if (string.IsNullOrEmpty(text)) {
return;

} else {
bool command = text.TrimStart({' ', ControlChars.NullChar}).StartsWith('/', StringComparison.OrdinalIgnoreCase);

switch (command) {

case true:
Console.WriteLine("Comando !");
break;

default:
byte[] sdata = Encoding.Default.GetBytes(string.Format("<{0}> {1}", name, text));
acc.Send(sdata, 0, sdata.Length, 0);
Console.WriteLine("-");
break;
}
}
}


Saludos








laut3n