Example #1
0
        private async Task <bool> CheckServiceAvailability()
        {
            string error  = string.Empty;
            bool   result = false;

            Action <bool> onFinally = (ok) =>
            {
                if (ok)
                {
                    result = true;
                    ServiceAvailability     = true;
                    IsReportSettingsEnabled = true;
                }
                else
                {
                    _window.ShowDialogError(error);
                    result = false;
                    ServiceAvailability = false;
                }
            };

            try
            {
                bool serverAvailability = ServiceHelper.IsServerOnline();
                if (serverAvailability)
                {
                    ServerAvailability = true;

                    // проверка наличия доступа
                    bool hasRights = await ServiceHelper.LoginAsync(true);

                    string answer = ServiceHelper.ErrorMessage;
                    // если доступ не получен и не авторизованы
                    if (hasRights == false)
                    {
                        if (String.IsNullOrEmpty(answer))
                        {
                            error = Strings.IncorrectService;
                            onFinally(false);
                        }
                        hasRights = await ServiceHelper.LoginAsync();

                        // авторизация не успешна
                        if (hasRights == false)
                        {
                            error = Strings.AuthorizationFailed;
                            onFinally(false);
                        }
                        else
                        {
                            onFinally(true);
                        }
                    }
                    else
                    {
                        if (answer == "result=0&user=")
                        {
                            hasRights = await ServiceHelper.LoginAsync();

                            if (hasRights)
                            {
                                onFinally(true);
                            }
                            else
                            {
                                onFinally(false);
                            }
                        }
                        else
                        {
                            onFinally(true);
                        }
                    }
                }
                else
                {
                    ServerAvailability = false;
                    onFinally(false);
                }
            }
            catch (Exception ex)
            {
                string message = String.Format(Strings.Error, ex.Message);
                error = message;
                onFinally(false);
                return(false);
            }
            return(result);
        }
Example #2
0
        public static async Task <string> ExecuteFunctionAsync(Func <string, string, bool, Task <string> > function, string param1, string param2, bool param3, Func <string, string> postAction = null)
        {
            App.Log("ExecuteFunctionAsync");
            string answer;

            if (Cookie == null)
            {
                App.Log("нет куков - логин");
                bool hasRights = await ServiceHelper.LoginAsync();

                answer = ServiceHelper.ErrorMessage;
                // если доступ не получен и не авторизованы
                if (hasRights == false)
                {
                    App.Log("ещё раз");
                    hasRights = await ServiceHelper.LoginAsync();

                    // авторизация не успешна
                    if (hasRights == false)
                    {
                        return(string.Empty);
                    }
                }
            }

            answer = await function(param1, param2, param3);

            // нет результата - что-то не так с сервером - возврат пустого значения
            if (String.IsNullOrEmpty(answer))
            {
                return(string.Empty);
            }
            // Пользователь незарегистрирован. Необходима повторная регистрация?
            // &result=1&errDescription=Пользователь незарегистрирован. Необходима повторная регистрация.&errType=2
            if (answer.Contains("result=1") && answer.Contains("errType=2") && _attemptCount < 4)
            {
                App.Log("ответ содержит result=1 и errType=2");
                _attemptCount++;
                LoginAsync().RunSynchronously();
                answer = await ExecuteFunctionAsync(function, param1, param2, param3, postAction);

                if (postAction != null)
                {
                    answer = postAction(answer);
                }
                return(answer);
            }
            // есть результат, но неверный ответ
            if (answer == "result=0&user="******"попытка авторизации");
                _attemptCount++;
                LoginAsync().RunSynchronously();
                answer = await ExecuteFunctionAsync(function, param1, param2, param3, postAction);

                if (postAction != null)
                {
                    answer = postAction(answer);
                }
                return(answer);
            }
            // итак, ответ есть, проверка результата
            if (answer.Contains("result=0"))
            {
                ErrorMessage = string.Empty;
                if (postAction != null)
                {
                    answer = postAction(answer);
                }
                App.Log("есть ответ, длина - " + answer.Length);
                return(answer);
            }
            else
            {
                App.Log("непонятный ответ");
                return(string.Empty);
            }
        }