From 80afa2c0aec37b7f98cc22615417c36672e695da Mon Sep 17 00:00:00 2001 From: Ben Harris Date: Tue, 28 Apr 2020 00:35:52 -0400 Subject: tidy up, work on stateful --- IrcTokens/StatefulEncoder.cs | 26 ++++++++++---------------- 1 file changed, 10 insertions(+), 16 deletions(-) (limited to 'IrcTokens/StatefulEncoder.cs') diff --git a/IrcTokens/StatefulEncoder.cs b/IrcTokens/StatefulEncoder.cs index c036400..b486736 100644 --- a/IrcTokens/StatefulEncoder.cs +++ b/IrcTokens/StatefulEncoder.cs @@ -7,8 +7,14 @@ namespace IrcTokens { public class StatefulEncoder { + private Queue _bufferedLines; private Encoding _encoding; + public StatefulEncoder() + { + Clear(); + } + public Encoding Encoding { get => _encoding ?? Encoding.GetEncoding(Encoding.UTF8.CodePage, EncoderFallback.ExceptionFallback, @@ -16,15 +22,11 @@ namespace IrcTokens set { if (value != null) - { _encoding = Encoding.GetEncoding(value.CodePage, EncoderFallback.ExceptionFallback, DecoderFallback.ExceptionFallback); - } } } - private Queue _bufferedLines; - public byte[] PendingBytes { get; private set; } public string Pending() @@ -40,23 +42,15 @@ namespace IrcTokens } } - public StatefulEncoder() - { - Clear(); - } - public void Clear() { - PendingBytes = Array.Empty(); + PendingBytes = Array.Empty(); _bufferedLines = new Queue(); } public void Push(Line line) { - if (line == null) - { - throw new ArgumentNullException(nameof(line)); - } + if (line == null) throw new ArgumentNullException(nameof(line)); PendingBytes = PendingBytes.Concat(Encoding.GetBytes($"{line.Format()}\r\n")).ToArray(); _bufferedLines.Enqueue(line); @@ -66,8 +60,8 @@ namespace IrcTokens { var sent = PendingBytes.Take(byteCount).Count(c => c == '\n'); - PendingBytes = PendingBytes.Skip(byteCount).ToArray(); - _bufferedLines = new Queue(_bufferedLines.Skip(sent)); + PendingBytes = PendingBytes.Skip(byteCount).ToArray(); + _bufferedLines = new Queue(_bufferedLines.Take(sent)); return Enumerable.Range(0, sent) .Select(_ => _bufferedLines.Dequeue()) -- cgit 1.4.1