C# Class RabbitMQ.Client.Framing.Impl.Connection

Inheritance: IConnection
Show file Open project: rabbitmq/rabbitmq-dotnet-client Class Usage Examples

Private Properties

Property Type Description
IDisposable void
MaybeDisposeTimer void
NegotiatedMaxValue uint

Public Methods

Method Description
Abort ( ) : void

API-side invocation of connection abort.

Abort ( int timeout ) : void

API-side invocation of connection abort with timeout.

Abort ( ushort reasonCode, string reasonText ) : void

API-side invocation of connection abort.

Abort ( ushort reasonCode, string reasonText, ShutdownInitiator initiator, int timeout ) : void
Abort ( ushort reasonCode, string reasonText, int timeout ) : void

API-side invocation of connection abort with timeout.

Close ( ) : void

API-side invocation of connection.close.

Close ( ShutdownEventArgs reason ) : void
Close ( ShutdownEventArgs reason, bool abort, int timeout ) : void

Try to close connection in a graceful way

Shutdown reason contains code and text assigned when closing the connection, as well as the information about what initiated the close

Abort flag, if true, signals to close the ongoing connection immediately and do not report any errors if it was already closed.

Timeout determines how much time internal close operations should be given to complete. Negative or Timeout.Infinite value mean infinity.

Close ( int timeout ) : void

API-side invocation of connection.close with timeout.

Close ( ushort reasonCode, string reasonText ) : void

API-side invocation of connection.close.

Close ( ushort reasonCode, string reasonText, int timeout ) : void

API-side invocation of connection.close with timeout.

ClosingLoop ( ) : void Loop only used while quiescing. Use only to cleanly close connection
Connection ( IConnectionFactory factory, bool insist, IFrameHandler frameHandler, string clientProvidedName = null ) : System.Threading.Tasks
ConnectionCloseWrapper ( ushort reasonCode, string reasonText ) : Command
CreateModel ( ) : IModel
CreateSession ( ) : ISession
CreateSession ( int channelNumber ) : ISession
DefaultClientProperties ( ) : object>.IDictionary
EnsureIsOpen ( ) : void
FinishClose ( ) : void
HandleApplicationSuspend ( object sender, SuspendingEventArgs suspendingEventArgs ) : void We need to close the socket, otherwise suspending the application will take the maximum time allowed
HandleConnectionBlocked ( string reason ) : void
HandleConnectionUnblocked ( ) : void
HandleDomainUnload ( object sender, EventArgs ea ) : void We need to close the socket, otherwise attempting to unload the domain could cause a CannotUnloadAppDomainException
HandleMainLoopException ( ShutdownEventArgs reason ) : void
HardProtocolExceptionHandler ( RabbitMQ.Client.Impl.HardProtocolException hpe ) : bool
HeartbeatReadTimerCallback ( object state ) : void
HeartbeatWriteTimerCallback ( object state ) : void
InternalClose ( ShutdownEventArgs reason ) : void
LogCloseError ( String error, Exception ex ) : void
MainLoop ( ) : void
MainLoopIteration ( ) : void
MaybeStartHeartbeatTimers ( ) : void
NotifyHeartbeatListener ( ) : void
NotifyReceivedCloseOk ( ) : void
OnCallbackException ( RabbitMQ.Client.Events.CallbackExceptionEventArgs args ) : void
OnConnectionBlocked ( RabbitMQ.Client.Events.ConnectionBlockedEventArgs args ) : void
OnConnectionUnblocked ( ) : void
OnShutdown ( ) : void

Broadcasts notification of the final shutdown of the connection.

Open ( bool insist ) : void
PrettyPrintShutdownReport ( ) : void
QuiesceChannel ( RabbitMQ.Client.Impl.SoftProtocolException pe ) : void

Sets the channel named in the SoftProtocolException into "quiescing mode", where we issue a channel.close and ignore everything except for subsequent channel.close messages and the channel.close-ok reply that should eventually arrive.

Since a well-behaved peer will not wait indefinitely before issuing the close-ok, we don't bother with a timeout here; compare this to the case of a connection.close-ok, where a timeout is necessary.

We need to send the close method and politely wait for a reply before marking the channel as available for reuse.

As soon as SoftProtocolException is detected, we should stop servicing ordinary application work, and should concentrate on bringing down the channel as quickly and gracefully as possible. The way this is done, as per the close-protocol, is to signal closure up the stack *before* sending the channel.close, by invoking ISession.Close. Once the upper layers have been signalled, we are free to do what we need to do to clean up and shut down the channel.

