private void DirectoryChanged(object source, FileSystemEventArgs e) { /** New user entered chat */ if (e.ChangeType == WatcherChangeTypes.Created) { users.Add(e.Name); // Need to call ToList since we modify each element in-place foreach (var chatUi in chatUiList.ToList()) { chatUi.AddUserToList(e.Name); } } /** User left chat */ else if (e.ChangeType == WatcherChangeTypes.Deleted) { IChatUi disposedUserListManager = null; // Need to call ToList since we modify each element in-place foreach (var userListManager in chatUiList.ToList()) { users.Remove(e.Name); if (userListManager.Username != e.Name) { userListManager.RemoveUserFromList(e.Name); } else { disposedUserListManager = userListManager; } } chatUiList.Remove(disposedUserListManager); } }
/// <summary> /// Given a username, get its user interface /// </summary> /// <param name="username"></param> /// <returns></returns> private IChatUi getChatClient(string username) { if (chatClients.TryGetValue(username, out ChatInstance chatUiAndChannel)) { IChatUi chatUi = chatUiAndChannel.Item1; Debug.Assert(username == chatUi.Username); return(chatUi); } throw new InvalidOperationException($"Username {username} not previously registered"); }
public void SendMessage(IChatUi chatClient, string recipient, string messageText) { try { var message = new Message(chatClient.Username, recipient, messageText); Configuration.AppendToFile(recipient, message.ToString()); chatClient.AddChatLine(message); } catch (ArgumentException ae) { chatClient.AddChatErrorLine($"Message could not be sent :: {ae.Message}"); } }
public void AddChatErrorLine(string username, string errorMessage) { IChatUi chatClient = getChatClient(username); chatClient.AddChatErrorLine(errorMessage); }
public void AppendParsedMessageToChat(string username, Message message) { IChatUi chatClient = getChatClient(username); chatClient.AddChatLine(message); }
public void RemoveChatUi(IChatUi chatInterface) { chatUiList.Remove(chatInterface); }
public void AddChatUi(IChatUi chatInterface) { chatUiList.Add(chatInterface); }