2 // System.Runtime.Remoting.Identity.cs
4 // Author: Lluis Sanchez Gual (lluis@ideary.com)
6 // (C) 2003, Lluis Sanchez Gual
10 using System.Threading;
11 using System.Collections;
12 using System.Runtime.Remoting;
14 namespace System.Runtime.Remoting.Lifetime
16 internal class LeaseManager
18 ArrayList _objects = new ArrayList();
21 public void SetPollTime (TimeSpan timeSpan)
23 lock (_objects.SyncRoot)
26 _timer.Change (timeSpan,timeSpan);
30 public void TrackLifetime (ServerIdentity identity)
32 lock (_objects.SyncRoot)
34 identity.Lease.Activate();
35 _objects.Add (identity);
37 if (_timer == null) StartManager();
41 public void StopTrackingLifetime (ServerIdentity identity)
43 lock (_objects.SyncRoot)
45 _objects.Remove (identity);
49 public void StartManager()
51 _timer = new Timer (new TimerCallback (ManageLeases), null, LifetimeServices.LeaseManagerPollTime,LifetimeServices.LeaseManagerPollTime);
54 public void StopManager()
60 public void ManageLeases(object state)
62 lock (_objects.SyncRoot)
65 while (n < _objects.Count)
67 ServerIdentity ident = (ServerIdentity)_objects[n];
68 ident.Lease.UpdateState();
69 if (ident.Lease.CurrentState == LeaseState.Expired)
71 _objects.RemoveAt (n);
72 ident.OnLifetimeExpired ();
78 if (_objects.Count == 0)