//public override async Task<Tuple<bool, ContactForm>> RegisterNewContactAsync(string login, IPEndPoint endPoint, // IEnumerable<ContactForm> formsPublic, // ResultOfOperation resultOfOperation) //{ // try // { // var forms = formsPublic as ContactForm[] ?? formsPublic.ToArray(); // Tuple<bool, ContactForm> authResult = AuthenticateContacnt(login, endPoint, forms, resultOfOperation); // if (authResult.Item1) // { // var form = forms.First(userForm => userForm.Login.Equals(login)); // var args = new RegisterNewContactEventArgs {Ip = endPoint.Address, Login = login}; // await OnRegisterNewContact(args).ConfigureAwait(false); // if (args.IsAllow) // ContactsF.Add(form); // resultOfOperation.OperationWasFinishedSuccessful = true; // } // return authResult; // } // catch (InvalidOperationException ex) // { // resultOfOperation.OperationWasFinishedSuccessful = false; // resultOfOperation.ErrorMessage = "Пользователь не зарегистрирован на внешнем сервере."; // return new Tuple<bool, ContactForm>(false, null); // } //} public override async Task <bool> RegisterNewContactAsync(ContactForm form, IPEndPoint endPoint, ResultOfOperation resultOfOperation) { try { var args = new RegisterNewContactEventArgs { Ip = endPoint.Address, Login = form.Login }; await OnRegisterNewContact(args).ConfigureAwait(false); if (args.IsAllow) { ContactsF.Add(form); resultOfOperation.OperationWasFinishedSuccessful = true; } else { resultOfOperation.OperationWasFinishedSuccessful = false; resultOfOperation.ErrorMessage = "Пользователь отверг запрос на авторизацию."; } return(resultOfOperation.OperationWasFinishedSuccessful); } catch (Exception ex) { throw; } }
protected override Task OnRegisterNewContact(RegisterNewContactEventArgs args) { Func <object, RegisterNewContactEventArgs, Task> handlerEvent = RegisterNewContactEvent; if (handlerEvent == null) { return(Task.FromResult(false)); } try { Delegate[] invocationList = handlerEvent.GetInvocationList(); var handlerTasks = new Task[invocationList.Length]; for (int i = 0; i < invocationList.Length; i++) { handlerTasks[i] = ((Func <object, RegisterNewContactEventArgs, Task>)invocationList[i])(this, args); } return(Task.WhenAll(handlerTasks)); } catch (Exception ex) { args.TryAllowContinueRegistration(false); return(Task.CompletedTask); } }
protected abstract Task OnRegisterNewContact(RegisterNewContactEventArgs args);