/// <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); } }
/// <summary> /// Closes the session. /// </summary> /// <returns>True if the session is closed; false if close is pending.</returns> /// <remarks>All links in the session are also closed.</remarks> protected override bool CloseInternal() { if (this.State == AmqpObjectState.OpenReceived) { this.SendBegin(); } this.CloseLinks(!this.LinkFrameAllowed()); AmqpDebug.Dump(this); AmqpObjectState state = this.SendEnd(); return(state == AmqpObjectState.End); }
/// <summary> /// Aborts the session object. All links in the session are aborted. /// </summary> protected override void AbortInternal() { this.CloseLinks(true); AmqpDebug.Dump(this); }
internal void SendCommand(Performative command, ByteBuffer payload) { AmqpDebug.Log(this, true, command); this.connection.SendCommand(command, this.LocalChannel, payload); }
public void SendCommand(Performative command, ArraySegment <byte>[] payload) { AmqpDebug.Log(this, true, command); this.connection.SendCommand(command, this.LocalChannel, payload); }