using MessengerApi.Model.Messages; namespace MessengerApi.Model { /// /// See if you need to subscribe. It will give you one of these upon subscribing. /// Also see for what happens where you actually receive message for this sub. /// public class Subscription : IDisposable { public string MessageTypeMask { get; private set; } public event EventHandler OnMessage; internal SubscriptionClient client; private bool isDisposed; internal Subscription(string messageTypeMask, SubscriptionClient client) { MessageTypeMask = messageTypeMask; this.client = client; } internal void Message(InboxMessage message) { OnMessage?.Invoke(this, message); } public void Dispose() { if (isDisposed) { return; } AssertNotDisposedOrThrow(); client.Unsubscribe(this); Dispose(); isDisposed = true; } private void AssertNotDisposedOrThrow() { if (isDisposed) { throw new ObjectDisposedException(MessageTypeMask); } } } }