Skip to content

Commit

Permalink
Added shorthand for publishing void messages.
Browse files Browse the repository at this point in the history
  • Loading branch information
thegoldenmule committed Dec 14, 2017
1 parent cb39d86 commit 4a95c47
Show file tree
Hide file tree
Showing 5 changed files with 50 additions and 46 deletions.
5 changes: 5 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
.vs
.gradle
bin/
obj/
*.*~
19 changes: 19 additions & 0 deletions CreateAR.Commons.Unity.Messaging.Test/MessageRouter_Tests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -391,6 +391,25 @@ public void SubscribeUnsubscribeAll()
Assert.AreEqual(1, called);
}

[Test]
public void PublishVoid()
{
var called = false;

_router.Subscribe(
MESSAGE_TYPE_A,
(received, unsub) =>
{
called = true;

Assert.AreSame(Async.Void.Instance, received);
});

_router.Publish(MESSAGE_TYPE_A);

Assert.IsTrue(called);
}

[Test]
public void Consume()
{
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,14 +4,14 @@
<TargetFramework>net35</TargetFramework>
<AssemblyName>CreateAR.Commons.Unity.Messaging</AssemblyName>
<RootNamespace>CreateAR.Commons.Unity.Messaging</RootNamespace>
<AssemblyVersion>0.1.0</AssemblyVersion>
<Version>0.1.0</Version>
<AssemblyVersion>0.1.1</AssemblyVersion>
<Version>0.1.1</Version>
<Description>For internal pub/sub.</Description>
<Copyright>Copyright © 2017 CreateAR</Copyright>
<Authors>CreateAR</Authors>
<IncludeSymbols>True</IncludeSymbols>
<PackageReleaseNotes>Moved out of spireplayer.</PackageReleaseNotes>
<FileVersion>0.1.0</FileVersion>
<PackageReleaseNotes>Added shorthand for sending void events.</PackageReleaseNotes>
<FileVersion>0.1.1</FileVersion>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|AnyCPU'">
<DebugType>full</DebugType>
Expand Down
9 changes: 8 additions & 1 deletion CreateAR.Commons.Unity.Messaging/IMessageRouter.cs
Original file line number Diff line number Diff line change
Expand Up @@ -60,14 +60,21 @@ Action SubscribeOnce(
Action SubscribeAll(Action<object> subscriber);

/// <summary>
/// Publishes a method that will call subscribers of this message type.
/// Publishes a message that will call subscribers of this message type.
/// </summary>
/// <param name="messageType">The message type to publish to.</param>
/// <param name="message">The message to publish.</param>
void Publish(
int messageType,
object message);

/// <summary>
/// Publishes a Void message that will call subscribers of this message
/// type.
/// </summary>
/// <param name="messageType">The message type to publish to.</param>
void Publish(int messageType);

/// <summary>
/// Consumes a message, preventing further subscriptions to be called.
/// </summary>
Expand Down
55 changes: 14 additions & 41 deletions CreateAR.Commons.Unity.Messaging/MessageRouter.cs
Original file line number Diff line number Diff line change
Expand Up @@ -19,24 +19,15 @@ public class MessageRouter : IMessageRouter
/// </summary>
private readonly List<MessageSubscriberGroup> _groups = new List<MessageSubscriberGroup>();

/// <summary>
/// Subscribes to a specific messageType.
/// </summary>
/// <param name="messageType">The messageType to subscribe to.</param>
/// <param name="subscriber">The subscriber to be called.</param>
/// <inheritdoc cref="IMessageRouter"/>
public void Subscribe(
int messageType,
Action<object, Action> subscriber)
{
Group(messageType).AddSubscriber(subscriber);
}

/// <summary>
/// Subscribes to a specific messageType and returns a method to unsubscribe.
/// </summary>
/// <param name="messageType">The messageType to subscribe to.</param>
/// <param name="subscriber">The subscriber to call.</param>
/// <returns></returns>
/// <inheritdoc cref="IMessageRouter"/>
public Action Subscribe(
int messageType,
Action<object> subscriber)
Expand All @@ -45,26 +36,15 @@ public Action Subscribe(
.AddSubscriber((message, unsub) => subscriber(message));
}

/// <summary>
/// Subscribes to a specific messageType once and only once. When the
/// first message is received, the subscriber is immediately unsubscribed.
/// </summary>
/// <param name="messageType">The messageType to subscribe to.</param>
/// <param name="subscriber">The subscriber to call.</param>
/// <inheritdoc cref="IMessageRouter"/>
public void SubscribeOnce(
int messageType,
Action<object, Action> subscriber)
{
Group(messageType).AddSubscriber(subscriber, true);
}

/// <summary>
/// Subscribes to a specific messageType once and only once and returns
/// a method to unsubscribe. When the first message is received, the
/// subscriber is immediately unsubscribed.
/// </summary>
/// <param name="messageType">The messageType to subscribe to.</param>
/// <param name="subscriber">The subscriber to call.</param>
/// <inheritdoc cref="IMessageRouter"/>
public Action SubscribeOnce(
int messageType,
Action<object> subscriber)
Expand All @@ -73,29 +53,19 @@ public Action SubscribeOnce(
.AddSubscriber((message, unsub) => subscriber(message), true);
}

/// <summary>
/// Subscribes to all message types.
/// </summary>
/// <param name="subscriber">The subscriber to call.</param>
/// <inheritdoc cref="IMessageRouter"/>
public void SubscribeAll(Action<object, Action> subscriber)
{
_all.AddSubscriber(subscriber);
}

/// <summary>
/// Subscribes to all message types and returns a method for unsubscribing.
/// </summary>
/// <param name="subscriber">The subscriber to call.</param>
/// <inheritdoc cref="IMessageRouter"/>
public Action SubscribeAll(Action<object> subscriber)
{
return _all.AddSubscriber((message, unsub) => subscriber(message));
}

/// <summary>
/// Publishes a method that will call subscribers of this message type.
/// </summary>
/// <param name="messageType">The message type to publish to.</param>
/// <param name="message">The message to publish.</param>
/// <inheritdoc cref="IMessageRouter"/>
public void Publish(
int messageType,
object message)
Expand Down Expand Up @@ -123,10 +93,13 @@ public void Publish(
}
}

/// <summary>
/// Consumes a message, preventing further subscriptions to be called.
/// </summary>
/// <param name="message">The message to consume.</param>
/// <inheritdoc cref="IMessageRouter"/>
public void Publish(int messageType)
{
Publish(messageType, Async.Void.Instance);
}

/// <inheritdoc cref="IMessageRouter"/>
public void Consume(object message)
{
for (int i = 0, len = _groups.Count; i < len; i++)
Expand Down

0 comments on commit 4a95c47

Please sign in to comment.