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 :
(http://i.imgur.com/qAG60qL.png)
Codigo :
Parte del main :
while (true)
{
MandarMensaje();
}
El void :
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!
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.
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 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#:
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