ClientSponsor.cs source code in C# .NET

Source code for the .NET framework in C#

                        

Code:

/ FXUpdate3074 / FXUpdate3074 / 1.1 / untmp / whidbey / QFE / ndp / clr / src / BCL / System / Runtime / Remoting / ClientSponsor.cs / 1 / ClientSponsor.cs

                            // ==++== 
//
//   Copyright (c) Microsoft Corporation.  All rights reserved.
//
// ==--== 
//+----------------------------------------------------------------------------
// 
// File:        ClientSponsor.cs 
//
// Contents:    Agent for keeping Server Object's lifetime in sync with a client's lifetime 
//
// History:     8/9/00   [....]        Created
//
//+--------------------------------------------------------------------------- 

namespace System.Runtime.Remoting.Lifetime 
{ 
    using System;
    using System.Collections; 
    using System.Security.Permissions;

    [SecurityPermissionAttribute(SecurityAction.LinkDemand, Flags=SecurityPermissionFlag.Infrastructure)]
    [SecurityPermissionAttribute(SecurityAction.InheritanceDemand, Flags=SecurityPermissionFlag.Infrastructure)] 
[System.Runtime.InteropServices.ComVisible(true)]
    public class ClientSponsor : MarshalByRefObject, ISponsor 
    { 
       private Hashtable sponsorTable = new Hashtable(10);
      private TimeSpan m_renewalTime = TimeSpan.FromMinutes(2); 

      public ClientSponsor()
      {
       } 

      public ClientSponsor(TimeSpan renewalTime) 
       { 
          this.m_renewalTime = renewalTime;
      } 

       public TimeSpan RenewalTime
      {
         get{ return m_renewalTime;} 
         set{ m_renewalTime = value;}
       } 
 
       public bool Register(MarshalByRefObject obj)
       { 
         BCLDebug.Trace("REMOTE", "ClientSponsor Register "+obj);
          ILease lease = (ILease)obj.GetLifetimeService();
         if (lease == null)
            return false; 

         lease.Register(this); 
          lock(sponsorTable) 
         {
             sponsorTable[obj] = lease; 
          }
         return true;
       }
 
      public void Unregister(MarshalByRefObject obj)
      { 
         BCLDebug.Trace("REMOTE", "ClientSponsor Unregister "+obj); 

          ILease lease = null; 
         lock(sponsorTable)
          {
             lease = (ILease)sponsorTable[obj];
         } 
          if (lease != null)
            lease.Unregister(this); 
      } 

      // ISponsor method 
       public TimeSpan Renewal(ILease lease)
      {
          BCLDebug.Trace("REMOTE", "ClientSponsor Renewal "+m_renewalTime);
          return m_renewalTime; 
      }
 
       public void Close() 
      {
         BCLDebug.Trace("REMOTE","ClientSponsor Close"); 
         lock(sponsorTable)
          {
            IDictionaryEnumerator e = sponsorTable.GetEnumerator();
             while(e.MoveNext()) 
                ((ILease)e.Value).Unregister(this);
            sponsorTable.Clear(); 
          } 
      }
 
      // Don't create a lease on the sponsor
      public override Object InitializeLifetimeService()
       {
         return null; 
       }
 
        ~ClientSponsor() 
       {
         BCLDebug.Trace("REMOTE","ClientSponsor Finalize"); 
       }
    }
}

// File provided for Reference Use Only by Microsoft Corporation (c) 2007.
// Copyright (c) Microsoft Corporation. All rights reserved.
                        

Link Menu

Network programming in C#, Network Programming in VB.NET, Network Programming in .NET
This book is available now!
Buy at Amazon US or
Buy at Amazon UK