From 6a3bfd314d87bed96611d24440b0961a06bf7e91 Mon Sep 17 00:00:00 2001 From: Ben Harris Date: Mon, 20 Apr 2020 17:24:59 -0400 Subject: stateful in progress --- IrcTokens/StatefulEncoder.cs | 35 +++++++++++++++++++++++++++++++++++ 1 file changed, 35 insertions(+) create mode 100644 IrcTokens/StatefulEncoder.cs (limited to 'IrcTokens/StatefulEncoder.cs') diff --git a/IrcTokens/StatefulEncoder.cs b/IrcTokens/StatefulEncoder.cs new file mode 100644 index 0000000..0c8b5f9 --- /dev/null +++ b/IrcTokens/StatefulEncoder.cs @@ -0,0 +1,35 @@ +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace IrcTokens +{ + public class StatefulEncoder + { + private string _buffer; + public EncodingInfo Encoding { get; set; } + private List _bufferedLines; + + public string Pending => _buffer; + + public void Clear() + { + _buffer = ""; + _bufferedLines.Clear(); + } + + public void Push(Line line) + { + _buffer += $"{line.Format()}\r\n"; + _bufferedLines.Add(line); + } + + public List Pop(int byteCount) + { + var sent = _buffer.Substring(byteCount).Count(c => c == '\n'); + _buffer = _buffer.Substring(byteCount); + _bufferedLines = _bufferedLines.Skip(sent).ToList(); + return _bufferedLines.Take(sent).ToList(); + } + } +} -- cgit 1.4.1