fix some stateful stuff
This commit is contained in:
parent
f1c4ed9ae8
commit
8bc9eb4b75
|
@ -201,9 +201,9 @@ namespace IrcTokens
|
|||
if (Params != null && Params.Any())
|
||||
{
|
||||
var last = Params[^1];
|
||||
Params.RemoveAt(Params.Count - 1);
|
||||
var withoutLast = Params.SkipLast(1).ToList();
|
||||
|
||||
foreach (var p in Params)
|
||||
foreach (var p in withoutLast)
|
||||
{
|
||||
if (p.Contains(' ', StringComparison.Ordinal))
|
||||
throw new ArgumentException(@"non-last parameters cannot have spaces", p);
|
||||
|
@ -212,7 +212,7 @@ namespace IrcTokens
|
|||
throw new ArgumentException(@"non-last parameters cannot start with colon", p);
|
||||
}
|
||||
|
||||
outs.AddRange(Params);
|
||||
outs.AddRange(withoutLast);
|
||||
|
||||
if (string.IsNullOrWhiteSpace(last) || last.Contains(' ', StringComparison.Ordinal) ||
|
||||
last.StartsWith(':'))
|
||||
|
|
|
@ -90,20 +90,20 @@ namespace IrcTokens
|
|||
}
|
||||
}
|
||||
|
||||
var decodeLines = new List<string>();
|
||||
foreach (var line in listLines.Select(l => l.ToArray()))
|
||||
_buffer = listLines[^1].ToArray();
|
||||
|
||||
var decodeLines = new List<Line>();
|
||||
foreach (var line in listLines.SkipLast(1).Select(l => l.ToArray()))
|
||||
try
|
||||
{
|
||||
decodeLines.Add(Encoding.GetString(line));
|
||||
decodeLines.Add(new Line(Encoding.GetString(line)));
|
||||
}
|
||||
catch (DecoderFallbackException)
|
||||
{
|
||||
decodeLines.Add(Fallback.GetString(line));
|
||||
decodeLines.Add(new Line(Fallback.GetString(line)));
|
||||
}
|
||||
|
||||
return decodeLines
|
||||
.Select(l => new Line(l))
|
||||
.ToList();
|
||||
return decodeLines;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -25,12 +25,11 @@ namespace TokensSample
|
|||
_socket.Connect("127.0.0.1", 6667);
|
||||
|
||||
Send(new Line {Command = "NICK", Params = new List<string> {"tokensbot"}});
|
||||
Send(new Line {Command = "USER", Params = new List<string> {"username", "0", "*", "real name"}});
|
||||
Send(new Line {Command = "USER", Params = new List<string> {"tokensbot", "0", "*", "real name"}});
|
||||
|
||||
while (true)
|
||||
{
|
||||
var bytesReceived = _socket.Receive(_bytes);
|
||||
var lines = _decoder.Push(_bytes);
|
||||
|
||||
if (bytesReceived == 0)
|
||||
{
|
||||
|
@ -39,6 +38,8 @@ namespace TokensSample
|
|||
break;
|
||||
}
|
||||
|
||||
var lines = _decoder.Push(_bytes);
|
||||
|
||||
foreach (var line in lines)
|
||||
{
|
||||
Console.WriteLine($"< {line.Format()}");
|
||||
|
@ -49,7 +50,10 @@ namespace TokensSample
|
|||
Send(new Line {Command = "PONG", Params = line.Params});
|
||||
break;
|
||||
case "001":
|
||||
Send(new Line {Command = "JOIN", Params = new List<string> {"#channel"}});
|
||||
Send(new Line {Command = "JOIN", Params = new List<string> {"#test"}});
|
||||
break;
|
||||
case "PRIVMSG":
|
||||
Send(new Line {Command = "PRIVMSG", Params = new List<string> {line.Params[0], "hello there"}});
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
@ -60,7 +64,8 @@ namespace TokensSample
|
|||
{
|
||||
Console.WriteLine($"> {line.Format()}");
|
||||
_encoder.Push(line);
|
||||
while (_encoder.PendingBytes.Length > 0) _encoder.Pop(_socket.Send(_encoder.PendingBytes));
|
||||
while (_encoder.PendingBytes.Length > 0)
|
||||
_encoder.Pop(_socket.Send(_encoder.PendingBytes));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue