public virtual object GetConnectionObject() { object obj2 = null; object obj3; lock (this) { try { this.CheckConnection(); if (this.m_State == ConnectionAvailabilityState.Unavailable) { try { TimeSpan span = (TimeSpan)(DateTime.Now - this.m_DownTimeStamp); double totalSeconds = span.TotalSeconds; if (this.m_ConnectionAliveEvent != null) { object[] args = new object[] { this.m_ConnectionName, totalSeconds }; ((ConnectionAliveEvent)Activator.CreateInstance(this.m_ConnectionAliveEvent, args)).Sign(); } if (this.m_ErrorCounter != null) { this.m_ErrorCounter.RawValue = 0L; } } catch (Exception exception) { ExceptionManager.Publish(exception); } } obj2 = this.CreateConnectionObject(); this.m_State = ConnectionAvailabilityState.Available; if (this.m_AvailableCounter != null) { this.m_AvailableCounter.RawValue = 1L; } obj3 = obj2; } catch (Exception exception2) { this.m_ConnException = exception2; if (this.m_State != ConnectionAvailabilityState.Unavailable) { this.m_DownTimeStamp = DateTime.Now; try { if (this.m_ConnectionDeadEvent != null) { object[] objArray2 = new object[] { this.m_ConnectionName, exception2 }; ((ConnectionDeadEvent)Activator.CreateInstance(this.m_ConnectionDeadEvent, objArray2)).Sign(); } } catch (Exception exception3) { ExceptionManager.Publish(exception3); } } this.m_State = ConnectionAvailabilityState.Unavailable; if (this.m_AvailableCounter != null) { this.m_AvailableCounter.RawValue = 0L; } if (this.m_ErrorCounter != null) { this.m_ErrorCounter.Increment(); } this.SignUnavailability(exception2); obj3 = obj2; } finally { this.CleanUp(); } } return obj3; }
// Methods public ConnectionProvider(string name) { this.m_ConnectionName = name; this.m_ConnectionAliveEvent = null; this.m_ConnectionDeadEvent = null; this.m_State = ConnectionAvailabilityState.NotTried; this.m_ConnException = null; this.m_AvailableCounter = null; this.m_ErrorCounter = null; this.m_AutoRecoveryInterval = 0; this.m_RecoveryThread = null; }