From ca1518a9705ac289875c65c396a2ef7d219492d5 Mon Sep 17 00:00:00 2001 From: Ben Harris Date: Wed, 22 Apr 2020 11:42:09 -0400 Subject: Add sample project --- Sample/Client.cs | 68 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 68 insertions(+) create mode 100644 Sample/Client.cs (limited to 'Sample/Client.cs') diff --git a/Sample/Client.cs b/Sample/Client.cs new file mode 100644 index 0000000..e9e286f --- /dev/null +++ b/Sample/Client.cs @@ -0,0 +1,68 @@ +using System; +using System.Collections.Generic; +using System.Net.Sockets; +using System.Text; +using IrcTokens; + +namespace Sample +{ + public class Client + { + private readonly Socket _socket; + private readonly StatefulDecoder _decoder; + private readonly StatefulEncoder _encoder; + private readonly byte[] _bytes; + + public Client() + { + _decoder = new StatefulDecoder(); + _encoder = new StatefulEncoder(); + _socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.IP); + _bytes = new byte[1024]; + } + + public void Start() + { + _socket.Connect("127.0.0.1", 6667); + + Send(new Line {Command = "USER", Params = new List {"username", "0", "*", "real name"}}); + Send(new Line {Command = "NICK", Params = new List {"statefulbot"}}); + + while (true) + { + var bytesReceived = _socket.Receive(_bytes); + var lines = _decoder.Push(_bytes); + + if (lines.Count == 0) + { + Console.WriteLine("! disconnected"); + _socket.Shutdown(SocketShutdown.Both); + break; + } + + foreach (var line in lines) + { + Console.WriteLine($"< {line.Format()}"); + + switch (line.Command) + { + case "PING": + Send(new Line {Command = "PONG", Params = line.Params}); + break; + case "001": + Send(new Line {Command = "JOIN", Params = new List {"#channel"}}); + break; + } + } + } + } + + private void Send(Line line) + { + Console.WriteLine($"> {line.Format()}"); + _encoder.Push(line); + while (_encoder.PendingBytes.Length > 0) + _encoder.Pop(_socket.Send(_encoder.PendingBytes)); + } + } +} -- cgit 1.4.1