public async Task RegisterLinkHandler()

in edge-hub/core/src/Microsoft.Azure.Devices.Edge.Hub.Amqp/ClientConnectionHandler.cs [66:118]


        public async Task RegisterLinkHandler(ILinkHandler linkHandler)
        {
            using (await this.registryUpdateLock.LockAsync())
            {
                if (this.registry.TryGetValue(linkHandler.Type, out ILinkHandler currentLinkHandler))
                {
                    await currentLinkHandler.CloseAsync(Constants.DefaultTimeout);
                }

                ILinkHandler nonCorrelatedLinkHandler = null;
                switch (linkHandler.Type)
                {
                    case LinkType.MethodReceiving:
                        if (this.registry.TryGetValue(LinkType.MethodSending, out ILinkHandler methodSendingLinkHandler)
                            && methodSendingLinkHandler.CorrelationId != linkHandler.CorrelationId)
                        {
                            nonCorrelatedLinkHandler = methodSendingLinkHandler;
                        }

                        break;

                    case LinkType.MethodSending:
                        if (this.registry.TryGetValue(LinkType.MethodReceiving, out ILinkHandler methodReceivingLinkHandler)
                            && methodReceivingLinkHandler.CorrelationId != linkHandler.CorrelationId)
                        {
                            nonCorrelatedLinkHandler = methodReceivingLinkHandler;
                        }

                        break;

                    case LinkType.TwinReceiving:
                        if (this.registry.TryGetValue(LinkType.TwinSending, out ILinkHandler twinSendingLinkHandler)
                            && twinSendingLinkHandler.CorrelationId != linkHandler.CorrelationId)
                        {
                            nonCorrelatedLinkHandler = twinSendingLinkHandler;
                        }

                        break;

                    case LinkType.TwinSending:
                        if (this.registry.TryGetValue(LinkType.TwinReceiving, out ILinkHandler twinReceivingLinkHandler)
                            && twinReceivingLinkHandler.CorrelationId != linkHandler.CorrelationId)
                        {
                            nonCorrelatedLinkHandler = twinReceivingLinkHandler;
                        }

                        break;
                }

                await (nonCorrelatedLinkHandler?.CloseAsync(Constants.DefaultTimeout) ?? Task.CompletedTask);
                this.registry[linkHandler.Type] = linkHandler;
            }
        }