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 --- IrcStates/Server.cs | 75 ++++++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 74 insertions(+), 1 deletion(-) (limited to 'IrcStates/Server.cs') diff --git a/IrcStates/Server.cs b/IrcStates/Server.cs index 9f97f47..c20e041 100644 --- a/IrcStates/Server.cs +++ b/IrcStates/Server.cs @@ -1,6 +1,79 @@ -namespace IrcStates +using System; +using System.Collections.Generic; +using System.Linq; +using IrcTokens; + +namespace IrcStates { public class Server { + private readonly StatefulDecoder _decoder; + + public Dictionary>> LineHandlers; + + private Dictionary TempCaps; + + public Server(string name) + { + Name = name; + Registered = false; + Modes = new List(); + Motd = new List(); + _decoder = new StatefulDecoder(); + LineHandlers = new Dictionary>>(); + Users = new Dictionary(); + Channels = new Dictionary(); + ISupport = new ISupport(); + HasCap = false; + TempCaps = new Dictionary(); + AvailableCaps = new Dictionary(); + AgreedCaps = new List(); + } + + public string Name { get; set; } + public string NickName { get; set; } + public string NickNameLower { get; set; } + public string UserName { get; set; } + public string HostName { get; set; } + public string RealName { get; set; } + public string Account { get; set; } + public string Away { get; set; } + + public bool Registered { get; set; } + public List Modes { get; set; } + public List Motd { get; set; } + public Dictionary Users { get; set; } + public Dictionary Channels { get; set; } + public Dictionary AvailableCaps { get; set; } + public List AgreedCaps { get; set; } + + public ISupport ISupport { get; set; } + public bool HasCap { get; set; } + + public override string ToString() + { + return $"Server(name={Name})"; + } + + public List<(Line, Emit)> Recv(byte[] data) + { + var lines = _decoder.Push(data); + if (lines == null) throw new ServerDisconnectedException(); + + var emits = lines.Select(ParseTokens).ToList(); + return null; + } + + private Emit ParseTokens(Line line) + { + Emit ret; + if (LineHandlers.ContainsKey(line.Command)) + foreach (var callback in LineHandlers[line.Command]) + { + var emit = callback(line.Command, line); + } + + throw new NotImplementedException(); + } } } -- cgit 1.4.1