SetCloseReason ( ShutdownEventArgs reason ) : bool
StartMainLoop ( bool useBackgroundThread ) : void
TerminateMainloop ( ) : void May be called more than once. Should therefore be idempotent.
ToString ( ) : string
WriteFrame ( Frame f ) : void
WriteFrameSet ( IList f ) : void

Protected Methods

Method Description
ChannelCloseWrapper ( ushort reasonCode, string reasonText ) : Command
MaybeStopHeartbeatTimers ( ) : void
StartAndTune ( ) : void

Private Methods

Method Description
IDisposable ( ) : void
MaybeDisposeTimer ( Timer &timer ) : void
NegotiatedMaxValue ( uint clientValue, uint serverValue ) : uint

Method Details

Abort() public method

API-side invocation of connection abort.
public Abort ( ) : void
return void

Abort() public method

API-side invocation of connection abort with timeout.
public Abort ( int timeout ) : void
timeout int
return void

Abort() public method

API-side invocation of connection abort.
public Abort ( ushort reasonCode, string reasonText ) : void
reasonCode ushort
reasonText string
return void

Abort() public method

public Abort ( ushort reasonCode, string reasonText, ShutdownInitiator initiator, int timeout ) : void
reasonCode ushort
reasonText string
initiator ShutdownInitiator
timeout int
return void

Abort() public method

API-side invocation of connection abort with timeout.
public Abort ( ushort reasonCode, string reasonText, int timeout ) : void
reasonCode ushort
reasonText string
timeout int
return void

ChannelCloseWrapper() protected method

protected ChannelCloseWrapper ( ushort reasonCode, string reasonText ) : Command
reasonCode ushort
reasonText string
return RabbitMQ.Client.Impl.Command

Close() public method

API-side invocation of connection.close.
public Close ( ) : void
return void

Close() public method

public Close ( ShutdownEventArgs reason ) : void
reason ShutdownEventArgs
return void

Close() public method

Try to close connection in a graceful way

Shutdown reason contains code and text assigned when closing the connection, as well as the information about what initiated the close

Abort flag, if true, signals to close the ongoing connection immediately and do not report any errors if it was already closed.

Timeout determines how much time internal close operations should be given to complete. Negative or Timeout.Infinite value mean infinity.

public Close ( ShutdownEventArgs reason, bool abort, int timeout ) : void
reason ShutdownEventArgs
abort bool
timeout int
return void

Close() public method

API-side invocation of connection.close with timeout.
public Close ( int timeout ) : void
timeout int
return void

Close() public method

API-side invocation of connection.close.
public Close ( ushort reasonCode, string reasonText ) : void
reasonCode ushort
reasonText string
return void

Close() public method

API-side invocation of connection.close with timeout.
public Close ( ushort reasonCode, string reasonText, int timeout ) : void
reasonCode ushort
reasonText string
timeout int
return void

ClosingLoop() public method

Loop only used while quiescing. Use only to cleanly close connection
public ClosingLoop ( ) : void
return void

Connection() public method

public Connection ( IConnectionFactory factory, bool insist, IFrameHandler frameHandler, string clientProvidedName = null ) : System.Threading.Tasks
factory IConnectionFactory
insist bool
frameHandler IFrameHandler
clientProvidedName string
return System.Threading.Tasks

ConnectionCloseWrapper() public method

public ConnectionCloseWrapper ( ushort reasonCode, string reasonText ) : Command
reasonCode ushort
reasonText string
return RabbitMQ.Client.Impl.Command

CreateModel() public method

public CreateModel ( ) : IModel
return IModel

CreateSession() public method

public CreateSession ( ) : ISession
return ISession

CreateSession() public method

public CreateSession ( int channelNumber ) : ISession
channelNumber int
return ISession

DefaultClientProperties() public static method

public static DefaultClientProperties ( ) : object>.IDictionary
return object>.IDictionary

EnsureIsOpen() public method

public EnsureIsOpen ( ) : void
return void

FinishClose() public method

public FinishClose ( ) : void
return void

HandleApplicationSuspend() public method

We need to close the socket, otherwise suspending the application will take the maximum time allowed
public HandleApplicationSuspend ( object sender, SuspendingEventArgs suspendingEventArgs ) : void
sender object
suspendingEventArgs Windows.ApplicationModel.SuspendingEventArgs
return void

HandleConnectionBlocked() public method

