256 lines
6.5 KiB
C#
256 lines
6.5 KiB
C#
using System;
|
|
using System.Collections;
|
|
using System.Threading;
|
|
|
|
namespace System.Runtime.Remoting.Lifetime
|
|
{
|
|
// Token: 0x020003D1 RID: 977
|
|
internal class Lease : MarshalByRefObject, ILease
|
|
{
|
|
// Token: 0x06002669 RID: 9833 RVA: 0x0007E7C8 File Offset: 0x0007C9C8
|
|
public Lease()
|
|
{
|
|
this._currentState = LeaseState.Initial;
|
|
this._initialLeaseTime = LifetimeServices.LeaseTime;
|
|
this._renewOnCallTime = LifetimeServices.RenewOnCallTime;
|
|
this._sponsorshipTimeout = LifetimeServices.SponsorshipTimeout;
|
|
this._leaseExpireTime = DateTime.Now + this._initialLeaseTime;
|
|
}
|
|
|
|
// Token: 0x17000730 RID: 1840
|
|
// (get) Token: 0x0600266A RID: 9834 RVA: 0x0007E81C File Offset: 0x0007CA1C
|
|
public TimeSpan CurrentLeaseTime
|
|
{
|
|
get
|
|
{
|
|
return this._leaseExpireTime - DateTime.Now;
|
|
}
|
|
}
|
|
|
|
// Token: 0x17000731 RID: 1841
|
|
// (get) Token: 0x0600266B RID: 9835 RVA: 0x0007E830 File Offset: 0x0007CA30
|
|
public LeaseState CurrentState
|
|
{
|
|
get
|
|
{
|
|
return this._currentState;
|
|
}
|
|
}
|
|
|
|
// Token: 0x0600266C RID: 9836 RVA: 0x0007E838 File Offset: 0x0007CA38
|
|
public void Activate()
|
|
{
|
|
this._currentState = LeaseState.Active;
|
|
}
|
|
|
|
// Token: 0x17000732 RID: 1842
|
|
// (get) Token: 0x0600266D RID: 9837 RVA: 0x0007E844 File Offset: 0x0007CA44
|
|
// (set) Token: 0x0600266E RID: 9838 RVA: 0x0007E84C File Offset: 0x0007CA4C
|
|
public TimeSpan InitialLeaseTime
|
|
{
|
|
get
|
|
{
|
|
return this._initialLeaseTime;
|
|
}
|
|
set
|
|
{
|
|
if (this._currentState != LeaseState.Initial)
|
|
{
|
|
throw new RemotingException("InitialLeaseTime property can only be set when the lease is in initial state; state is " + this._currentState + ".");
|
|
}
|
|
this._initialLeaseTime = value;
|
|
this._leaseExpireTime = DateTime.Now + this._initialLeaseTime;
|
|
if (value == TimeSpan.Zero)
|
|
{
|
|
this._currentState = LeaseState.Null;
|
|
}
|
|
}
|
|
}
|
|
|
|
// Token: 0x17000733 RID: 1843
|
|
// (get) Token: 0x0600266F RID: 9839 RVA: 0x0007E8BC File Offset: 0x0007CABC
|
|
// (set) Token: 0x06002670 RID: 9840 RVA: 0x0007E8C4 File Offset: 0x0007CAC4
|
|
public TimeSpan RenewOnCallTime
|
|
{
|
|
get
|
|
{
|
|
return this._renewOnCallTime;
|
|
}
|
|
set
|
|
{
|
|
if (this._currentState != LeaseState.Initial)
|
|
{
|
|
throw new RemotingException("RenewOnCallTime property can only be set when the lease is in initial state; state is " + this._currentState + ".");
|
|
}
|
|
this._renewOnCallTime = value;
|
|
}
|
|
}
|
|
|
|
// Token: 0x17000734 RID: 1844
|
|
// (get) Token: 0x06002671 RID: 9841 RVA: 0x0007E8FC File Offset: 0x0007CAFC
|
|
// (set) Token: 0x06002672 RID: 9842 RVA: 0x0007E904 File Offset: 0x0007CB04
|
|
public TimeSpan SponsorshipTimeout
|
|
{
|
|
get
|
|
{
|
|
return this._sponsorshipTimeout;
|
|
}
|
|
set
|
|
{
|
|
if (this._currentState != LeaseState.Initial)
|
|
{
|
|
throw new RemotingException("SponsorshipTimeout property can only be set when the lease is in initial state; state is " + this._currentState + ".");
|
|
}
|
|
this._sponsorshipTimeout = value;
|
|
}
|
|
}
|
|
|
|
// Token: 0x06002673 RID: 9843 RVA: 0x0007E93C File Offset: 0x0007CB3C
|
|
public void Register(ISponsor obj)
|
|
{
|
|
this.Register(obj, TimeSpan.Zero);
|
|
}
|
|
|
|
// Token: 0x06002674 RID: 9844 RVA: 0x0007E94C File Offset: 0x0007CB4C
|
|
public void Register(ISponsor obj, TimeSpan renewalTime)
|
|
{
|
|
lock (this)
|
|
{
|
|
if (this._sponsors == null)
|
|
{
|
|
this._sponsors = new ArrayList();
|
|
}
|
|
this._sponsors.Add(obj);
|
|
}
|
|
if (renewalTime != TimeSpan.Zero)
|
|
{
|
|
this.Renew(renewalTime);
|
|
}
|
|
}
|
|
|
|
// Token: 0x06002675 RID: 9845 RVA: 0x0007E9C4 File Offset: 0x0007CBC4
|
|
public TimeSpan Renew(TimeSpan renewalTime)
|
|
{
|
|
DateTime dateTime = DateTime.Now + renewalTime;
|
|
if (dateTime > this._leaseExpireTime)
|
|
{
|
|
this._leaseExpireTime = dateTime;
|
|
}
|
|
return this.CurrentLeaseTime;
|
|
}
|
|
|
|
// Token: 0x06002676 RID: 9846 RVA: 0x0007E9FC File Offset: 0x0007CBFC
|
|
public void Unregister(ISponsor obj)
|
|
{
|
|
lock (this)
|
|
{
|
|
if (this._sponsors != null)
|
|
{
|
|
for (int i = 0; i < this._sponsors.Count; i++)
|
|
{
|
|
if (object.ReferenceEquals(this._sponsors[i], obj))
|
|
{
|
|
this._sponsors.RemoveAt(i);
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
// Token: 0x06002677 RID: 9847 RVA: 0x0007EA90 File Offset: 0x0007CC90
|
|
internal void UpdateState()
|
|
{
|
|
if (this._currentState != LeaseState.Active)
|
|
{
|
|
return;
|
|
}
|
|
if (this.CurrentLeaseTime > TimeSpan.Zero)
|
|
{
|
|
return;
|
|
}
|
|
if (this._sponsors != null)
|
|
{
|
|
this._currentState = LeaseState.Renewing;
|
|
lock (this)
|
|
{
|
|
this._renewingSponsors = new Queue(this._sponsors);
|
|
}
|
|
this.CheckNextSponsor();
|
|
}
|
|
else
|
|
{
|
|
this._currentState = LeaseState.Expired;
|
|
}
|
|
}
|
|
|
|
// Token: 0x06002678 RID: 9848 RVA: 0x0007EB28 File Offset: 0x0007CD28
|
|
private void CheckNextSponsor()
|
|
{
|
|
if (this._renewingSponsors.Count == 0)
|
|
{
|
|
this._currentState = LeaseState.Expired;
|
|
this._renewingSponsors = null;
|
|
return;
|
|
}
|
|
ISponsor sponsor = (ISponsor)this._renewingSponsors.Peek();
|
|
this._renewalDelegate = new Lease.RenewalDelegate(sponsor.Renewal);
|
|
IAsyncResult asyncResult = this._renewalDelegate.BeginInvoke(this, null, null);
|
|
ThreadPool.RegisterWaitForSingleObject(asyncResult.AsyncWaitHandle, new WaitOrTimerCallback(this.ProcessSponsorResponse), asyncResult, this._sponsorshipTimeout, true);
|
|
}
|
|
|
|
// Token: 0x06002679 RID: 9849 RVA: 0x0007EBA8 File Offset: 0x0007CDA8
|
|
private void ProcessSponsorResponse(object state, bool timedOut)
|
|
{
|
|
if (!timedOut)
|
|
{
|
|
try
|
|
{
|
|
IAsyncResult asyncResult = (IAsyncResult)state;
|
|
TimeSpan timeSpan = this._renewalDelegate.EndInvoke(asyncResult);
|
|
if (timeSpan != TimeSpan.Zero)
|
|
{
|
|
this.Renew(timeSpan);
|
|
this._currentState = LeaseState.Active;
|
|
this._renewingSponsors = null;
|
|
return;
|
|
}
|
|
}
|
|
catch
|
|
{
|
|
}
|
|
}
|
|
this.Unregister((ISponsor)this._renewingSponsors.Dequeue());
|
|
this.CheckNextSponsor();
|
|
}
|
|
|
|
// Token: 0x04000EF5 RID: 3829
|
|
private DateTime _leaseExpireTime;
|
|
|
|
// Token: 0x04000EF6 RID: 3830
|
|
private LeaseState _currentState;
|
|
|
|
// Token: 0x04000EF7 RID: 3831
|
|
private TimeSpan _initialLeaseTime;
|
|
|
|
// Token: 0x04000EF8 RID: 3832
|
|
private TimeSpan _renewOnCallTime;
|
|
|
|
// Token: 0x04000EF9 RID: 3833
|
|
private TimeSpan _sponsorshipTimeout;
|
|
|
|
// Token: 0x04000EFA RID: 3834
|
|
private ArrayList _sponsors;
|
|
|
|
// Token: 0x04000EFB RID: 3835
|
|
private Queue _renewingSponsors;
|
|
|
|
// Token: 0x04000EFC RID: 3836
|
|
private Lease.RenewalDelegate _renewalDelegate;
|
|
|
|
// Token: 0x020006CF RID: 1743
|
|
// (Invoke) Token: 0x060041C4 RID: 16836
|
|
private delegate TimeSpan RenewalDelegate(ILease lease);
|
|
}
|
|
}
|