Skip to content
This repository has been archived by the owner on Apr 30, 2021. It is now read-only.

Commit

Permalink
Added XML comments for all mindtouch.sqs classes.
Browse files Browse the repository at this point in the history
  • Loading branch information
bjorg committed May 26, 2015
1 parent 94b40f6 commit 03064da
Show file tree
Hide file tree
Showing 19 changed files with 596 additions and 70 deletions.
58 changes: 58 additions & 0 deletions src/mindtouch.sqs/ISqsClient.cs
Original file line number Diff line number Diff line change
Expand Up @@ -24,16 +24,74 @@
using MindTouch.Dream;

namespace MindTouch.Sqs {

/// <summary>
/// Interface for Simple Queue Service (SQS) provider.
/// </summary>
public interface ISqsClient {

//--- Methods ---

/// <summary>
/// Receive zero or more messages from name queue.
/// </summary>
/// <param name="queueName">Queue name.</param>
/// <param name="waitTimeSeconds">Max amount of time to wait until this method returns.</param>
/// <param name="maxNumberOfMessages">Max number of messages to request.</param>
/// <returns>Enumeration of received messages.</returns>
IEnumerable<SqsMessage> ReceiveMessages(SqsQueueName queueName, TimeSpan waitTimeSeconds, uint maxNumberOfMessages);

/// <summary>
/// Delete single message from named queue.
/// </summary>
/// <param name="queueName">Queue name.</param>
/// <param name="messageReceipt">Message receipt.</param>
/// <returns>True if message was deleted.</returns>
bool DeleteMessage(SqsQueueName queueName, SqsMessageReceipt messageReceipt);

/// <summary>
/// Delete messages from named queue.
/// </summary>
/// <param name="queueName">Queue name.</param>
/// <param name="messages">Enumeration of messages to delete.</param>
/// <returns>Enumeration of messages that failed to delete.</returns>
IEnumerable<SqsMessageId> DeleteMessages(SqsQueueName queueName, IEnumerable<SqsMessage> messages);

/// <summary>
/// Send message on named queue with a visibility delay.
/// </summary>
/// <param name="queueName">Queue name.</param>
/// <param name="messageBody">Message body.</param>
/// <param name="delay">Time to wait until the message becomes visible.</param>
void SendMessage(SqsQueueName queueName, string messageBody, TimeSpan delay);

/// <summary>
/// Send message on named queue.
/// </summary>
/// <param name="queueName">Queue name.</param>
/// <param name="messageBody">Message body.</param>
void SendMessage(SqsQueueName queueName, string messageBody);

/// <summary>
/// Send one or more message to a named queue.
/// </summary>
/// <param name="queueName">Queue name.</param>
/// <param name="messageBodies">Enumeration of message bodies.</param>
/// <returns>Enumeration of message bodies that failed to send.</returns>
IEnumerable<string> SendMessages(SqsQueueName queueName, IEnumerable<string> messageBodies);

/// <summary>
/// Create a new named queue and gets its URI.
/// </summary>
/// <param name="queueName">Queue name.</param>
/// <returns>URI for the newly created queue.</returns>
XUri CreateQueue(SqsQueueName queueName);

/// <summary>
/// Delete a named queue.
/// </summary>
/// <param name="queueName">Queue name.</param>
/// <returns>True if the named queue was deleted</returns>
bool DeleteQueue(SqsQueueName queueName);
}
}
12 changes: 12 additions & 0 deletions src/mindtouch.sqs/ISqsPollingClient.cs
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,19 @@
using System;

namespace MindTouch.Sqs {

/// <summary>
/// Interface for a polling SQS provider.
/// </summary>
public interface ISqsPollingClient {

//--- Methods ---

/// <summary>
/// Start listening for SQS messages with the provided settings.
/// </summary>
/// <param name="settings">Polling settings.</param>
/// <returns>Object to dispose listener when no longer needed.</returns>
IDisposable Listen(SqsPollingClientSettings settings);
}
}
83 changes: 82 additions & 1 deletion src/mindtouch.sqs/InMemorySqsClient.cs
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,10 @@
using MindTouch.Tasking;

