Skip to content

Commit

Permalink
Fix trigger handling check with async version
Browse files Browse the repository at this point in the history
  • Loading branch information
prasannavl committed May 1, 2015
1 parent feae6bf commit 04b6582
Show file tree
Hide file tree
Showing 9 changed files with 44 additions and 19 deletions.
4 changes: 2 additions & 2 deletions LiquidState/Machines/AsyncStateMachine.cs
Original file line number Diff line number Diff line change
Expand Up @@ -41,9 +41,9 @@ public event Action<TState, TState> StateChanged
remove { machine.StateChanged -= value; }
}

public bool CanHandleTrigger(TTrigger trigger)
public Task<bool> CanHandleTriggerAsync(TTrigger trigger)
{
return machine.CanHandleTrigger(trigger);
return machine.CanHandleTriggerAsync(trigger);
}

public bool CanTransitionTo(TState state)
Expand Down
16 changes: 13 additions & 3 deletions LiquidState/Machines/AwaitableStateMachine.cs
Original file line number Diff line number Diff line change
Expand Up @@ -61,14 +61,24 @@ public async Task MoveToState(TState state, StateTransitionOption option = State
}
}

public bool CanHandleTrigger(TTrigger trigger)
public async Task<bool> CanHandleTriggerAsync(TTrigger trigger)
{
foreach (var current in CurrentStateRepresentation.Triggers)
{
if (current.Trigger.Equals(trigger))
return true;
{
if ((CheckFlag(current.TransitionFlags, AwaitableStateTransitionFlag.TriggerPredicateReturnsTask)))
{
var predicate = current.ConditionalTriggerPredicate as Func<Task<bool>>;
return predicate == null || await predicate();
}
else
{
var predicate = current.ConditionalTriggerPredicate as Func<bool>;
return predicate == null || predicate();
}
}
}

return false;
}

Expand Down
4 changes: 2 additions & 2 deletions LiquidState/Machines/AwaitableStateMachineWithScheduler.cs
Original file line number Diff line number Diff line change
Expand Up @@ -42,9 +42,9 @@ public event Action<TState, TState> StateChanged
remove { machine.StateChanged -= value; }
}

public bool CanHandleTrigger(TTrigger trigger)
public Task<bool> CanHandleTriggerAsync(TTrigger trigger)
{
return machine.CanHandleTrigger(trigger);
return machine.CanHandleTriggerAsync(trigger);
}

public bool CanTransitionTo(TState state)
Expand Down
7 changes: 5 additions & 2 deletions LiquidState/Machines/BlockingStateMachine.cs
Original file line number Diff line number Diff line change
Expand Up @@ -69,9 +69,12 @@ public bool CanHandleTrigger(TTrigger trigger)
{
foreach (var current in CurrentStateRepresentation.Triggers)
{
if (current.Trigger.Equals(trigger)) return true;
if (current.Trigger.Equals(trigger))
{
var predicate = current.ConditionalTriggerPredicate;
return predicate == null || predicate();
}
}

return false;
}

Expand Down
4 changes: 2 additions & 2 deletions LiquidState/Machines/IAwaitableStateMachine.cs
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ public interface IAwaitableStateMachine<TState, TTrigger>
bool IsInTransition { get; }
event Action<TState, TState> StateChanged;
event Action<TTrigger, TState> UnhandledTriggerExecuted;
bool CanHandleTrigger(TTrigger trigger);
Task<bool> CanHandleTriggerAsync(TTrigger trigger);
bool CanTransitionTo(TState state);

Task FireAsync<TArgument>(ParameterizedTrigger<TTrigger, TArgument> parameterizedTrigger,
Expand All @@ -37,7 +37,7 @@ public abstract class AwaitableStateMachineContract<T, U> : IAwaitableStateMachi
{
public abstract event Action<U, T> UnhandledTriggerExecuted;
public abstract event Action<T, T> StateChanged;
public abstract bool CanHandleTrigger(U trigger);
public abstract Task<bool> CanHandleTriggerAsync(U trigger);
public abstract bool CanTransitionTo(T state);
public abstract Task MoveToState(T state, StateTransitionOption option = StateTransitionOption.Default);
public abstract void Pause();
Expand Down
7 changes: 5 additions & 2 deletions LiquidState/Machines/StateMachine.cs
Original file line number Diff line number Diff line change
Expand Up @@ -81,9 +81,12 @@ public bool CanHandleTrigger(TTrigger trigger)
{
foreach (var current in CurrentStateRepresentation.Triggers)
{
if (current.Trigger.Equals(trigger)) return true;
if (current.Trigger.Equals(trigger))
{
var predicate = current.ConditionalTriggerPredicate;
return predicate == null || predicate();
}
}

return false;
}

Expand Down
13 changes: 11 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -93,7 +93,7 @@ Benchmarking code, and libraries at: [https://github.com/prasannavl/Benchmarks](
TState CurrentState { get; }
bool IsEnabled { get; }
bool IsInTransition { get; }
bool CanHandleTrigger(TTrigger trigger);
Task<bool> CanHandleTriggerAsync(TTrigger trigger);
bool CanTransitionTo(TState state);

Task FireAsync<TArgument>(
Expand Down Expand Up @@ -370,4 +370,13 @@ Now, let's take the same dumb, and terrible example, but now do it **asynchronou

######v.4.1.1

- Fix CanHandleTrigger()
- Fix CanHandleTrigger()

######v.5.0.0

- Add `Task<bool> CanHandleTriggerAsync(TTrigger trigger);` to IAwaitableStateMachine
- Make CanHandleTrigger check for predicates, if present.

Breaking changes:

- Removed `bool CanHandleTrigger(TTrigger trigger)` from it IAwaitableStateMachine. Has been replaced by the async version.
6 changes: 3 additions & 3 deletions VersionInfo.cs
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
using System.Reflection;

[assembly: AssemblyVersion("4.1.1")]
[assembly: AssemblyFileVersion("4.1.1")]
[assembly: AssemblyInformationalVersion("4.1.1")]
[assembly: AssemblyVersion("5.0.0")]
[assembly: AssemblyFileVersion("5.0.0")]
[assembly: AssemblyInformationalVersion("5.0.0")]
2 changes: 1 addition & 1 deletion appveyor.yml
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
version: '4.1.1.{build}'
version: '5.0.0.{build}'
branches:
only:
- master
Expand Down

0 comments on commit 04b6582

Please sign in to comment.