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); }
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); } }