using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Net; using System.Xml; using System.Xml.Linq; using System.Globalization; namespace Windows.Azure.Storage { public class Queue : StorageRequest { private string queueName; public Queue(ConnectionDetails connectionDetails, string queueName) : base(connectionDetails) { this.queueName = queueName; } public QueueResponse Create() { base.InitializeRequest(queueName, null); base.SetMethod("PUT"); return new QueueResponse(base.DispatchRequest()); } public QueueResponse Delete() { base.InitializeRequest(queueName, null); base.SetMethod("DELETE"); return new QueueResponse(base.DispatchRequest()); } public QueueResponse PutMessage(string messageContent) { base.InitializeRequest(String.Format("{0}/{1}", queueName, "messages"), null); base.SetMethod("POST"); base.SetContent(GetMessagePayload(messageContent)); return new QueueResponse(base.DispatchRequest()); } public QueueResponse GetMessage(int numberOfMessages) { Dictionary queryParams = null; // Because the default is 1, if (numberOfMessages > 1) { queryParams = new Dictionary(); queryParams.Add("numofmessages", numberOfMessages.ToString()); } base.InitializeRequest(String.Format("{0}/{1}", queueName, "messages"), queryParams); base.SetMethod("GET"); return new QueueResponse(base.DispatchRequest()); } public QueueResponse GetMessage() { return GetMessage(0); } private byte[] GetMessagePayload(string messageContent) { XmlDocument message = new XmlDocument(); message.AppendChild(message.CreateElement("QueueMessage")); message["QueueMessage"].AppendChild(message.CreateElement("MessageText")); message["QueueMessage"]["MessageText"].InnerText = messageContent; return UTF8Encoding.UTF8.GetBytes(message.OuterXml); } } }