private Microsoft.ServiceBus.Channels.ConnectionModeReader SetupModeReader(Microsoft.ServiceBus.Channels.IConnection connection, bool isCached)
 {
     Microsoft.ServiceBus.Channels.ConnectionModeReader connectionModeReader;
     Microsoft.ServiceBus.Channels.ConnectionModeReader connectionModeReader1;
     if (!isCached)
     {
         if (this.onConnectionModeKnown == null)
         {
             this.onConnectionModeKnown = new Microsoft.ServiceBus.Channels.ConnectionModeCallback(this.OnConnectionModeKnown);
         }
         connectionModeReader = new Microsoft.ServiceBus.Channels.ConnectionModeReader(connection, this.onConnectionModeKnown, this.onConnectionClosed);
     }
     else
     {
         if (this.onCachedConnectionModeKnown == null)
         {
             this.onCachedConnectionModeKnown = new Microsoft.ServiceBus.Channels.ConnectionModeCallback(this.OnCachedConnectionModeKnown);
         }
         connectionModeReader = new Microsoft.ServiceBus.Channels.ConnectionModeReader(connection, this.onCachedConnectionModeKnown, this.onConnectionClosed);
     }
     lock (this.ThisLock)
     {
         if (!this.isClosed)
         {
             this.connectionReaders.Add(connectionModeReader);
             connectionModeReader1 = connectionModeReader;
         }
         else
         {
             connectionModeReader.Dispose();
             connectionModeReader1 = null;
         }
     }
     return(connectionModeReader1);
 }
 private void OnConnectionAvailable(Microsoft.ServiceBus.Channels.IConnection connection, Action connectionDequeuedCallback)
 {
     Microsoft.ServiceBus.Channels.ConnectionModeReader connectionModeReader = this.SetupModeReader(connection, false);
     if (connectionModeReader == null)
     {
         connectionDequeuedCallback();
         return;
     }
     connectionModeReader.StartReading(this.channelInitializationTimeout, connectionDequeuedCallback);
 }
 public void ReuseConnection(Microsoft.ServiceBus.Channels.IConnection connection, TimeSpan closeTimeout)
 {
     connection.ExceptionEventType = TraceEventType.Information;
     Microsoft.ServiceBus.Channels.ConnectionModeReader connectionModeReader = this.SetupModeReader(connection, true);
     if (connectionModeReader != null)
     {
         if (this.reuseConnectionCallback == null)
         {
             this.reuseConnectionCallback = new Action <object>(this.ReuseConnectionCallback);
         }
         IOThreadScheduler.ScheduleCallbackNoFlow(this.reuseConnectionCallback, new Microsoft.ServiceBus.Channels.ConnectionDemuxer.ReuseConnectionState(connectionModeReader, closeTimeout));
     }
 }
 public ReuseConnectionState(Microsoft.ServiceBus.Channels.ConnectionModeReader modeReader, TimeSpan closeTimeout)
 {
     this.modeReader   = modeReader;
     this.closeTimeout = closeTimeout;
 }
        private void OnConnectionModeKnownCore(Microsoft.ServiceBus.Channels.ConnectionModeReader modeReader, bool isCached)
        {
            Microsoft.ServiceBus.Channels.FramingMode connectionMode;
            lock (this.ThisLock)
            {
                if (!this.isClosed)
                {
                    this.connectionReaders.Remove(modeReader);
                }
                else
                {
                    return;
                }
            }
            bool flag = true;

            try
            {
                try
                {
                    try
                    {
                        connectionMode = modeReader.GetConnectionMode();
                    }
                    catch (CommunicationException communicationException1)
                    {
                        CommunicationException communicationException = communicationException1;
                        TraceEventType         exceptionEventType     = modeReader.Connection.ExceptionEventType;
                        if (Microsoft.ServiceBus.Diagnostics.DiagnosticUtility.ShouldTrace(exceptionEventType))
                        {
                            Microsoft.ServiceBus.Diagnostics.DiagnosticUtility.ExceptionUtility.TraceHandledException(communicationException, exceptionEventType);
                        }
                        return;
                    }
                    catch (TimeoutException timeoutException1)
                    {
                        TimeoutException timeoutException = timeoutException1;
                        if (!isCached)
                        {
                            string   channelInitializationTimeout = Resources.ChannelInitializationTimeout;
                            object[] objArray = new object[] { this.channelInitializationTimeout };
                            timeoutException = new TimeoutException(Microsoft.ServiceBus.SR.GetString(channelInitializationTimeout, objArray), timeoutException);
                            ErrorBehavior.ThrowAndCatch(timeoutException);
                        }
                        TraceEventType traceEventType = modeReader.Connection.ExceptionEventType;
                        if (Microsoft.ServiceBus.Diagnostics.DiagnosticUtility.ShouldTrace(traceEventType))
                        {
                            Microsoft.ServiceBus.Diagnostics.DiagnosticUtility.ExceptionUtility.TraceHandledException(timeoutException, traceEventType);
                        }
                        return;
                    }
                    switch (connectionMode)
                    {
                    case Microsoft.ServiceBus.Channels.FramingMode.Singleton:
                    {
                        this.OnSingletonConnection(modeReader.Connection, modeReader.ConnectionDequeuedCallback, modeReader.StreamPosition, modeReader.BufferOffset, modeReader.BufferSize, modeReader.GetRemainingTimeout());
                        break;
                    }

                    case Microsoft.ServiceBus.Channels.FramingMode.Duplex:
                    {
                        this.OnDuplexConnection(modeReader.Connection, modeReader.ConnectionDequeuedCallback, modeReader.StreamPosition, modeReader.BufferOffset, modeReader.BufferSize, modeReader.GetRemainingTimeout());
                        break;
                    }

                    default:
                    {
                        string    framingModeNotSupported = Resources.FramingModeNotSupported;
                        object[]  objArray1            = new object[] { connectionMode };
                        Exception invalidDataException = new InvalidDataException(Microsoft.ServiceBus.SR.GetString(framingModeNotSupported, objArray1));
                        Exception protocolException    = new ProtocolException(invalidDataException.Message, invalidDataException);
                        Microsoft.ServiceBus.Channels.FramingEncodingString.AddFaultString(protocolException, "http://schemas.microsoft.com/ws/2006/05/framing/faults/UnsupportedMode");
                        ErrorBehavior.ThrowAndCatch(protocolException);
                        return;
                    }
                    }
                    flag = false;
                }
                catch (Exception exception1)
                {
                    Exception exception = exception1;
                    if (Fx.IsFatal(exception))
                    {
                        throw;
                    }
                    TraceEventType exceptionEventType1 = modeReader.Connection.ExceptionEventType;
                    if (Microsoft.ServiceBus.Diagnostics.DiagnosticUtility.ShouldTrace(exceptionEventType1))
                    {
                        Microsoft.ServiceBus.Diagnostics.DiagnosticUtility.ExceptionUtility.TraceHandledException(exception, exceptionEventType1);
                    }
                }
            }
            finally
            {
                if (flag)
                {
                    modeReader.Dispose();
                }
            }
        }
 private void OnConnectionModeKnown(Microsoft.ServiceBus.Channels.ConnectionModeReader modeReader)
 {
     this.OnConnectionModeKnownCore(modeReader, false);
 }