diff options
Diffstat (limited to 'IrcStates/README.md')
-rw-r--r-- | IrcStates/README.md | 82 |
1 files changed, 0 insertions, 82 deletions
diff --git a/IrcStates/README.md b/IrcStates/README.md deleted file mode 100644 index 05daa8c..0000000 --- a/IrcStates/README.md +++ /dev/null @@ -1,82 +0,0 @@ -# IrcStates - -port of [jesopo/ircstates](https://github.com/jesopo/ircstates) - -bare bones irc client state - -see the full example in [StatesSample/Client.cs](../Examples/States/Client.cs) - - internal class Client - { - private readonly byte[] _bytes; - private readonly StatefulEncoder _encoder; - private readonly string _host; - private readonly string _nick; - private readonly int _port; - private readonly Server _server; - private readonly Socket _socket; - - public Client(string host, int port, string nick) - { - _server = new Server("test"); - _socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); - _encoder = new StatefulEncoder(); - _host = host; - _port = port; - _nick = nick; - _bytes = new byte[1024]; - } - - private void Send(string raw) - { - _encoder.Push(new Line(raw)); - } - - public void Start() - { - _socket.Connect(_host, _port); - while (!_socket.Connected) Thread.Sleep(1000); - - Send("USER test 0 * test"); - Send($"NICK {_nick}"); - - while (true) - { - while (_encoder.PendingBytes.Any()) - { - var bytesSent = _socket.Send(_encoder.PendingBytes); - var sentLines = _encoder.Pop(bytesSent); - foreach (var line in sentLines) Console.WriteLine($"> {line.Format()}"); - } - - var bytesReceived = _socket.Receive(_bytes); - if (bytesReceived == 0) - { - Console.WriteLine("! disconnected"); - _socket.Shutdown(SocketShutdown.Both); - _socket.Close(); - break; - } - - var receivedLines = _server.Receive(_bytes, bytesReceived); - foreach (var (line, _) in receivedLines) - { - Console.WriteLine($"< {line.Format()}"); - - switch (line.Command) - { - case Commands.Privmsg: - if (line.Params[1].Contains(_server.NickName)) - Send($"PRIVMSG {line.Params[0]} :hi {line.Hostmask.NickName}!"); - break; - case "PING": - Send($"PONG :{line.Params[0]}"); - break; - case Numeric.RPL_WELCOME: - if (!_server.HasChannel("#test")) Send("JOIN #test"); - break; - } - } - } - } - } \ No newline at end of file |