SubscriptionClient carried over.
All checks were successful
Pack and Push NuGet Package / publish (push) Successful in 43s
All checks were successful
Pack and Push NuGet Package / publish (push) Successful in 43s
This commit is contained in:
52
code/MessengerApi.SubscriptionClient/Model/Subscription.cs
Normal file
52
code/MessengerApi.SubscriptionClient/Model/Subscription.cs
Normal file
@ -0,0 +1,52 @@
|
||||
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);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user