using System;
using System.Collections;
using System.Runtime.InteropServices;
namespace System.Runtime.Remoting.Services
{
/// Provides a way to register, unregister, and obtain a list of tracking handlers.
// Token: 0x02000437 RID: 1079
[ComVisible(true)]
public class TrackingServices
{
/// Registers a new tracking handler with the .
/// The tracking handler to register.
///
/// is null.
/// The handler that is indicated in the parameter is already registered with .
///
///
///
// Token: 0x060029AF RID: 10671 RVA: 0x00085FA8 File Offset: 0x000841A8
public static void RegisterTrackingHandler(ITrackingHandler handler)
{
if (handler == null)
{
throw new ArgumentNullException("handler");
}
object syncRoot = TrackingServices._handlers.SyncRoot;
lock (syncRoot)
{
if (TrackingServices._handlers.IndexOf(handler) != -1)
{
throw new RemotingException("handler already registered");
}
TrackingServices._handlers.Add(handler);
}
}
/// Unregisters the specified tracking handler from .
/// The handler to unregister.
///
/// is null.
/// The handler that is indicated in the parameter is not registered with .
///
///
///
// Token: 0x060029B0 RID: 10672 RVA: 0x00086028 File Offset: 0x00084228
public static void UnregisterTrackingHandler(ITrackingHandler handler)
{
if (handler == null)
{
throw new ArgumentNullException("handler");
}
object syncRoot = TrackingServices._handlers.SyncRoot;
lock (syncRoot)
{
int num = TrackingServices._handlers.IndexOf(handler);
if (num == -1)
{
throw new RemotingException("handler is not registered");
}
TrackingServices._handlers.RemoveAt(num);
}
}
/// Gets an array of the tracking handlers that are currently registered with in the current .
/// An array of the tracking handlers that are currently registered with in the current .
///
///
///
// Token: 0x1700083F RID: 2111
// (get) Token: 0x060029B1 RID: 10673 RVA: 0x000860A8 File Offset: 0x000842A8
public static ITrackingHandler[] RegisteredHandlers
{
get
{
object syncRoot = TrackingServices._handlers.SyncRoot;
ITrackingHandler[] array;
lock (syncRoot)
{
if (TrackingServices._handlers.Count == 0)
{
array = new ITrackingHandler[0];
}
else
{
array = (ITrackingHandler[])TrackingServices._handlers.ToArray(typeof(ITrackingHandler));
}
}
return array;
}
}
// Token: 0x060029B2 RID: 10674 RVA: 0x0008612C File Offset: 0x0008432C
internal static void NotifyMarshaledObject(object obj, ObjRef or)
{
object syncRoot = TrackingServices._handlers.SyncRoot;
ITrackingHandler[] array;
lock (syncRoot)
{
if (TrackingServices._handlers.Count == 0)
{
return;
}
array = (ITrackingHandler[])TrackingServices._handlers.ToArray(typeof(ITrackingHandler));
}
for (int i = 0; i < array.Length; i++)
{
array[i].MarshaledObject(obj, or);
}
}
// Token: 0x060029B3 RID: 10675 RVA: 0x000861C0 File Offset: 0x000843C0
internal static void NotifyUnmarshaledObject(object obj, ObjRef or)
{
object syncRoot = TrackingServices._handlers.SyncRoot;
ITrackingHandler[] array;
lock (syncRoot)
{
if (TrackingServices._handlers.Count == 0)
{
return;
}
array = (ITrackingHandler[])TrackingServices._handlers.ToArray(typeof(ITrackingHandler));
}
for (int i = 0; i < array.Length; i++)
{
array[i].UnmarshaledObject(obj, or);
}
}
// Token: 0x060029B4 RID: 10676 RVA: 0x00086254 File Offset: 0x00084454
internal static void NotifyDisconnectedObject(object obj)
{
object syncRoot = TrackingServices._handlers.SyncRoot;
ITrackingHandler[] array;
lock (syncRoot)
{
if (TrackingServices._handlers.Count == 0)
{
return;
}
array = (ITrackingHandler[])TrackingServices._handlers.ToArray(typeof(ITrackingHandler));
}
for (int i = 0; i < array.Length; i++)
{
array[i].DisconnectedObject(obj);
}
}
// Token: 0x04001002 RID: 4098
private static ArrayList _handlers = new ArrayList();
}
}