internal static bool?QueryAccountIdExists(string accountId)
        {
            try
            {
                using (MySqlConnection mySqlConnection = MySqlConnector.InitializeMySqlConnection())
                {
                    if (MySqlConnector.OpenConnection(mySqlConnection))
                    {
                        using (MySqlCommand c = new MySqlCommand(m_GetUserAccountFromIdString, mySqlConnection))
                        {
                            c.Parameters.Add(new MySqlParameter("?id", accountId));

                            using (MySqlDataReader reader = c.ExecuteReader())
                            {
                                if (reader.Read())
                                {
                                    return(true);
                                }
                            }
                        }

                        MySqlConnector.CloseConnection(mySqlConnection);
                        return(false);
                    }

                    return(null); //Unable To Open Database Connection
                }
            }

            catch (Exception e) { Console.WriteLine(e.ToString()); return(null); }
        }
        internal static void CreateAccount(string clientId, string accountId, string username, string password, string email)
        {
            string passwordSalt = GenerateHashSalt(m_HashSize);
            string passwordHash = GenerateHash(password + passwordSalt);

            try
            {
                using (MySqlConnection mySqlConnection = MySqlConnector.InitializeMySqlConnection())
                {
                    if (MySqlConnector.OpenConnection(mySqlConnection))
                    {
                        using (MySqlCommand c = new MySqlCommand(m_CreateAccountString, mySqlConnection))
                        {
                            c.Parameters.Add(new MySqlParameter("?id", accountId));
                            c.Parameters.Add(new MySqlParameter("?account", username));
                            c.Parameters.Add(new MySqlParameter("?passHash", passwordHash));
                            c.Parameters.Add(new MySqlParameter("?passSalt", passwordSalt));
                            c.Parameters.Add(new MySqlParameter("?email", email));

                            int i = c.ExecuteNonQuery();

                            if (i > 0)
                            {
                                if (clientId != string.Empty)
                                {
                                    NetworkEventDispatcher.InvokeAccountCreationSuccessEvent
                                        (new AccountCreationSuccessArgs(clientId));
                                }

                                Console.WriteLine("Account Successfully Created For: {0}", username);
                            }

                            else
                            {
                                if (clientId != string.Empty)
                                {
                                    NetworkEventDispatcher.InvokeAccountCreationFailedEvent
                                        (new AccountCreationFailedArgs(clientId, AccountCreationFailType.Unknown));
                                }

                                Console.WriteLine("Failed To Create New Account For: {0}", username);
                            }

                            MySqlConnector.CloseConnection(mySqlConnection);
                        }
                    }

                    else
                    {
                        Console.WriteLine("[Error]: Unable To Contact Database During: (CreateAccount).");
                    }
                }
            }

            catch (Exception e) { Console.WriteLine(e.ToString()); }
        }
        internal static bool?UserRelationshipExists(string userId, string friendId)
        {
            try
            {
                using (MySqlConnection mySqlConnection = MySqlConnector.InitializeMySqlConnection())
                {
                    if (MySqlConnector.OpenConnection(mySqlConnection))
                    {
                        using (MySqlCommand c = new MySqlCommand(m_QueryFriendIdentityExistsString, mySqlConnection))
                        {
                            c.Parameters.Add(new MySqlParameter("?user", userId));
                            c.Parameters.Add(new MySqlParameter("?friend", friendId));

                            using (MySqlDataReader reader = c.ExecuteReader())
                            {
                                if (reader.Read())
                                {
                                    if (ServerCore.DebugMode)
                                    {
                                        Console.WriteLine("User Relationship [{1}] Does Not Exist For: {0}",
                                                          AccountHandler.GetAccountById(userId), AccountHandler.GetAccountById(friendId));
                                    }
                                    return(true);
                                }

                                else
                                if (ServerCore.DebugMode)
                                {
                                    Console.WriteLine("User Relationship [{1}] Already Exists For: {0}",
                                                      AccountHandler.GetAccountById(userId), AccountHandler.GetAccountById(friendId));
                                }
                            }
                        }

                        MySqlConnector.CloseConnection(mySqlConnection);
                    }

                    else
                    {
                        Console.WriteLine("[Error]: Unable To Contact Database During: (GetUserFriends).");
                        return(null);
                    }
                }
            }

            catch (Exception e)
            {
                Console.WriteLine(e.ToString());
                return(null);
            }

            return(false);
        }
        internal static string[] GetAccountDetails(string username)
        {
            string[] details = new string[5];

            try
            {
                using (MySqlConnection mySqlConnection = MySqlConnector.InitializeMySqlConnection())
                {
                    if (MySqlConnector.OpenConnection(mySqlConnection))
                    {
                        using (MySqlCommand c = new MySqlCommand(m_GetAccountDetailsString, mySqlConnection))
                        {
                            c.Parameters.Add(new MySqlParameter("?account", username));

                            using (MySqlDataReader reader = c.ExecuteReader())
                            {
                                while (reader.Read())
                                {
                                    details[0] = reader["account_email"].ToString();
                                    details[1] = reader["user_rating"].ToString();
                                    details[2] = reader["user_wins"].ToString();
                                    details[3] = reader["user_losses"].ToString();
                                    details[4] = reader["id"].ToString();
                                }
                            }
                        }

                        MySqlConnector.CloseConnection(mySqlConnection);
                    }

                    else
                    {
                        Console.WriteLine("[Error]: Unable To Contact Database During: (GetAccountDetails).");
                        return(null);
                    }
                }
            }

            catch (Exception e)
            {
                Console.WriteLine(e.ToString());
                return(null);
            }

            if (ServerCore.DebugMode)
            {
                Console.WriteLine("Details For [{0}]: {1}, {2}, {3}, {4}, {5}",
                                  username, details[0], details[1], details[2], details[3], details[4]);
            }

            return(details);
        }
        internal static string[] GetUserFriends(string id)
        {
            List <string> friendIds = new List <string>();

            try
            {
                using (MySqlConnection mySqlConnection = MySqlConnector.InitializeMySqlConnection())
                {
                    if (MySqlConnector.OpenConnection(mySqlConnection))
                    {
                        using (MySqlCommand c = new MySqlCommand(m_GetUserFriendsString, mySqlConnection))
                        {
                            c.Parameters.Add(new MySqlParameter("?id", id));

                            using (MySqlDataReader reader = c.ExecuteReader())
                            {
                                while (reader.Read())
                                {
                                    friendIds.Add((string)reader["friendId"]);
                                }
                            }
                        }

                        MySqlConnector.CloseConnection(mySqlConnection);
                    }

                    else
                    {
                        Console.WriteLine("[Error]: Unable To Contact Database During: (GetUserFriends).");
                        return(null);
                    }
                }
            }

            catch (Exception e)
            {
                Console.WriteLine(e.ToString());
                return(null);
            }

            if (ServerCore.DebugMode)
            {
                Console.WriteLine("Gathered [{0}] Friend Entries..", friendIds.Count);
            }

            return(friendIds.ToArray());
        }
        internal static void RemoveUserRelationships(string user, string friend)
        {
            try
            {
                using (MySqlConnection mySqlConnection = MySqlConnector.InitializeMySqlConnection())
                {
                    if (MySqlConnector.OpenConnection(mySqlConnection))
                    {
                        using (MySqlCommand c = new MySqlCommand(m_DeleteUserRelationshipString, mySqlConnection))
                        {
                            c.Parameters.Add(new MySqlParameter("?user", user));
                            c.Parameters.Add(new MySqlParameter("?friend", friend));

                            int i = c.ExecuteNonQuery();

                            if (i > 0)
                            {
                                if (ServerCore.DebugMode)
                                {
                                    Console.WriteLine("Sucessfully Removed User Relationship: {0} <> {1}", user, friend);
                                }
                            }

                            else
                            {
                                if (ServerCore.DebugMode)
                                {
                                    Console.WriteLine("Failed To Remove User Relationship: {0} <> {1}", user, friend);
                                }
                            }

                            MySqlConnector.CloseConnection(mySqlConnection);
                        }
                    }

                    else
                    {
                        Console.WriteLine("[Error]: Unable To Contact Database During: (CreateAccount).");
                    }
                }
            }

            catch (Exception e) { Console.WriteLine(e.ToString()); }
        }
        internal static void AddFriendRelationship(string userId, string friendId)
        {
            bool?relationshipExists = UserRelationshipExists(userId, friendId);

            if (relationshipExists != null && relationshipExists.Value == false)
            {
                try
                {
                    using (MySqlConnection mySqlConnection = MySqlConnector.InitializeMySqlConnection())
                    {
                        if (MySqlConnector.OpenConnection(mySqlConnection))
                        {
                            using (MySqlCommand c = new MySqlCommand(m_AddUserFriendRelationshipString, mySqlConnection))
                            {
                                c.Parameters.Add(new MySqlParameter("?userId", userId));
                                c.Parameters.Add(new MySqlParameter("?friendId", friendId));

                                int i = c.ExecuteNonQuery();

                                if (i > 0)
                                {
                                    Console.WriteLine("User Relationship Successfully Created For: {0}", AccountHandler.GetAccountById(userId).Username);
                                }

                                else
                                {
                                    Console.WriteLine("Failed To Create New User Relationship For: {0}", AccountHandler.GetAccountById(userId).Username);
                                }

                                MySqlConnector.CloseConnection(mySqlConnection);
                            }
                        }

                        else
                        {
                            Console.WriteLine("[Error]: Unable To Contact Database During: (CreateAccount).");
                        }
                    }
                }

                catch (Exception e) { Console.WriteLine(e.ToString()); }
            }
        }
        internal static string GetAccountNameFromId(string id)
        {
            string username = null;

            try
            {
                using (MySqlConnection mySqlConnection = MySqlConnector.InitializeMySqlConnection())
                {
                    if (MySqlConnector.OpenConnection(mySqlConnection))
                    {
                        using (MySqlCommand c = new MySqlCommand(m_GetUserAccountFromIdString, mySqlConnection))
                        {
                            c.Parameters.Add(new MySqlParameter("?id", id));

                            using (MySqlDataReader reader = c.ExecuteReader())
                            {
                                while (reader.Read())
                                {
                                    username = reader["account_name"].ToString();
                                }
                            }
                        }

                        MySqlConnector.CloseConnection(mySqlConnection);
                    }

                    else
                    {
                        Console.WriteLine("[Error]: Unable To Contact Database During: (GetAccounFromId).");
                        return(null);
                    }
                }
            }

            catch (Exception e)
            {
                Console.WriteLine(e.ToString());
                return(null);
            }

            return(username);
        }
        internal static string GetUserPassSalt(string username)
        {
            try
            {
                using (MySqlConnection connection = MySqlConnector.InitializeMySqlConnection())
                {
                    if (MySqlConnector.OpenConnection(connection))
                    {
                        using (MySqlCommand c = new MySqlCommand(m_GetPasswordSaltString, connection))
                        {
                            c.Parameters.Add(new MySqlParameter("?account", username));

                            using (MySqlDataReader reader = c.ExecuteReader())
                            {
                                if (reader.Read())
                                {
                                    return(reader.GetString(0));
                                }

                                else
                                {
                                    Console.WriteLine("Unable To Obtain Hash Salt For Account: {0}", username);
                                    return(string.Empty);
                                }
                            }
                        }
                    }

                    else
                    {
                        Console.WriteLine("[Error]: Unable To Contact Database During: (GetUserPassSalt).");
                        return(string.Empty);
                    }
                }
            }

            catch (Exception e) { Console.WriteLine(e.ToString()); return(string.Empty); }
        }
        internal static bool?QueryAccountExists(string clientId, string username, string email)
        {
            try
            {
                using (MySqlConnection mySqlConnection = MySqlConnector.InitializeMySqlConnection())
                {
                    if (MySqlConnector.OpenConnection(mySqlConnection))
                    {
                        using (MySqlCommand c = new MySqlCommand(m_QueryAccountNameExistsString, mySqlConnection))
                        {
                            c.Parameters.Add(new MySqlParameter("?account", username));

                            using (MySqlDataReader reader = c.ExecuteReader())
                            {
                                if (reader.Read())
                                {
                                    if (clientId != string.Empty)
                                    {
                                        NetworkEventDispatcher. //Notify Client Account Name Exists
                                        InvokeAccountCreationFailedEvent
                                            (new AccountCreationFailedArgs(clientId, AccountCreationFailType.UsernameExists));
                                    }

                                    Console.WriteLine
                                        ("Failed To Create New Account For: {0} (Username [{1}] Already Exists)",
                                        username, reader["account_name"].ToString());

                                    return(true);
                                }
                            }
                        }

                        using (MySqlCommand c = new MySqlCommand(m_QueryAccountEmailExistsString, mySqlConnection))
                        {
                            c.Parameters.Add(new MySqlParameter("?email", email));

                            using (MySqlDataReader reader = c.ExecuteReader())
                            {
                                if (reader.Read())
                                {
                                    if (clientId != string.Empty)
                                    {
                                        NetworkEventDispatcher. //Notify Client Email Already In Use
                                        InvokeAccountCreationFailedEvent
                                            (new AccountCreationFailedArgs(clientId, AccountCreationFailType.EmailExists));
                                    }

                                    Console.WriteLine("Failed To Create New Account For: {0} (Email Already Exists)", username);

                                    return(true);
                                }
                            }
                        }

                        MySqlConnector.CloseConnection(mySqlConnection);
                        return(false);
                    }

                    return(null); //Unable To Open Database Connection
                }
            }

            catch (Exception e) { Console.WriteLine(e.ToString()); return(null); }
        }