/// <summary> /// Empieza a observar un espacio /// </summary> /// <param name="obj">Objeto a observar</param> public void ObserveObject (ISpaceable obj) { if (IsBeingObserved (obj)) throw new InvalidOperationException ("Object already being observed."); var state = new ObservationState (obj); observedObjects.Add (state); }
/// <summary> /// Devuelve el estado de observación de un objeto /// </summary> /// <remarks>Puede causar <see cref="InvalidOperationException"/> si no esta siendo observado tal objeto</remarks> /// <returns>El estado de observación del objeto</returns> public ObservationState GetState (ISpaceable obj) { // Recordar que nunca, los objetos observados, son nulos foreach (var x in observedObjects) if (object.Equals (x.ObservedObject, obj)) return x; throw new InvalidOperationException ( string.Format ( "Object {0} is not being observed.", obj)); }
/// <summary> /// Determina si un objeto está siendo observado /// </summary> public bool IsBeingObserved (ISpaceable obj) { return observedObjects.Exists (z => z.ObservedObject.Equals (obj)); }
/// <summary> /// Deja de observar un espacio /// </summary> public void UnobserveObject (ISpaceable obj) { observedObjects.RemoveAll (z => z.ObservedObject.Equals (obj)); }
internal ObservationState (ISpaceable observedObject) { if (observedObject == null) throw new ArgumentNullException ("observedObject"); ObservedObject = observedObject; }