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);
}
}
}
}