private void button1_Click(object sender, EventArgs e) { CreateRoomForm f = new CreateRoomForm(); f.ShowDialog(); if (f.Created) { _chatClient.CreateRoom(f.RoomName, Login); } }
private async Task DispatchCommand(ICommand command, IChatClient chatClient, IDictionary <string, ChatRoom> knownRooms, IDictionary <string, IRoom> roomInstances, ICollection <Task> roomsTasks, CancellationToken stoppingToken) { switch (command) { case JoinRoomCommand joinRoomCommand: { var roomName = joinRoomCommand.RoomName; if (!knownRooms.TryGetValue(roomName, out var room)) { logger.LogWarning("Cannot join unknown [room={Room}][known={Keys}]", roomName, string.Join(",", knownRooms.Keys)); return; } try { roomInstances[roomName] = await chatClient.JoinRoom(room, stoppingToken); } catch (ChatException error) { logger.LogError(error, "Failed joining chat room: {Description}", error.Message); break; } logger.LogDebug("Joined [room={Room}]", roomInstances[roomName]); roomsTasks.Add(ListenForMessages(roomInstances[roomName], stoppingToken)); Console.WriteLine($"Joined {room}"); break; } case ListRoomsCommand: { var roomsList = await chatClient.ListRooms(stoppingToken); foreach (var chatRoom in roomsList) { if (knownRooms.TryAdd(chatRoom.Name, chatRoom)) { logger.LogDebug("Added [room={Room}]", chatRoom); } } foreach (var(room, _) in knownRooms) { Console.WriteLine($"{room}"); } break; } case SendMessageCommand sendMessageCommand: { var roomName = sendMessageCommand.RoomName; if (!roomInstances.TryGetValue(roomName, out var room)) { logger.LogWarning("Cannot send to unknown [room={Room}][joined={Keys}]", roomName, string.Join(",", roomInstances.Keys)); return; } await room.SendMessage(sendMessageCommand.Message, stoppingToken); logger.LogDebug("Sent [message={Message}] to [room={Room}]", sendMessageCommand.Message, room); break; } case CreateRoomCommand createRoomCommand: { var roomName = createRoomCommand.RoomName; if (roomInstances.TryGetValue(roomName, out _)) { logger.LogWarning("Cannot create existing room [room={Room}][joined={Keys}]", roomName, string.Join(",", roomInstances.Keys)); return; } await chatClient.CreateRoom(roomName, stoppingToken); break; } case InfoCommand: { Console.WriteLine($"Name: {chatClient.User.Name}"); break; } default: { logger.LogWarning("Unknown [command={Command}]", command); break; } } }