private void _processLogin(EBioLogin bioLoginExcp, Action<EBioException> callback) { if(bioLoginExcp is EBioLoggedOut) { this.CurUsr = null; if (callback != null) callback(bioLoginExcp); } else { // Запрашиваем ввод логина this._getLogin(newLogin => { if (newLogin == null) { // Если пользователь не ввел логин, тогда отбой if (callback != null) callback(new EBioCancel()); } else { // Пользователь ввел логин var curUsrName = Utl.ExtractUsrNameFromLogin(newLogin); var curUsrPwd = Utl.ExtractUsrPwdFromLogin(newLogin); // Запускаем процедуру проверки логина _postLogin(newLogin, r => { EBioException excp = DecBioLoginExcp(r.Ex); if (excp != null) { var bioOk = excp as EBioOk; if (bioOk != null) { this.AssignCurUser(bioOk.Usr); BioEnvironment.Instance.ConfigRoot.LastLoggedInUserName = curUsrName; BioEnvironment.Instance.LastSuccessPwd = curUsrPwd; if (BioEnvironment.Instance.ConfigRoot.SavePassword) BioEnvironment.Instance.ConfigRoot.LastLoggedInUserPwd = curUsrPwd; else BioEnvironment.Instance.ConfigRoot.LastLoggedInUserPwd = String.Empty; BioEnvironment.Instance.PluginRoot.Cfg.Store(); if (callback != null) callback(bioOk); } else if (excp is EBioAutenticationError) { String errMsg = null; if (excp is EBioBadUser) errMsg = "Не верное имя пользователя [" + curUsrName + "] или пароль."; else if (excp is EBioUncnfrmdUser) errMsg = "Пользователь [" + curUsrName + "] не активирован."; else if (excp is EBioBlockedUser) errMsg = "Пользователь [" + curUsrName + "] заблокирован."; else if (excp is EBioBadPwd) errMsg = "Не верный пароль."; _showLoginError(errMsg, () => { this._processLogin(bioLoginExcp, callback); }); } else { excp = new EBioException("Непредвиденная ошибка: " + r.Ex.Message); if (callback != null) callback(excp); } } else { excp = EBioException.CreateIfNotEBio(r.Ex); if (callback != null) callback(excp); } }); } }); } }
public void ProcessLogin(EBioLogin bioLoginExcp, BioRequest request, Action<EBioException, BioRequest> callback) { if (bioLoginExcp != null) { this._processLogin(bioLoginExcp, e => { if (callback != null) callback(e, request); }); } }