using System; using System.IO; using System.Net.Sockets; using System.Text; using System.Threading; using NetCoreServer; namespace UdsChatClient { class ChatClient : UdsClient { public ChatClient(string path) : base(path) {} public void DisconnectAndStop() { _stop = true; DisconnectAsync(); while (IsConnected) Thread.Yield(); } protected override void OnConnected() { Console.WriteLine($"Chat Unix Domain Socket client connected a new session with Id {Id}"); } protected override void OnDisconnected() { Console.WriteLine($"Chat Unix Domain Socket client disconnected a session with Id {Id}"); // Wait for a while... Thread.Sleep(1000); // Try to connect again if (!_stop) ConnectAsync(); } protected override void OnReceived(byte[] buffer, long offset, long size) { Console.WriteLine(Encoding.UTF8.GetString(buffer, (int)offset, (int)size)); } protected override void OnError(SocketError error) { Console.WriteLine($"Chat Unix Domain Socket client caught an error with code {error}"); } private bool _stop; } class Program { static void Main(string[] args) { // Unix Domain Socket path string path = Path.Combine(Path.GetTempPath(), "chat.sock"); if (args.Length > 0) path = args[0]; Console.WriteLine($"Unix Domain Socket server path: {path}"); Console.WriteLine(); // Create a new Unix Domain Socket chat client var client = new ChatClient(path); // Connect the client Console.Write("Client connecting..."); client.ConnectAsync(); Console.WriteLine("Done!"); Console.WriteLine("Press Enter to stop the client or '!' to reconnect the client..."); // Perform text input for (;;) { string line = Console.ReadLine(); if (string.IsNullOrEmpty(line)) break; // Disconnect the client if (line == "!") { Console.Write("Client disconnecting..."); client.DisconnectAsync(); Console.WriteLine("Done!"); continue; } // Send the entered text to the chat server client.SendAsync(line); } // Disconnect the client Console.Write("Client disconnecting..."); client.DisconnectAndStop(); Console.WriteLine("Done!"); } } }