public IAsyncResult BeginOpenLink(AmqpLink link, TimeSpan timeout, AsyncCallback callback, object state)
{
if (link.IsReceiver && link.Settings.Target is Coordinator)
{
this.txnManager.AddCoordinator((ReceivingAmqpLink)link);
}
else
{
string address = link.IsReceiver ?
((Target)link.Settings.Target).Address.ToString() :
((Source)link.Settings.Source).Address.ToString();
TestQueue queue;
if (!this.queues.TryGetValue(address, out queue))
{
if (!this.implicitQueue)
{
throw new AmqpException(AmqpErrorCode.NotFound, string.Format("Node '{0}' not found", address));
}
queue = new TestQueue(this);
this.queues.Add(address, queue);
link.Closed += (s, e) => this.queues.Remove(address);
}
queue.CreateClient(link);
}
return new CompletedAsyncResult(callback, state);
}