using System;
using System.Collections.Generic;
using System.IdentityModel.Tokens;
using System.Threading;
namespace MyCompany.MyProject.ServiceModel.Description
{
///
/// Helper class used as cache for security tokens
///
internal static class TokenCacheHelper
{
private const int DefaultTimeout = 1000;
private static readonly Dictionary tokens = new Dictionary();
private static readonly ReaderWriterLock tokenLock = new ReaderWriterLock();
public static SecurityToken GetToken(Uri key)
{
tokenLock.AcquireReaderLock(DefaultTimeout);
try
{
SecurityToken token;
tokens.TryGetValue(key, out token);
return token;
}
finally
{
tokenLock.ReleaseReaderLock();
}
}
public static void AddToken(Uri key, SecurityToken token)
{
tokenLock.AcquireWriterLock(DefaultTimeout);
try
{
if (tokens.ContainsKey(key))
tokens.Remove(key);
tokens.Add(key, token);
}
finally
{
tokenLock.ReleaseWriterLock();
}
}
}
}