public HandleConnectionBlocked ( string reason ) : void
reason string
return void

HandleConnectionUnblocked() public method

public HandleConnectionUnblocked ( ) : void
return void

HandleDomainUnload() public method

We need to close the socket, otherwise attempting to unload the domain could cause a CannotUnloadAppDomainException
public HandleDomainUnload ( object sender, EventArgs ea ) : void
sender object
ea System.EventArgs
return void

HandleMainLoopException() public method

public HandleMainLoopException ( ShutdownEventArgs reason ) : void
reason ShutdownEventArgs
return void

HardProtocolExceptionHandler() public method

public HardProtocolExceptionHandler ( RabbitMQ.Client.Impl.HardProtocolException hpe ) : bool
hpe RabbitMQ.Client.Impl.HardProtocolException
return bool

HeartbeatReadTimerCallback() public method

public HeartbeatReadTimerCallback ( object state ) : void
state object
return void

HeartbeatWriteTimerCallback() public method

public HeartbeatWriteTimerCallback ( object state ) : void
state object
return void

InternalClose() public method

public InternalClose ( ShutdownEventArgs reason ) : void
reason ShutdownEventArgs
return void

LogCloseError() public method

public LogCloseError ( String error, Exception ex ) : void
error String
ex System.Exception
return void

MainLoop() public method

public MainLoop ( ) : void
return void

MainLoopIteration() public method

public MainLoopIteration ( ) : void
return void

MaybeStartHeartbeatTimers() public method

public MaybeStartHeartbeatTimers ( ) : void
return void

MaybeStopHeartbeatTimers() protected method

protected MaybeStopHeartbeatTimers ( ) : void
return void

NotifyHeartbeatListener() public method

public NotifyHeartbeatListener ( ) : void
return void

NotifyReceivedCloseOk() public method

public NotifyReceivedCloseOk ( ) : void
return void

OnCallbackException() public method

public OnCallbackException ( RabbitMQ.Client.Events.CallbackExceptionEventArgs args ) : void
args RabbitMQ.Client.Events.CallbackExceptionEventArgs
return void

OnConnectionBlocked() public method

public OnConnectionBlocked ( RabbitMQ.Client.Events.ConnectionBlockedEventArgs args ) : void
args RabbitMQ.Client.Events.ConnectionBlockedEventArgs
return void

OnConnectionUnblocked() public method

public OnConnectionUnblocked ( ) : void
return void

OnShutdown() public method

Broadcasts notification of the final shutdown of the connection.
public OnShutdown ( ) : void
return void

Open() public method

public Open ( bool insist ) : void
insist bool
return void

PrettyPrintShutdownReport() public method

public PrettyPrintShutdownReport ( ) : void
return void

QuiesceChannel() public method

Sets the channel named in the SoftProtocolException into "quiescing mode", where we issue a channel.close and ignore everything except for subsequent channel.close messages and the channel.close-ok reply that should eventually arrive.

Since a well-behaved peer will not wait indefinitely before issuing the close-ok, we don't bother with a timeout here; compare this to the case of a connection.close-ok, where a timeout is necessary.

We need to send the close method and politely wait for a reply before marking the channel as available for reuse.

As soon as SoftProtocolException is detected, we should stop servicing ordinary application work, and should concentrate on bringing down the channel as quickly and gracefully as possible. The way this is done, as per the close-protocol, is to signal closure up the stack *before* sending the channel.close, by invoking ISession.Close. Once the upper layers have been signalled, we are free to do what we need to do to clean up and shut down the channel.

public QuiesceChannel ( RabbitMQ.Client.Impl.SoftProtocolException pe ) : void
pe RabbitMQ.Client.Impl.SoftProtocolException
return void

SetCloseReason() public method

public SetCloseReason ( ShutdownEventArgs reason ) : bool
reason ShutdownEventArgs
return bool

StartAndTune() protected method

protected StartAndTune ( ) : void
return void

StartMainLoop() public method

public StartMainLoop ( bool useBackgroundThread ) : void
useBackgroundThread bool
return void

TerminateMainloop() public method

May be called more than once. Should therefore be idempotent.
public TerminateMainloop ( ) : void
return void

ToString() public method

public ToString ( ) : string
return string

WriteFrame() public method

public WriteFrame ( Frame f ) : void
f RabbitMQ.Client.Impl.Frame
return void

WriteFrameSet() public method

public WriteFrameSet ( IList f ) : void
f IList
return void