예제 #1
0
        /// <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);
        }
예제 #2
0
        /// <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);
        }
예제 #3
0
        /// <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);
        }