2 // System.Runtime.Remoting.Identity.cs
4 // Author: Lluis Sanchez Gual (lluis@ideary.com)
6 // (C) 2003, Lluis Sanchez Gual
10 using System.Threading;
\r
11 using System.Collections;
\r
12 using System.Runtime.Remoting;
\r
14 namespace System.Runtime.Remoting.Lifetime
\r
16 internal class LeaseManager
\r
18 ArrayList _objects = new ArrayList();
\r
19 Timer _timer = null;
\r
21 public void SetPollTime (TimeSpan timeSpan)
\r
23 lock (_objects.SyncRoot)
\r
26 _timer.Change (timeSpan,timeSpan);
\r
30 public void TrackLifetime (ServerIdentity identity)
\r
32 lock (_objects.SyncRoot)
\r
34 identity.Lease.Activate();
\r
35 _objects.Add (identity);
\r
37 if (_timer == null) StartManager();
\r
41 public void StartManager()
\r
43 _timer = new Timer (new TimerCallback (ManageLeases), null, LifetimeServices.LeaseManagerPollTime,LifetimeServices.LeaseManagerPollTime);
\r
46 public void StopManager()
\r
52 public void ManageLeases(object state)
\r
54 lock (_objects.SyncRoot)
\r
57 while (n < _objects.Count)
\r
59 ServerIdentity ident = (ServerIdentity)_objects[n];
\r
60 ident.Lease.UpdateState();
\r
61 if (ident.Lease.CurrentState == LeaseState.Expired)
\r
63 _objects.RemoveAt (n);
\r
64 ident.OnLifetimeExpired ();
\r
70 if (_objects.Count == 0)
\r