public RelayedOnewayChannelListener(BindingContext context, RelayedOnewayTransportBindingElement transportBindingElement) : base(context.Binding)
        {
            this.nameSettings = context.BindingParameters.Find <Microsoft.ServiceBus.NameSettings>();
            if (this.nameSettings == null)
            {
                this.nameSettings = new Microsoft.ServiceBus.NameSettings();
                this.nameSettings.ServiceSettings.ListenerType = ListenerType.Unicast;
            }
            this.scheme         = context.Binding.Scheme;
            this.messageVersion = context.Binding.MessageVersion;
            switch (context.ListenUriMode)
            {
            case ListenUriMode.Explicit:
            {
                this.SetUri(context.ListenUriBaseAddress, context.ListenUriRelativeAddress);
                break;
            }

            case ListenUriMode.Unique:
            {
                this.SetUniqueUri(context.ListenUriBaseAddress, context.ListenUriRelativeAddress);
                break;
            }
            }
            this.channel  = new RelayedOnewayChannelListener.RelayedOnewayInputChannel(this, new EndpointAddress(this.Uri, new AddressHeader[0]));
            base.Acceptor = new Microsoft.ServiceBus.Channels.InputChannelAcceptor(this, () => this.GetPendingException());
            this.ChannelAcceptor.EnqueueAndDispatch(this.channel, new Action(this.OnChannelDequeued));
            this.connection = RelayedOnewayManager.RegisterListener(context, transportBindingElement, this);
        }
        protected override void OnOpen(TimeSpan timeout)
        {
            TimeoutHelper timeoutHelper = new TimeoutHelper(timeout);

            base.OnOpen(timeoutHelper.RemainingTime());
            IRelayedOnewayListener relayedOnewayListener = this.connection;

            if (relayedOnewayListener != null)
            {
                relayedOnewayListener.Open(timeoutHelper.RemainingTime());
            }
        }
        private static void OnListenerClosing(object sender, EventArgs args)
        {
            IRelayedOnewayListener relayedOnewayListener;
            IRelayedOnewayListener relayedOnewayListener1 = (IRelayedOnewayListener)sender;

            lock (RelayedOnewayManager.listenerTable)
            {
                if (RelayedOnewayManager.listenerTable.TryLookupUri(relayedOnewayListener1.Uri, HostNameComparisonMode.Exact, out relayedOnewayListener) && relayedOnewayListener == relayedOnewayListener1)
                {
                    RelayedOnewayManager.listenerTable.UnregisterUri(relayedOnewayListener1.Uri, HostNameComparisonMode.Exact);
                }
            }
        }
        protected override IAsyncResult OnBeginOpen(TimeSpan timeout, AsyncCallback callback, object state)
        {
            IRelayedOnewayListener relayedOnewayListener = this.connection;

            if (relayedOnewayListener == null)
            {
                return(new DelegatingAsyncResult(new Func <TimeSpan, AsyncCallback, object, IAsyncResult>(this.OnBeginOpen), new Action <IAsyncResult>(this.OnEndOpen), timeout, callback, state));
            }
            Microsoft.ServiceBus.Common.ChainedBeginHandler chainedBeginHandler = new Microsoft.ServiceBus.Common.ChainedBeginHandler(this.OnBeginOpen);
            Microsoft.ServiceBus.Common.ChainedEndHandler   chainedEndHandler   = new Microsoft.ServiceBus.Common.ChainedEndHandler(this.OnEndOpen);
            IRelayedOnewayListener relayedOnewayListener1 = relayedOnewayListener;
            IRelayedOnewayListener relayedOnewayListener2 = relayedOnewayListener;

            return(new Microsoft.ServiceBus.Common.ChainedAsyncResult(timeout, callback, state, chainedBeginHandler, chainedEndHandler, new Microsoft.ServiceBus.Common.ChainedBeginHandler(relayedOnewayListener1.BeginOpen), new Microsoft.ServiceBus.Common.ChainedEndHandler(relayedOnewayListener2.EndOpen)));
        }
        private void CleanUpConnection()
        {
            IRelayedOnewayListener relayedOnewayListener = null;

            lock (base.ThisLock)
            {
                relayedOnewayListener = this.connection;
                this.connection       = null;
            }
            if (relayedOnewayListener != null)
            {
                relayedOnewayListener.Unregister(this);
                relayedOnewayListener.Abort();
            }
        }
        protected override void OnClose(TimeSpan timeout)
        {
            TimeoutHelper          timeoutHelper         = new TimeoutHelper(timeout);
            IRelayedOnewayListener relayedOnewayListener = null;

            lock (base.ThisLock)
            {
                relayedOnewayListener = this.connection;
                this.connection       = null;
            }
            if (relayedOnewayListener != null)
            {
                relayedOnewayListener.Unregister(this);
                relayedOnewayListener.Close(timeoutHelper.RemainingTime());
            }
            base.OnClose(timeoutHelper.RemainingTime());
        }
        protected override IAsyncResult OnBeginClose(TimeSpan timeout, AsyncCallback callback, object state)
        {
            IRelayedOnewayListener relayedOnewayListener = null;

            lock (base.ThisLock)
            {
                relayedOnewayListener = this.connection;
                this.connection       = null;
            }
            if (relayedOnewayListener == null)
            {
                return(new DelegatingAsyncResult(new Func <TimeSpan, AsyncCallback, object, IAsyncResult>(this.OnBeginClose), new Action <IAsyncResult>(this.OnEndClose), timeout, callback, state));
            }
            relayedOnewayListener.Unregister(this);
            IRelayedOnewayListener relayedOnewayListener1 = relayedOnewayListener;
            IRelayedOnewayListener relayedOnewayListener2 = relayedOnewayListener;

            return(new Microsoft.ServiceBus.Common.ChainedAsyncResult(timeout, callback, state, new Microsoft.ServiceBus.Common.ChainedBeginHandler(relayedOnewayListener1.BeginClose), new Microsoft.ServiceBus.Common.ChainedEndHandler(relayedOnewayListener2.EndClose), new Microsoft.ServiceBus.Common.ChainedBeginHandler(this.OnBeginClose), new Microsoft.ServiceBus.Common.ChainedEndHandler(this.OnEndClose)));
        }