All checks were successful
Pack and Push NuGet Package / publish (push) Successful in 43s
52 lines
1.3 KiB
C#
52 lines
1.3 KiB
C#
using MessengerApi.Model.Messages;
|
|
|
|
namespace MessengerApi.Model
|
|
{
|
|
/// <summary>
|
|
/// See <see cref="SubscriptionClient"/> if you need to subscribe. It will give you one of these upon subscribing.
|
|
/// Also see <see cref="OnMessage"/> for what happens where you actually receive message for this sub.
|
|
/// </summary>
|
|
public class Subscription : IDisposable
|
|
{
|
|
public string MessageTypeMask { get; private set; }
|
|
|
|
public event EventHandler<InboxMessage> 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);
|
|
}
|
|
}
|
|
}
|
|
} |