namespace MindTouch.Sqs {

/// <summary>
/// An in-memory variation of the ISqsClient interface. Intended for testing in non-cloud environments.
/// </summary>
public class InMemorySqsClient : ISqsClient, IDisposable {

//--- Class types ---
Expand All @@ -48,6 +52,10 @@ private sealed class QueueEntry {
private static InMemorySqsClient _instance = new InMemorySqsClient();

//--- Class Properties ---

/// <summary>
/// Access globally shared in-memory queuing client.
/// </summary>
public static InMemorySqsClient Instance {
get {
var instance = _instance;
Expand All @@ -69,20 +77,43 @@ private sealed class QueueEntry {
private readonly Random _random = new Random();

//--- Properties ---

/// <summary>
/// Returns true if instance is disposed.
/// </summary>
public bool IsDisposed { get { return _isDisposed; } }

//--- Methods ---

/// <summary>
/// Delete messages from named queue.
/// </summary>
/// <param name="queueName">Queue name.</param>
/// <param name="messages">Enumeration of messages to delete.</param>
/// <returns>Enumeration of messages that failed to delete.</returns>
public IEnumerable<SqsMessageId> DeleteMessages(SqsQueueName queueName, IEnumerable<SqsMessage> messages) {
foreach(var message in messages) {
DeleteMessage(queueName, message.MessageReceipt);
}
return new SqsMessageId[0];
}

/// <summary>
/// Get an internal URI for named queue.
/// </summary>
/// <param name="queueName">Queue name.</param>
/// <returns>Internal URI for named queue.</returns>
public XUri GetQueueUri(SqsQueueName queueName) {
return new XUri("local://" + queueName.Value);
}

/// <summary>
/// Receive zero or more messages from name queue.
/// </summary>
/// <param name="queueName">Queue name.</param>
/// <param name="waitTimeSeconds">Max amount of time to wait until this method returns.</param>
/// <param name="maxNumberOfMessages">Max number of messages to request.</param>
/// <returns>Enumeration of received messages.</returns>
public IEnumerable<SqsMessage> ReceiveMessages(SqsQueueName queueName, TimeSpan waitTimeSeconds, uint maxNumberOfMessages) {
var start = GlobalClock.UtcNow;

Expand Down Expand Up @@ -116,6 +147,12 @@ private sealed class QueueEntry {
}
}

/// <summary>
/// Delete single message from named queue.
/// </summary>
/// <param name="queueName">Queue name.</param>
/// <param name="messageReceipt">Message receipt.</param>
/// <returns>True if message was deleted.</returns>
public bool DeleteMessage(SqsQueueName queueName, SqsMessageReceipt messageReceipt) {
var queueUrl = GetQueueUri(queueName);
var msgQueue = GetQueue(queueUrl);
Expand All @@ -129,6 +166,10 @@ private sealed class QueueEntry {
return true;
}

/// <summary>
/// Removed all messages from named queue.
/// </summary>
/// <param name="queueName">Queue name</param>
public void ClearQueue(SqsQueueName queueName) {
lock(_queues) {
var msgQueue = GetQueue(GetQueueUri(queueName));
Expand All @@ -141,6 +182,12 @@ private sealed class QueueEntry {
}
}

/// <summary>
/// Send message on named queue with a visibility delay.
/// </summary>
/// <param name="queueName">Queue name.</param>
/// <param name="messageBody">Message body.</param>
/// <param name="delay">Time to wait until the message becomes visible.</param>
public void SendMessage(SqsQueueName queueName, string messageBody, TimeSpan delay) {
var queueUri = GetQueueUri(queueName);
var msgQueue = GetQueue(queueUri);
Expand All @@ -151,17 +198,33 @@ private sealed class QueueEntry {
}
}

/// <summary>
/// Send message on named queue.
/// </summary>
/// <param name="queueName">Queue name.</param>
/// <param name="messageBody">Message body.</param>
public void SendMessage(SqsQueueName queueName, string messageBody) {
SendMessage(queueName, messageBody, TimeSpan.Zero);
}

/// <summary>
/// Send one or more message to a named queue.
/// </summary>
/// <param name="queueName">Queue name.</param>
/// <param name="messageBodies">Enumeration of message bodies.</param>
/// <returns>Enumeration of message bodies that failed to send.</returns>
public IEnumerable<string> SendMessages(SqsQueueName queueName, IEnumerable<string> messageBodies) {
foreach(var messageBody in messageBodies) {
SendMessage(queueName, messageBody);
}
return Enumerable.Empty<string>();
}

/// <summary>
/// Create a new named queue and gets its URI.
/// </summary>
/// <param name="queueName">Queue name.</param>
/// <returns>URI for the newly created queue.</returns>
public XUri CreateQueue(SqsQueueName queueName) {
lock(_queues) {
var queueUri = GetQueueUri(queueName);
Expand All @@ -172,6 +235,11 @@ private sealed class QueueEntry {
}
}

/// <summary>
/// Delete a named queue.
/// </summary>
/// <param name="queueName">Queue name.</param>
/// <returns>True if the named queue was deleted</returns>
public bool DeleteQueue(SqsQueueName queueName) {
lock(_queues) {
var queueUri = GetQueueUri(queueName);
Expand All @@ -182,6 +250,11 @@ private sealed class QueueEntry {
}
}

/// <summary>
/// Get enumeration of all messages that are currently held by the in-memory named queue.
/// </summary>
/// <param name="queueName">Queue name.</param>
/// <returns>Enumeration of messages.</returns>
public IEnumerable<SqsMessage> InspectQueue(SqsQueueName queueName) {
lock(_queues) {
var msgQueue = GetQueue(GetQueueUri(queueName));
Expand All @@ -194,17 +267,25 @@ private sealed class QueueEntry {
}
}

/// <summary>
/// Get enumeration of all in-memory queue names that start with a prefix (optiopnal).
/// </summary>
/// <param name="prefix">Prefix to match on. Can be NULL.</param>
/// <returns>Enumeration of queue names.</returns>
public IEnumerable<string> ListQueues(string prefix) {
string[] queues;
lock(_queues) {
queues = _queues
.Keys
.Where(queue => queue.ToString().StartsWith(prefix ?? ""))
.Where(queue => queue.ToString().StartsWithInvariant(prefix ?? ""))
.Select(queue => queue.ToString()).ToArray();
}
return queues;
}

/// <summary>
/// Dispose of ISqsClient.
/// </summary>
public void Dispose() {
if(_isDisposed) {
return;
Expand Down
12 changes: 10 additions & 2 deletions src/mindtouch.sqs/InMemorySqsNullQueueException.cs
Original file line number Diff line number Diff line change
Expand Up @@ -21,10 +21,18 @@

using System;
namespace MindTouch.Sqs {

/// <summary>
/// Exception thrown by InMemorySqsClient whent a queue name cannot be resolved.
/// </summary>
public class InMemorySqsNullQueueException : Exception {

//--- Constructors ---
public InMemorySqsNullQueueException(string message) : base(message) {
}

/// <summary>
/// Constructor for creating an instance.
/// </summary>
/// <param name="message">Exception message.</param>
public InMemorySqsNullQueueException(string message) : base(message) { }
}
}
9 changes: 4 additions & 5 deletions src/mindtouch.sqs/Properties/AssemblyInfo.cs
Original file line number Diff line number Diff line change
Expand Up @@ -20,18 +20,17 @@
*/

using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;

// General Information about an assembly is controlled through the following
// set of attributes. Change these attribute values to modify the information
// associated with an assembly.
[assembly: AssemblyTitle("mindtouch.deki.data.sqs")]
[assembly: AssemblyTitle("MindTouch SQS")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("")]
[assembly: AssemblyProduct("mindtouch.deki.data.sqs")]
[assembly: AssemblyCopyright("Copyright © 2014")]
[assembly: AssemblyCompany("MindTouch, Inc.")]
[assembly: AssemblyProduct("MindTouch Dream")]
[assembly: AssemblyCopyright("Copyright (c) 2006-2015 MindTouch, Inc.")]
[assembly: AssemblyTrademark("")]
[assembly: AssemblyCulture("")]

Expand Down

0 comments on commit 03064da

Please sign in to comment.