public static async Task <PSALoginResponse> LoginToPSA(Context context, string username, string password, string hubAddress)
        {
            Communication.ActiveHostServer = hubAddress;

            var credentials = new PSAUserCredentials()
            {
                Username = username,
                Password = password
            };

            var request = new PSALoginRequest(credentials);

            DebugLog.LazyWrite(context, "Getting response async...");
            string response = await PSACommunication.GetResponseAsync(hubAddress, PSALoginRequest.DefaultServiceName, request.ToParameterString());

            DebugLog.LazyWrite(context, "Got response async -> " + response);
            var loginResponse = PSALoginResponse.ParseXMLString(response);

            DebugLog.LazyWrite(context, "Parsed response async!");

            if (loginResponse.Status == Com.TTS.Util.GUI.WSStatusTypes.OK)
            {
                Communication.LastSessionRenewal    = DateTime.Now;
                Communication.ActiveSessionUsername = username;
                Communication.ActiveSessionCode     = loginResponse.SessionInfo.SessionCode;
                Communication.UserCoverage          = loginResponse.Coverage;
            }

            return(loginResponse);
        }
        public static async Task RenewPSASession()
        {
            if (Communication.NeedsToRenewSession(PSACredentials))
            {
                var request = new PSALoginRequest(PSACredentials);

                string response = await PSACommunication.GetResponseAsync(HubAddress, PSALoginRequest.DefaultServiceName, request.ToParameterString());

                var loginResponse = PSALoginResponse.ParseXMLString(response);

                if (loginResponse.Status != Com.TTS.Util.GUI.WSStatusTypes.OK)
                {
                    throw new UnauthorizedAccessException("Failed to reach PSA back-end. Returned message: " + loginResponse.Message + ")");
                }

                Communication.LastSessionRenewal    = DateTime.Now;
                Communication.ActiveSessionUsername = PSACredentials.Username;
                Communication.ActiveSessionCode     = loginResponse.SessionInfo.SessionCode;
                Communication.UserCoverage          = loginResponse.Coverage;
            }
        }