TeamsNetphoneLink/TeamsNetphoneLinkWPF/Communication/TeamsGraphEventHandlers.cs
2025-03-25 22:43:13 +01:00

98 lines
2.8 KiB
C#

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<EventHandler<PresenceChangedEventArgs>> _activityChangedHandlers = new List<EventHandler<PresenceChangedEventArgs>>();
private readonly List<EventHandler<PresenceChangedEventArgs>> _availabilityChangedHandlers = new List<EventHandler<PresenceChangedEventArgs>>();
public event EventHandler<PresenceChangedEventArgs> ActivityChanged
{
add
{
lock (_lock)
{
_activityChangedHandlers.Add(value);
}
}
remove
{
lock (_lock)
{
_activityChangedHandlers.Remove(value);
}
}
}
public event EventHandler<PresenceChangedEventArgs> 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;
}
}
}