/// <summary> /// Método que corresponde al patrón Chain of Responsibility. /// En caso de que el atributo Relacion correspondiente al Perfil que envía el mensaje /// esté fijado en el valor inicial de null, se pide una relación, /// y se agrega el ID a la lista de UsuariosPreguntados. /// /// En caso de que el Perfil correspondiente tenga el valor nulo de Relación, /// y esté en la lista de preguntados, se procesa el valor ingresado en el /// último mensaje para validarlo. /// De ser correcto, se modifica el campo Relacion de Perfil y se pasa al siguiente eslabón. /// De no ser correcto, se pide al usuario que ingrese un valor adecuado. /// /// /// Si al ingresar al método, el valor de Relacion no es el nulo, se asume que ya fue fijado por el usuario, /// por lo que se envía el mensaje hacia el siguiente eslabón. /// </summary> /// <param name="m">Mensaje que se transmite por patrón COR</param> public override async void Handle(Mensaje m) { Perfil perfil = BibliotecaPerfiles.GetUsuario(m.Id); if (perfil.Relacion == TipoAfinidad.Vacio) { if (!perfil.RegistroPreguntas.Relacion) { perfil.RegistroPreguntas.Relacion = true; await Preguntar(m.Id, m.Plataforma); } else { try { TipoAfinidad afinidad = BuscoAfinidad(m.Contenido); EditorPerfil.SetRelacion(m.Id, afinidad); Siguiente.Handle(m); } catch (ArgumentException) { await Respuesta.PedirAclaracion(m.Id, m.Plataforma); await Preguntar(m.Id, m.Plataforma); } catch (NullReferenceException) { await Respuesta.PedirAclaracion(m.Id, m.Plataforma); await Preguntar(m.Id, m.Plataforma); } } } else { Siguiente.Handle(m); } }
/// <summary> /// Fija el tipo de relación del Perfil /// </summary> /// <param name="idPerfil">Número identificador del Perfil</param> /// <param name="relacion">Valor nuevo de la relación</param> public static void SetRelacion(long idPerfil, TipoAfinidad relacion) { BibliotecaPerfiles.GetUsuario(idPerfil).Relacion = relacion; }