Files
Dec2017-Script-Dump/mscorlib/System/Runtime/Remoting/Lifetime/LeaseManager.cs
T
2026-06-04 11:42:34 +02:00

97 lines
2.2 KiB
C#

using System;
using System.Collections;
using System.Threading;
namespace System.Runtime.Remoting.Lifetime
{
// Token: 0x020003D2 RID: 978
internal class LeaseManager
{
// Token: 0x0600267B RID: 9851 RVA: 0x0007EC54 File Offset: 0x0007CE54
public void SetPollTime(TimeSpan timeSpan)
{
object syncRoot = this._objects.SyncRoot;
lock (syncRoot)
{
if (this._timer != null)
{
this._timer.Change(timeSpan, timeSpan);
}
}
}
// Token: 0x0600267C RID: 9852 RVA: 0x0007ECB4 File Offset: 0x0007CEB4
public void TrackLifetime(ServerIdentity identity)
{
object syncRoot = this._objects.SyncRoot;
lock (syncRoot)
{
identity.Lease.Activate();
this._objects.Add(identity);
if (this._timer == null)
{
this.StartManager();
}
}
}
// Token: 0x0600267D RID: 9853 RVA: 0x0007ED24 File Offset: 0x0007CF24
public void StopTrackingLifetime(ServerIdentity identity)
{
object syncRoot = this._objects.SyncRoot;
lock (syncRoot)
{
this._objects.Remove(identity);
}
}
// Token: 0x0600267E RID: 9854 RVA: 0x0007ED78 File Offset: 0x0007CF78
public void StartManager()
{
this._timer = new Timer(new TimerCallback(this.ManageLeases), null, LifetimeServices.LeaseManagerPollTime, LifetimeServices.LeaseManagerPollTime);
}
// Token: 0x0600267F RID: 9855 RVA: 0x0007EDA8 File Offset: 0x0007CFA8
public void StopManager()
{
Timer timer = this._timer;
this._timer = null;
timer.Dispose();
}
// Token: 0x06002680 RID: 9856 RVA: 0x0007EDCC File Offset: 0x0007CFCC
public void ManageLeases(object state)
{
object syncRoot = this._objects.SyncRoot;
lock (syncRoot)
{
int i = 0;
while (i < this._objects.Count)
{
ServerIdentity serverIdentity = (ServerIdentity)this._objects[i];
serverIdentity.Lease.UpdateState();
if (serverIdentity.Lease.CurrentState == LeaseState.Expired)
{
this._objects.RemoveAt(i);
serverIdentity.OnLifetimeExpired();
}
else
{
i++;
}
}
if (this._objects.Count == 0)
{
this.StopManager();
}
}
}
// Token: 0x04000EFD RID: 3837
private ArrayList _objects = new ArrayList();
// Token: 0x04000EFE RID: 3838
private Timer _timer;
}
}