about summary refs log tree commit diff
path: root/IrcTokens/StatefulEncoder.cs
diff options
context:
space:
mode:
Diffstat (limited to 'IrcTokens/StatefulEncoder.cs')
-rw-r--r--IrcTokens/StatefulEncoder.cs35
1 files changed, 35 insertions, 0 deletions
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<Line> _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<Line> 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();
+        }
+    }
+}