/// <summary>
/// Processes session and link frames.
/// </summary>
/// <param name="frame">The received frame.</param>
public virtual void ProcessFrame(Frame frame)
{
Performative command = frame.Command;
try
{
AmqpDebug.Log(this, false, command);
if (command.DescriptorCode == Begin.Code)
{
this.OnReceiveBegin((Begin)command);
}
else if (command.DescriptorCode == End.Code)
{
this.OnReceiveEnd((End)command);
}
else if (command.DescriptorCode == Disposition.Code)
{
this.OnReceiveDisposition((Disposition)command);
}
else if (command.DescriptorCode == Flow.Code)
{
this.OnReceiveFlow((Flow)command);
}
else
{
this.OnReceiveLinkFrame(frame);
}
}
catch (Exception exception) when(!Fx.IsFatal(exception))
{
AmqpTrace.Provider.AmqpLogError(this, "ProcessFrame", exception);
this.SafeClose(exception);
}
}