diff options
Diffstat (limited to 'TokensSample')
-rw-r--r-- | TokensSample/Client.cs | 71 | ||||
-rw-r--r-- | TokensSample/Program.cs | 26 | ||||
-rw-r--r-- | TokensSample/TokensSample.csproj | 12 |
3 files changed, 109 insertions, 0 deletions
diff --git a/TokensSample/Client.cs b/TokensSample/Client.cs new file mode 100644 index 0000000..933cab7 --- /dev/null +++ b/TokensSample/Client.cs @@ -0,0 +1,71 @@ +using System; +using System.Collections.Generic; +using System.Net.Sockets; +using IrcTokens; + +namespace TokensSample +{ + public class Client + { + private readonly byte[] _bytes; + private readonly StatefulDecoder _decoder; + private readonly StatefulEncoder _encoder; + private readonly Socket _socket; + + 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 = "NICK", Params = new List<string> {"tokensbot"}}); + Send(new Line {Command = "USER", Params = new List<string> {"tokensbot", "0", "*", "real name"}}); + + while (true) + { + var bytesReceived = _socket.Receive(_bytes); + + if (bytesReceived == 0) + { + Console.WriteLine("! disconnected"); + _socket.Shutdown(SocketShutdown.Both); + break; + } + + var lines = _decoder.Push(_bytes); + + 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<string> {"#test"}}); + break; + case "PRIVMSG": + Send(new Line {Command = "PRIVMSG", Params = new List<string> {line.Params[0], "hello there"}}); + break; + } + } + } + } + + private void Send(Line line) + { + Console.WriteLine($"> {line.Format()}"); + _encoder.Push(line); + while (_encoder.PendingBytes.Length > 0) + _encoder.Pop(_socket.Send(_encoder.PendingBytes)); + } + } +} diff --git a/TokensSample/Program.cs b/TokensSample/Program.cs new file mode 100644 index 0000000..c3a0885 --- /dev/null +++ b/TokensSample/Program.cs @@ -0,0 +1,26 @@ +using System; +using System.Collections.Generic; +using IrcTokens; + +namespace TokensSample +{ + public class Program + { + public static void Main(string[] args) + { + // tokenization + var line = new Line("@id=123 :ben!~ben@hostname PRIVMSG #channel :hello there!"); + Console.WriteLine(line); + Console.WriteLine(line.Format()); + + // formatting + var line2 = new Line {Command = "USER", Params = new List<string> {"user", "0", "*", "real name"}}; + Console.WriteLine(line2); + Console.WriteLine(line2.Format()); + + // stateful example + var client = new Client(); + client.Start(); + } + } +} diff --git a/TokensSample/TokensSample.csproj b/TokensSample/TokensSample.csproj new file mode 100644 index 0000000..7c66734 --- /dev/null +++ b/TokensSample/TokensSample.csproj @@ -0,0 +1,12 @@ +<Project Sdk="Microsoft.NET.Sdk"> + + <PropertyGroup> + <OutputType>Exe</OutputType> + <TargetFramework>netcoreapp3.1</TargetFramework> + </PropertyGroup> + + <ItemGroup> + <ProjectReference Include="..\IrcTokens\IrcTokens.csproj" /> + </ItemGroup> + +</Project> |