using System.Threading.Tasks;
using SimpleSocketIoClient;
private class ChatMessage
public string Username { get; set; }
public string Message { get; set; }
public long NumUsers { get; set; }
public static async Task Main()
await using var client = new SocketIoClient();
client.Connected += (sender, args) => Console.WriteLine($"Connected: {args.Namespace}");
client.Disconnected += (sender, args) => Console.WriteLine($"Disconnected. Reason: {args.Reason}, Status: {args.Status:G}");
client.AfterEvent += (sender, args) => Console.WriteLine($"AfterEvent: Namespace: {args.Namespace}, Value: {args.Value}, IsHandled: {args.IsHandled}");
client.AfterHandledEvent += (sender, args) => Console.WriteLine($"AfterHandledEvent: Namespace: {args.Namespace}, Value: {args.Value}");
client.AfterUnhandledEvent += (sender, args) => Console.WriteLine($"AfterUnhandledEvent: Namespace: {args.Namespace}, Value: {args.Value}");
client.AfterError += (sender, args) => Console.WriteLine($"AfterError: Namespace: {args.Namespace}, Value: {args.Value}");
client.AfterException += (sender, args) => Console.WriteLine($"AfterException: {args.Value}");
client.On<ChatMessage>("login", message =>
Console.WriteLine($"You are logged in. Total number of users: {message.NumUsers}");
client.On<ChatMessage>("user joined", message =>
Console.WriteLine($"User joined: {message.Username}. Total number of users: {message.NumUsers}");
client.On<ChatMessage>("user left", message =>
Console.WriteLine($"User left: {message.Username}. Total number of users: {message.NumUsers}");
client.On<ChatMessage>("typing", message =>
Console.WriteLine($"User typing: {message.Username}");
client.On<ChatMessage>("stop typing", message =>
Console.WriteLine($"User stop typing: {message.Username}");
client.On<ChatMessage>("new message", message =>
Console.WriteLine($"New message from user \"{message.Username}\": {message.Message}");
await client.ConnectAsync(new Uri("wss://socket-io-chat.now.sh/"));
await client.Emit("add user", "C# SimpleSocketIoClient Test User");
await Task.Delay(TimeSpan.FromMilliseconds(200));
await client.Emit("typing");
await Task.Delay(TimeSpan.FromMilliseconds(200));
await client.Emit("new message", "hello");
await Task.Delay(TimeSpan.FromMilliseconds(200));
await client.Emit("stop typing");
await Task.Delay(TimeSpan.FromSeconds(2));
await client.DisconnectAsync();