diff options
author | Ben Harris <ben@tilde.team> | 2020-04-28 00:35:52 -0400 |
---|---|---|
committer | Ben Harris <ben@tilde.team> | 2020-04-28 00:35:52 -0400 |
commit | 80afa2c0aec37b7f98cc22615417c36672e695da (patch) | |
tree | 63ca3e309a5daa5093e54bdfdb493115c7a3d942 /IrcTokens/StatefulEncoder.cs | |
parent | 933a4f85604e21445c9bac8272d64cf3e6f65e00 (diff) |
tidy up, work on stateful
Diffstat (limited to 'IrcTokens/StatefulEncoder.cs')
-rw-r--r-- | IrcTokens/StatefulEncoder.cs | 26 |
1 files changed, 10 insertions, 16 deletions
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<Line> _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<Line> _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<byte>(); + PendingBytes = Array.Empty<byte>(); _bufferedLines = new Queue<Line>(); } 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<Line>(_bufferedLines.Skip(sent)); + PendingBytes = PendingBytes.Skip(byteCount).ToArray(); + _bufferedLines = new Queue<Line>(_bufferedLines.Take(sent)); return Enumerable.Range(0, sent) .Select(_ => _bufferedLines.Dequeue()) |