public static AMQPHeader getAMQP(IByteBuffer buf) { TLVAmqp list = TLVFactory.getTlv(buf); if (list.Code != AMQPType.LIST_0 && list.Code != AMQPType.LIST_8 && list.Code != AMQPType.LIST_32) { throw new MalformedMessageException("Received amqp-header with malformed arguments"); } AMQPHeader header = null; Byte byteCode = list.Constructor.getDescriptorCode().Value; HeaderCodes code = (HeaderCodes)byteCode; switch (code) { case HeaderCodes.ATTACH: header = new AMQPAttach(); break; case HeaderCodes.BEGIN: header = new AMQPBegin(); break; case HeaderCodes.CLOSE: header = new AMQPClose(); break; case HeaderCodes.DETACH: header = new AMQPDetach(); break; case HeaderCodes.DISPOSITION: header = new AMQPDisposition(); break; case HeaderCodes.END: header = new AMQPEnd(); break; case HeaderCodes.FLOW: header = new AMQPFlow(); break; case HeaderCodes.OPEN: header = new AMQPOpen(); break; case HeaderCodes.TRANSFER: header = new AMQPTransfer(); break; default: throw new MalformedMessageException("Received amqp-header with unrecognized performative"); } header.fillArguments((TLVList)list); return(header); }
public void ProcessTransfer(AMQPData data, long?handle, bool?settled, long?_deliveryId) { QOS qos = QOS.AT_LEAST_ONCE; if (settled.HasValue && settled.Value) { qos = QOS.AT_MOST_ONCE; } else { AMQPDisposition disposition = new AMQPDisposition(); disposition.Channel = _channel; disposition.Role = RoleCodes.RECEIVER; disposition.First = _deliveryId.Value; disposition.Last = _deliveryId.Value; disposition.Settled = true; disposition.State = new AMQPAccepted(); _client.Send(disposition); } String topicName = null; if (!handle.HasValue || !_usedMappings.ContainsKey(handle.Value)) { return; } topicName = _usedMappings[handle.Value]; _dbInterface.StoreMessage(topicName, data.Data, qos); if (_listener != null) { _listener.MessageReceived(MessageType.PUBLISH); } }