//
// Licensed under the MIT License. See LICENSE file in the project root for full license information.
//
namespace MUnique.OpenMU.GameLogic;
using Nito.AsyncEx;
///
/// Interface for an observable object.
///
public interface IObservable
{
///
/// Gets the observers.
///
ISet Observers { get; }
///
/// Gets the lock for .
///
AsyncReaderWriterLock ObserverLock { get; }
///
/// Adds the observer.
///
/// The observer.
ValueTask AddObserverAsync(IWorldObserver observer);
///
/// Removes the observer.
///
/// The observer.
ValueTask RemoveObserverAsync(IWorldObserver observer);
}