/// <summary>
        /// connect the client
        /// </summary>
        /// <param name="AUserName"></param>
        /// <param name="APassword"></param>
        /// <param name="AProcessID"></param>
        /// <param name="AWelcomeMessage"></param>
        /// <param name="ASystemEnabled"></param>
        /// <param name="AError"></param>
        /// <param name="AUserInfo"></param>
        /// <returns></returns>
        virtual protected eLoginEnum ConnectClient(String AUserName,
                                                   String APassword,
                                                   out Int32 AProcessID,
                                                   out String AWelcomeMessage,
                                                   out Boolean ASystemEnabled,
                                                   out String AError,
                                                   out IPrincipal AUserInfo)
        {
            AError          = "";
            ASystemEnabled  = false;
            AWelcomeMessage = "";
            AProcessID      = -1;
            AUserInfo       = null;

            try
            {
                eLoginEnum result = FClientManager.ConnectClient(AUserName, APassword,
                                                                 TClientInfo.ClientComputerName,
                                                                 TClientInfo.ClientIPAddress,
                                                                 new Version(TClientInfo.ClientAssemblyVersion),
                                                                 DetermineClientServerConnectionType(),
                                                                 out FClientID,
                                                                 out AWelcomeMessage,
                                                                 out ASystemEnabled,
                                                                 out AUserInfo);

                if (result != eLoginEnum.eLoginSucceeded)
                {
                    AError = result.ToString();
                }

                return(result);
            }
            catch (Exception Exc)
            {
                if (TExceptionHelper.IsExceptionCausedByUnavailableDBConnectionClientSide(Exc))
                {
                    TExceptionHelper.ShowExceptionCausedByUnavailableDBConnectionMessage(true);

                    AError = Exc.Message;
                    return(eLoginEnum.eLoginFailedForUnspecifiedError);
                }

                TLogging.Log(Exc.ToString() + Environment.NewLine + Exc.StackTrace, TLoggingType.ToLogfile);
                AError = Exc.Message;
                return(eLoginEnum.eLoginFailedForUnspecifiedError);
            }
        }