示例#1
0
 public Association GetAssociation(AssociationRelyingPartyType distinguishingFactor)
 {
     lock (m_syncRoot)
     {
         if (m_sortedStore.Count > 0)
         {
             AssociationItem item = m_sortedStore.Values[m_sortedStore.Count - 1];
             return(Association.Deserialize(item.Handle, item.Expires.ToUniversalTime(), item.PrivateData));
         }
         else
         {
             return(null);
         }
     }
 }
示例#2
0
        public void StoreAssociation(AssociationRelyingPartyType distinguishingFactor, Association assoc)
        {
            AssociationItem item = new AssociationItem();

            item.DistinguishingFactor = distinguishingFactor;
            item.Handle      = assoc.Handle;
            item.Expires     = assoc.Expires.ToLocalTime();
            item.PrivateData = assoc.SerializePrivateData();

            lock (m_syncRoot)
            {
                m_store[item.Handle]        = item;
                m_sortedStore[item.Expires] = item;
            }
        }
示例#3
0
        public bool RemoveAssociation(AssociationRelyingPartyType distinguishingFactor, string handle)
        {
            lock (m_syncRoot)
            {
                for (int i = 0; i < m_sortedStore.Values.Count; i++)
                {
                    AssociationItem item = m_sortedStore.Values[i];
                    if (item.Handle == handle)
                    {
                        m_sortedStore.RemoveAt(i);
                        break;
                    }
                }

                return(m_store.Remove(handle));
            }
        }
示例#4
0
        public void ClearExpiredAssociations()
        {
            lock (m_syncRoot)
            {
                List <AssociationItem> itemsCopy = new List <AssociationItem>(m_sortedStore.Values);
                DateTime now = DateTime.Now;

                for (int i = 0; i < itemsCopy.Count; i++)
                {
                    AssociationItem item = itemsCopy[i];

                    if (item.Expires <= now)
                    {
                        m_sortedStore.RemoveAt(i);
                        m_store.Remove(item.Handle);
                    }
                }
            }
        }