using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace TeamsNetphoneLink.Communication { public class TeamsGraphEventHandlers { private readonly object _lock = new object(); private readonly List> _activityChangedHandlers = new List>(); private readonly List> _availabilityChangedHandlers = new List>(); public event EventHandler ActivityChanged { add { lock (_lock) { _activityChangedHandlers.Add(value); } } remove { lock (_lock) { _activityChangedHandlers.Remove(value); } } } public event EventHandler AvailabilityChanged { add { lock (_lock) { _availabilityChangedHandlers.Add(value); } } remove { lock (_lock) { _availabilityChangedHandlers.Remove(value); } } } protected void OnActivityChanged(Microsoft.Graph.Models.Presence presence) { lock (_lock) { var args = new PresenceChangedEventArgs(presence); foreach (var handler in _activityChangedHandlers) { handler?.Invoke(this, args); } } } protected void OnAvailabilityChanged(Microsoft.Graph.Models.Presence presence) { lock (_lock) { var args = new PresenceChangedEventArgs(presence); foreach (var handler in _availabilityChangedHandlers) { handler?.Invoke(this, args); } } } public void RemoveAllEventHandlers() { foreach (var handler in _activityChangedHandlers) { _availabilityChangedHandlers.Remove(handler); } foreach (var handler in _availabilityChangedHandlers) { _availabilityChangedHandlers.Remove(handler); } } } public class PresenceChangedEventArgs : EventArgs { public Microsoft.Graph.Models.Presence Presence { get; } public PresenceChangedEventArgs(Microsoft.Graph.Models.Presence presence) { Presence = presence; } } }