/// <summary> /// Remove user from the Hash Tables and inform all users about it /// </summary> /// <param name="tcpClient"></param> public ServerConnectionResult RemoveUser(TcpClient tcpClient) { ServerConnectionResult result = null; try { // If user already exists if (Connections[tcpClient] != null) { var user = Connections[tcpClient]; Users.Remove(Connections[tcpClient]); Connections.Remove(tcpClient); string userLefttext = $"{user} left."; UpdateServerAndUsers(userLefttext); } result = new ServerConnectionResult(true); } catch (Exception ex) { result = new ServerConnectionResult(ex); } return(result); }
/// <summary> /// Add user in the Hash Tables and inform the new connection to all users. /// </summary> /// <param name="tcpClient"></param> /// <param name="nickname"></param> public ServerConnectionResult AddUser(TcpClient tcpClient, string nickname) { ServerConnectionResult result = null; try { Users.Add(nickname, tcpClient); Connections.Add(tcpClient, nickname); string newConnectionText = $"{Connections[tcpClient]} has joined."; UpdateServerAndUsers(newConnectionText); result = new ServerConnectionResult(true); } catch (Exception ex) { result = new ServerConnectionResult(ex); } return(result); }
/// <summary> /// Send message based on the configuration (public or privately) /// </summary> /// <param name="source"></param> /// <param name="message"></param> public ServerConnectionResult SendMessage(string source, string message) { ServerConnectionResult result = null; try { string fullMessage = string.Empty; // Split the messages using ||| // Count = 1 => Public Message // Count = 2 => Public Message to One User // Count = 3 => Private Message to Specific User var messageContent = message.Split("|||"); var mesageContentCount = messageContent.Count(); // Public message if (mesageContentCount == 1) { fullMessage = $"{source} says to all: {message}"; UpdateServerInformation(fullMessage); SendPublicMessage(fullMessage); } // Public message to one user else if (mesageContentCount == 2) { string publicUser = messageContent[0]; string publicMessage = messageContent[1]; fullMessage = $"{source} says to {publicUser}: {publicMessage}"; var userExists = CheckIfUserExists(publicUser); if (userExists) { UpdateServerInformation(fullMessage); SendPublicMessage(fullMessage); } else { SendServerPrivateMessage(ServerChatServiceConstants.USER_NOT_FOUND, source); } } // Private message to specific user else if (mesageContentCount == 3) { string privateUser = messageContent[0]; string privateMessage = messageContent[1]; fullMessage = $"{source} says to {privateUser} (privately): {privateMessage}"; var userExists = CheckIfUserExists(privateUser); if (userExists) { UpdateServerInformation(fullMessage); SendPrivateMessage(fullMessage, source, messageContent[0]); } else { SendServerPrivateMessage(ServerChatServiceConstants.USER_NOT_FOUND, source); } } result = new ServerConnectionResult(true); } catch (Exception ex) { result = new ServerConnectionResult(ex); } return(result); }