public virtual ResolveResponseInfo Resolve(ResolveInfo resolveInfo)
{
if (resolveInfo == null)
{
throw DiagnosticUtility.ExceptionUtility.ThrowHelperArgument("resolveInfo", System.ServiceModel.SR.GetString("PeerNullResolveInfo"));
}
this.ThrowIfClosed("Resolve");
if (!resolveInfo.HasBody())
{
throw DiagnosticUtility.ExceptionUtility.ThrowHelperArgument("resolveInfo", System.ServiceModel.SR.GetString("PeerInvalidMessageBody", new object[] { resolveInfo }));
}
int num = 0;
int num2 = 0;
int maxAddresses = resolveInfo.MaxAddresses;
ResolveResponseInfo info = new ResolveResponseInfo();
List <PeerNodeAddress> list = new List <PeerNodeAddress>();
List <RegistrationEntry> entryList = null;
MeshEntry meshEntry = this.GetMeshEntry(resolveInfo.MeshId, false);
if (meshEntry != null)
{
LiteLock liteLock = null;
try
{
LiteLock.Acquire(out liteLock, meshEntry.Gate);
entryList = meshEntry.EntryList;
if (entryList.Count <= maxAddresses)
{
foreach (RegistrationEntry entry3 in entryList)
{
list.Add(entry3.Address);
}
}
else
{
Random random = new Random();
while (num < maxAddresses)
{
num2 = random.Next(entryList.Count);
RegistrationEntry entry = entryList[num2];
PeerNodeAddress item = entry.Address;
if (!list.Contains(item))
{
list.Add(item);
}
num++;
}
}
}
finally
{
LiteLock.Release(liteLock);
}
}
info.Addresses = list.ToArray();
return(info);
}