refactoring; package updates; publish to test feed
343fdfdc
Labyrinth Apps
committed
95 changed files
ActorBase.cs
/LabApps.Actors.Core/ActorBase.cs-22+39
/LabApps.Actors.Core/ActorBase.cs
Add comment 15 protected readonly string _key;
Add comment 16 protected readonly IRuntime _runtime;
Add comment 17 protected readonly ITypedActorRef<TState> _ref;
Add comment 18 Plus   protected readonly IStateFactory<TState> _stateFactory;
Add comment 18 19
Add comment 19 20 // message sent sequence number
Add comment 20 21 // todo restore sequence on load
Add comment 26 27 public ITypedActorRef<TState> TypedRef => _ref;
Add comment 27 28 protected ILogger Logger => _runtime.Logger;
Add comment 28 29
Add comment 29 Minus   private bool _isDisposed;
Add comment 30 Plus   private volatile bool _isDisposed;
Add comment 30 31 protected virtual void Dispose(bool disposing) { }
Add comment 31 32 public void Dispose()
Add comment 32 33 {
Add comment 36 37 GC.SuppressFinalize(this);
Add comment 37 38 }
Add comment 38 39
Add comment 40 Plus   protected ActorBase(string key, IRuntime runtime)
Add comment 41 Plus   {
Add comment 42 Plus   _typeName = GetType().FullName;
Add comment 43 Plus   _key = key;
Add comment 44 Plus   _runtime = runtime;
Add comment 45 Plus   _ref = _runtime.GetTypedRef<TState>(_typeName, key);
Add comment 46 Plus   _stateFactory = _runtime.StateFactories.GetFactory<TState>();
Add comment 47 Plus   }
Add comment 48 Plus  
Add comment 39 49 // actor state
Add comment 40 50 private bool _initialized = false;
Add comment 41 Minus   protected TState _state = new TState();
Add comment 51 Plus   protected TState? _state = null;
Add comment 42 52
Add comment 43 Minus   protected virtual bool? OnCanPurge() => null;
Add comment 44 Minus   public bool IsEmpty() => OnCanPurge() ?? _state.IsEmpty();
Add comment 45 Minus  
Add comment 46 53 public void LoadState(string? stateTypeName, ReadOnlyMemory<byte> buffer)
Add comment 47 54 {
Add comment 48 55 if (buffer.IsEmpty) return;
Add comment 51 58 // todo state upgrade feature needed
Add comment 52 59 throw new NotSupportedException($"Cannot load state of type {stateTypeName}; exepcted type {typeof(TState).FullName}.");
Add comment 53 60 }
Add comment 54 Minus   _state.Rehydrate(buffer);
Add comment 61 Plus   _state = _stateFactory.CreateTypedState(buffer);
Add comment 55 62 }
Add comment 56 63
Add comment 64 Plus   protected virtual void OnException(Exception ex, string methodName)
Add comment 65 Plus   {
Add comment 66 Plus   }
Add comment 67 Plus   private void NotifyException(Exception ex, string methodName)
Add comment 68 Plus   {
Add comment 69 Plus   _runtime.Logger.LogError(ex, $"Unhandled exception in {GetType().FullName}.{methodName}()");
Add comment 70 Plus   OnException(ex, methodName);
Add comment 71 Plus   }
Add comment 57 72 public ReadOnlyMemory<byte> SaveState()
Add comment 58 73 {
Add comment 59 Minus   return _state.Dehydrate();
Add comment 74 Plus   try
Add comment 75 Plus   {
Add comment 76 Plus   return _state is null ? ReadOnlyMemory<byte>.Empty : _state.Dehydrate();
Add comment 77 Plus   }
Add comment 78 Plus   catch (Exception ex)
Add comment 79 Plus   {
Add comment 80 Plus   NotifyException(ex, nameof(SaveState));
Add comment 81 Plus   throw;
Add comment 60 82 }
Add comment 83 Plus   }
Add comment 61 84
Add comment 62 85 public void LoadEvents(IEnumerable<ReadOnlyMemory<byte>> buffers)
Add comment 63 86 {
Add comment 87 Plus   // todo
Add comment 64 88 }
Add comment 65 89
Add comment 66 90 public IEnumerable<ReadOnlyMemory<byte>> SaveEvents()
Add comment 72 96 }
Add comment 73 97 }
Add comment 74 98
Add comment 75 Minus   protected ActorBase(string key, IRuntime runtime)
Add comment 76 Minus   {
Add comment 77 Minus   _typeName = GetType().FullName;
Add comment 78 Minus   _key = key;
Add comment 79 Minus   _runtime = runtime;
Add comment 80 Minus   _ref = _runtime.GetTypedRef<TState>(_typeName, key);
Add comment 81 Minus   }
Add comment 82 Minus  
Add comment 83 Minus   public abstract TState OnInitialize(TState previous, IActorEvent @event, IActorRef sender);
Add comment 84 Minus   public abstract ValueTask<TState> OnReceiveAsync(TState previous, IActorEvent @event, IActorRef sender, int queueLength);
Add comment 99 Plus   public abstract TState? OnInitialize(TState? previous, IActorEvent @event, IActorRef sender);
Add comment 100 Plus   public abstract ValueTask<TState?> OnReceiveAsync(TState? previous, IActorEvent @event, IActorRef sender, int queueLength);
Add comment 85 101
Add comment 86 102 public async ValueTask ReceiveAsync(IActorEvent payload, IActorRef sender, bool cancelled, int queueLength)
Add comment 87 103 {
Add comment 104 Plus   try
Add comment 105 Plus   {
Add comment 88 106 switch (payload)
Add comment 89 107 {
Add comment 90 108 case null:
Add comment 96 114 sync.SetResult(_state);
Add comment 97 115 break;
Add comment 98 116 default:
Add comment 99 Minus   try
Add comment 100 Minus   {
Add comment 101 117 if (!cancelled)
Add comment 102 118 {
Add comment 103 119 if (!_initialized)
Add comment 107 123 }
Add comment 108 124 _state = await OnReceiveAsync(_state, payload, sender, queueLength).ConfigureAwait(false);
Add comment 109 125 }
Add comment 126 Plus   break;
Add comment 127 Plus   }
Add comment 110 128 }
Add comment 111 129 catch (Exception ex)
Add comment 112 130 {
Add comment 113 131 Logger.LogError(ex, "Unhandled error in {0}.OnReceiveAsync()", _typeName);
Add comment 114 132 }
Add comment 115 Minus   break;
Add comment 116 Minus   }
Add comment 117 133 }
Add comment 118 134
Add comment 119 135 // helpers
Add comment 123 139 target.Send(@event, _ref, sequence);
Add comment 124 140 }
Add comment 125 141
Add comment 126 Minus   protected void SendEventTo<TActor2>(string key, IActorEvent @event)
Add comment 142 Plus   protected void SendEventTo<TActor2>(string? key, IActorEvent @event)
Add comment 127 143 {
Add comment 144 Plus   if (key is null) throw new ArgumentNullException(nameof(key));
Add comment 128 145 var target = _runtime.GetRef(typeof(TActor2).FullName, key);
Add comment 129 146 SendEventTo(target, @event);
Add comment 130 147 }
ActorFactories.cs
/LabApps.Actors.Core/ActorFactories.cs-31+106
/LabApps.Actors.Core/ActorFactories.cs
Add comment 8
Add comment 9 namespace LabApps.Actors.Core
Add comment 10 {
Add comment 11 Minus   public sealed class ActorFactories : IActorFactories
Add comment 11 Plus   public sealed class FactoryBundle : IFactoryBundle
Add comment 12 {
Add comment 13 Minus   private readonly ImmutableDictionary<string, IActorFactory> _factories = ImmutableDictionary<string, IActorFactory>.Empty;
Add comment 13 Plus   private static IEnumerable<Assembly> BuiltinAssemblies()
Add comment 14 Plus   {
Add comment 15 Plus   yield return typeof(VoidActor).Assembly;
Add comment 16 Plus   }
Add comment 14 17
Add comment 15 Minus   public ActorFactories(params Assembly[] actorAssemblies)
Add comment 18 Plus   private static IEnumerable<Type> GetLoadableTypes(Assembly assembly)
Add comment 16 19 {
Add comment 17 Minus   var temp = ActorFactoryHelpers.GetActorFactories(actorAssemblies)
Add comment 18 Minus   .Select(f => new KeyValuePair<string, IActorFactory>(f.ActorType.FullName, f))
Add comment 19 Minus   .ToArray();
Add comment 20 Minus   _factories = ImmutableDictionary<string, IActorFactory>.Empty.AddRange(temp);
Add comment 20 Plus   // Algorithm from StackOverflow answer here:
Add comment 21 Plus   // http://stackoverflow.com/questions/7889228/how-to-prevent-reflectiontypeloadexception-when-calling-assembly-gettypes
Add comment 22 Plus  
Add comment 23 Plus   if (assembly is null) throw new ArgumentNullException(nameof(assembly));
Add comment 24 Plus   try
Add comment 25 Plus   {
Add comment 26 Plus   return assembly.DefinedTypes.Select(t => t.AsType());
Add comment 21 27 }
Add comment 28 Plus   catch (ReflectionTypeLoadException ex)
Add comment 29 Plus   {
Add comment 30 Plus   return ex.Types.Where(t => t != null);
Add comment 31 Plus   }
Add comment 32 Plus   }
Add comment 22 33
Add comment 23 Minus   public IEnumerable<IActorFactory> GetFactories()
Add comment 34 Plus   public IActorFactories ActorFactories { get; private set; }
Add comment 35 Plus  
Add comment 36 Plus   public IStateFactories StateFactories { get; private set; }
Add comment 37 Plus  
Add comment 38 Plus   public IEventFactories EventFactories { get; private set; }
Add comment 39 Plus  
Add comment 40 Plus   public FactoryBundle(params Type[] anchorTypes)
Add comment 41 Plus   {
Add comment 42 Plus   IEnumerable<Type> factoryTypes =
Add comment 43 Plus   BuiltinAssemblies()
Add comment 44 Plus   .Concat(anchorTypes.Select(t => t.Assembly))
Add comment 45 Plus   .Distinct()
Add comment 46 Plus   .SelectMany(assembly => GetLoadableTypes(assembly));
Add comment 47 Plus  
Add comment 48 Plus   // scan for factories
Add comment 49 Plus   List<IActorFactory> actorFactories = new List<IActorFactory>();
Add comment 50 Plus   List<IStateFactory> stateFactories = new List<IStateFactory>();
Add comment 51 Plus   List<IEventFactory> eventFactories = new List<IEventFactory>();
Add comment 52 Plus   foreach (Type factoryType in factoryTypes)
Add comment 53 Plus   {
Add comment 54 Plus   // actor factories
Add comment 55 Plus   if (typeof(IActorFactory).IsAssignableFrom(factoryType) && (!factoryType.IsAbstract))
Add comment 56 Plus   {
Add comment 57 Plus   var attr = factoryType.GetCustomAttribute<ActorFactoryAttribute>();
Add comment 58 Plus   if (attr != null && !attr.IsDisabled)
Add comment 59 Plus   {
Add comment 60 Plus   // factory must have parameterless constructor
Add comment 61 Plus   IActorFactory? factory = null;
Add comment 62 Plus   try
Add comment 63 Plus   {
Add comment 64 Plus   factory = (IActorFactory)Activator.CreateInstance(factoryType);
Add comment 65 Plus   }
Add comment 66 Plus   catch (MissingMethodException)
Add comment 67 Plus   {
Add comment 68 Plus   }
Add comment 69 Plus   if (!(factory is null))
Add comment 70 Plus   actorFactories.Add(factory);
Add comment 71 Plus   }
Add comment 72 Plus   }
Add comment 73 Plus   // state factories
Add comment 74 Plus   if (typeof(IStateFactory).IsAssignableFrom(factoryType) && (!factoryType.IsAbstract))
Add comment 75 Plus   {
Add comment 76 Plus   var attr = factoryType.GetCustomAttribute<StateFactoryAttribute>();
Add comment 77 Plus   if (attr != null && !attr.IsDisabled)
Add comment 78 Plus   {
Add comment 79 Plus   // factory must have parameterless constructor
Add comment 80 Plus   IStateFactory? factory = null;
Add comment 81 Plus   try
Add comment 82 Plus   {
Add comment 83 Plus   factory = (IStateFactory)Activator.CreateInstance(factoryType);
Add comment 84 Plus   }
Add comment 85 Plus   catch (MissingMethodException)
Add comment 24 86 {
Add comment 25 Minus   return _factories.Values;
Add comment 87 Plus   }
Add comment 88 Plus   if (!(factory is null))
Add comment 89 Plus   stateFactories.Add(factory);
Add comment 90 Plus   }
Add comment 26 91 }
Add comment 27 Minus  
Add comment 28 Minus   public IActorFactory GetFactory(string typeFullName)
Add comment 92 Plus   // event factories
Add comment 93 Plus   if (typeof(IEventFactory).IsAssignableFrom(factoryType) && (!factoryType.IsAbstract))
Add comment 94 Plus   {
Add comment 95 Plus   var attr = factoryType.GetCustomAttribute<EventFactoryAttribute>();
Add comment 96 Plus   if (attr != null && !attr.IsDisabled)
Add comment 97 Plus   {
Add comment 98 Plus   // factory must have parameterless constructor
Add comment 99 Plus   IEventFactory? factory = null;
Add comment 100 Plus   try
Add comment 29 101 {
Add comment 30 Minus   if (!_factories.TryGetValue(typeFullName, out var factory))
Add comment 102 Plus   factory = (IEventFactory)Activator.CreateInstance(factoryType);
Add comment 103 Plus   }
Add comment 104 Plus   catch (MissingMethodException)
Add comment 31 105 {
Add comment 32 Minus   throw new ArgumentException($"Type '{typeFullName}' is not a registered actor type", nameof(typeFullName));
Add comment 106 Plus   }
Add comment 107 Plus   if (!(factory is null))
Add comment 108 Plus   eventFactories.Add(factory);
Add comment 109 Plus   }
Add comment 33 110 }
Add comment 34 Minus   return factory;
Add comment 35 111 }
Add comment 36 112
Add comment 37 Minus   public IActorFactory GetFactory<TActor>()
Add comment 38 Minus   {
Add comment 39 Minus   return GetFactory(typeof(TActor).FullName);
Add comment 113 Plus   ActorFactories = new ActorFactories(actorFactories);
Add comment 114 Plus   StateFactories = new StateFactories(stateFactories);
Add comment 115 Plus   EventFactories = new EventFactories(eventFactories);
Add comment 40 116 }
Add comment 41 117
Add comment 118 Plus  
Add comment 42 119 }
Add comment 43 Minus   public sealed class EventFactories : IEventFactories
Add comment 120 Plus   internal sealed class ActorFactories : IActorFactories
Add comment 44 121 {
Add comment 45 Minus   private readonly ImmutableDictionary<string, IEventFactory> _factories = ImmutableDictionary<string, IEventFactory>.Empty;
Add comment 122 Plus   private readonly ImmutableDictionary<string, IActorFactory> _factories = ImmutableDictionary<string, IActorFactory>.Empty;
Add comment 46 123
Add comment 47 Minus   public EventFactories(params Assembly[] eventAssemblies)
Add comment 124 Plus   public ActorFactories(IEnumerable<IActorFactory> factories)
Add comment 48 125 {
Add comment 49 Minus   var temp = ActorFactoryHelpers.GetEventFactories(eventAssemblies)
Add comment 50 Minus   .Select(f => new KeyValuePair<string, IEventFactory>(f.EventType.FullName, f))
Add comment 51 Minus   .ToArray();
Add comment 52 Minus   _factories = ImmutableDictionary<string, IEventFactory>.Empty.AddRange(temp);
Add comment 126 Plus   _factories = ImmutableDictionary<string, IActorFactory>.Empty
Add comment 127 Plus   .AddRange(factories.Select(f => new KeyValuePair<string, IActorFactory>(f.ActorType.FullName, f)));
Add comment 53 128 }
Add comment 54 129
Add comment 55 Minus   public IEnumerable<IEventFactory> GetFactories()
Add comment 130 Plus   public IEnumerable<IActorFactory> GetFactories()
Add comment 56 131 {
Add comment 57 132 return _factories.Values;
Add comment 58 133 }
Add comment 59 134
Add comment 60 Minus   public IEventFactory GetFactory(string typeFullName)
Add comment 135 Plus   public IActorFactory GetFactory(string typeFullName)
Add comment 61 136 {
Add comment 62 Minus   if (!_factories.TryGetValue(typeFullName, out var Factory))
Add comment 137 Plus   if (!_factories.TryGetValue(typeFullName, out var factory))
Add comment 63 138 {
Add comment 64 Minus   throw new ArgumentException($"Type '{typeFullName}' is not a registered Event type", nameof(typeFullName));
Add comment 139 Plus   throw new ArgumentException($"No actor factory found for type '{typeFullName}'", nameof(typeFullName));
Add comment 65 140 }
Add comment 66 Minus   return Factory;
Add comment 141 Plus   return factory;
Add comment 67 142 }
Add comment 68 143
Add comment 69 Minus   public IEventFactory GetFactory<TEvent>()
Add comment 144 Plus   public IActorFactory GetFactory<TActor>()
Add comment 70 145 {
Add comment 71 Minus   return GetFactory(typeof(TEvent).FullName);
Add comment 146 Plus   return GetFactory(typeof(TActor).FullName);
Add comment 72 147 }
Add comment 73 148
Add comment 74 149 }
ActorFactoryAttribute.cs
/LabApps.Actors.Core/ActorFactoryAttribute.cs
/LabApps.Actors.Core/ActorFactoryAttribute.cs
ActorFactoryHelpers.cs
/LabApps.Actors.Core/ActorFactoryHelpers.cs
/LabApps.Actors.Core/ActorFactoryHelpers.cs
ActorQueueBase.cs
/LabApps.Actors.Core/ActorQueueBase.cs
/LabApps.Actors.Core/ActorQueueBase.cs
AsyncEventQueue.cs
/LabApps.Actors.Core/AsyncEventQueue.cs
/LabApps.Actors.Core/AsyncEventQueue.cs
CompletionActor.cs
/LabApps.Actors.Core/CompletionActor.cs
/LabApps.Actors.Core/CompletionActor.cs
CompletionEvent.cs
/LabApps.Actors.Core/CompletionEvent.cs
/LabApps.Actors.Core/CompletionEvent.cs
EventFactories.cs
/LabApps.Actors.Core/EventFactories.cs
/LabApps.Actors.Core/EventFactories.cs
EventFactoryAttribute.cs
/LabApps.Actors.Core/EventFactoryAttribute.cs
/LabApps.Actors.Core/EventFactoryAttribute.cs
GetStateRequest.cs
/LabApps.Actors.Core/GetStateRequest.cs
/LabApps.Actors.Core/GetStateRequest.cs
IActor.cs
/LabApps.Actors.Core/IActor.cs
/LabApps.Actors.Core/IActor.cs
IActorFactories.cs
/LabApps.Actors.Core/IActorFactories.cs
/LabApps.Actors.Core/IActorFactories.cs
IActorState.cs
/LabApps.Actors.Core/IActorState.cs
/LabApps.Actors.Core/IActorState.cs
IEventFactories.cs
/LabApps.Actors.Core/IEventFactories.cs
/LabApps.Actors.Core/IEventFactories.cs
IEventFactory.cs
/LabApps.Actors.Core/IEventFactory.cs
/LabApps.Actors.Core/IEventFactory.cs
IFactoryBundle.cs
/LabApps.Actors.Core/IFactoryBundle.cs
/LabApps.Actors.Core/IFactoryBundle.cs
IHydration.cs
/LabApps.Actors.Core/IHydration.cs
/LabApps.Actors.Core/IHydration.cs
IRuntime.cs
/LabApps.Actors.Core/IRuntime.cs
/LabApps.Actors.Core/IRuntime.cs
IStateFactories.cs
/LabApps.Actors.Core/IStateFactories.cs
/LabApps.Actors.Core/IStateFactories.cs
ITypedActorRef.cs
/LabApps.Actors.Core/ITypedActorRef.cs
/LabApps.Actors.Core/ITypedActorRef.cs
LabApps.Actors.Core.csproj
/LabApps.Actors.Core/LabApps.Actors.Core.csproj
/LabApps.Actors.Core/LabApps.Actors.Core.csproj
RuntimeBase.cs
/LabApps.Actors.Core/RuntimeBase.cs
/LabApps.Actors.Core/RuntimeBase.cs
StateFactories.cs
/LabApps.Actors.Core/StateFactories.cs
/LabApps.Actors.Core/StateFactories.cs
StateFactoryAttribute.cs
/LabApps.Actors.Core/StateFactoryAttribute.cs
/LabApps.Actors.Core/StateFactoryAttribute.cs
TimerActor.cs
/LabApps.Actors.Core/TimerActor.cs
/LabApps.Actors.Core/TimerActor.cs
TimerState.cs
/LabApps.Actors.Core/TimerState.cs
/LabApps.Actors.Core/TimerState.cs
VoidActor.cs
/LabApps.Actors.Core/VoidActor.cs
/LabApps.Actors.Core/VoidActor.cs
VoidEvent.cs
/LabApps.Actors.Core/VoidEvent.cs
/LabApps.Actors.Core/VoidEvent.cs
VoidEventFactory.cs
/LabApps.Actors.Core/VoidEventFactory.cs
/LabApps.Actors.Core/VoidEventFactory.cs
VoidState.cs
/LabApps.Actors.Core/VoidState.cs
/LabApps.Actors.Core/VoidState.cs
VoidStateFactory.cs
/LabApps.Actors.Core/VoidStateFactory.cs
/LabApps.Actors.Core/VoidStateFactory.cs
ActorAttributeTests.cs
/LabApps.Actors.Core.Tests/ActorAttributeTests.cs
/LabApps.Actors.Core.Tests/ActorAttributeTests.cs
GoodActor.cs
/LabApps.Actors.Core.Tests/GoodActor.cs
/LabApps.Actors.Core.Tests/GoodActor.cs
BoolEvent.cs
/LabApps.Actors.Events/BoolEvent.cs
/LabApps.Actors.Events/BoolEvent.cs
BoolEventFactory.cs
/LabApps.Actors.Events/BoolEventFactory.cs
/LabApps.Actors.Events/BoolEventFactory.cs
DoubleEvent.cs
/LabApps.Actors.Events/DoubleEvent.cs
/LabApps.Actors.Events/DoubleEvent.cs
DoubleEventFactory.cs
/LabApps.Actors.Events/DoubleEventFactory.cs
/LabApps.Actors.Events/DoubleEventFactory.cs
LabApps.Actors.Events.csproj
/LabApps.Actors.Events/LabApps.Actors.Events.csproj
/LabApps.Actors.Events/LabApps.Actors.Events.csproj
StringEvent.cs
/LabApps.Actors.Events/StringEvent.cs
/LabApps.Actors.Events/StringEvent.cs
StringEventFactory.cs
/LabApps.Actors.Events/StringEventFactory.cs
/LabApps.Actors.Events/StringEventFactory.cs
DomainEntityBase.cs
/LabApps.Actors.Runtime.AzureFn/DomainEntityBase.cs
/LabApps.Actors.Runtime.AzureFn/DomainEntityBase.cs
EntityRuntime.cs
/LabApps.Actors.Runtime.AzureFn/EntityRuntime.cs
/LabApps.Actors.Runtime.AzureFn/EntityRuntime.cs
IEntityActor.cs
/LabApps.Actors.Runtime.AzureFn/IEntityActor.cs
/LabApps.Actors.Runtime.AzureFn/IEntityActor.cs
LabApps.Actors.Runtime.AzureFn.csproj
/LabApps.Actors.Runtime.AzureFn/LabApps.Actors.Runtime.AzureFn.csproj
/LabApps.Actors.Runtime.AzureFn/LabApps.Actors.Runtime.AzureFn.csproj
TypedEntityActorRef.cs
/LabApps.Actors.Runtime.AzureFn/TypedEntityActorRef.cs
/LabApps.Actors.Runtime.AzureFn/TypedEntityActorRef.cs
CoyoteRuntime.cs
/LabApps.Actors.Runtime.Coyote/CoyoteRuntime.cs
/LabApps.Actors.Runtime.Coyote/CoyoteRuntime.cs
LabApps.Actors.Runtime.Coyote.csproj
/LabApps.Actors.Runtime.Coyote/LabApps.Actors.Runtime.Coyote.csproj
/LabApps.Actors.Runtime.Coyote/LabApps.Actors.Runtime.Coyote.csproj
TypedActorRef.cs
/LabApps.Actors.Runtime.Coyote/TypedActorRef.cs
/LabApps.Actors.Runtime.Coyote/TypedActorRef.cs
DaprRuntime.cs
/LabApps.Actors.Runtime.Dapr/DaprRuntime.cs
/LabApps.Actors.Runtime.Dapr/DaprRuntime.cs
LabApps.Actors.Runtime.Dapr.csproj
/LabApps.Actors.Runtime.Dapr/LabApps.Actors.Runtime.Dapr.csproj
/LabApps.Actors.Runtime.Dapr/LabApps.Actors.Runtime.Dapr.csproj
Acknowledgement.cs
/LabApps.Actors.Runtime.SelfHosted/Acknowledgement.cs
/LabApps.Actors.Runtime.SelfHosted/Acknowledgement.cs
ActorQueue.cs
/LabApps.Actors.Runtime.SelfHosted/ActorQueue.cs
/LabApps.Actors.Runtime.SelfHosted/ActorQueue.cs
LabApps.Actors.Runtime.SelfHosted.csproj
/LabApps.Actors.Runtime.SelfHosted/LabApps.Actors.Runtime.SelfHosted.csproj
/LabApps.Actors.Runtime.SelfHosted/LabApps.Actors.Runtime.SelfHosted.csproj
LocalRuntime.cs
/LabApps.Actors.Runtime.SelfHosted/LocalRuntime.cs
/LabApps.Actors.Runtime.SelfHosted/LocalRuntime.cs
TestRuntime.cs
/LabApps.Actors.Runtime.SelfHosted/TestRuntime.cs
/LabApps.Actors.Runtime.SelfHosted/TestRuntime.cs
TypedActorRef.cs
/LabApps.Actors.Runtime.SelfHosted/TypedActorRef.cs
/LabApps.Actors.Runtime.SelfHosted/TypedActorRef.cs
LabApps.Actors.Schemas.csproj
/LabApps.Actors.Schemas/LabApps.Actors.Schemas.csproj
/LabApps.Actors.Schemas/LabApps.Actors.Schemas.csproj
ActorFuncTests.cs
/LabApps.Actors.Tests/ActorFuncTests.cs
/LabApps.Actors.Tests/ActorFuncTests.cs
CounterActor.cs
/LabApps.Actors.Tests/CounterActor.cs
/LabApps.Actors.Tests/CounterActor.cs
CounterState.cs
/LabApps.Actors.Tests/CounterState.cs
/LabApps.Actors.Tests/CounterState.cs
DependencyInjectionTests.cs
/LabApps.Actors.Tests/DependencyInjectionTests.cs
/LabApps.Actors.Tests/DependencyInjectionTests.cs
GreeterActorTests.cs
/LabApps.Actors.Tests/GreeterActorTests.cs
/LabApps.Actors.Tests/GreeterActorTests.cs
LabApps.Actors.Tests.csproj
/LabApps.Actors.Tests/LabApps.Actors.Tests.csproj
/LabApps.Actors.Tests/LabApps.Actors.Tests.csproj
MultiRuntimeTests.cs
/LabApps.Actors.Tests/MultiRuntimeTests.cs
/LabApps.Actors.Tests/MultiRuntimeTests.cs
PersistenceTests.cs
/LabApps.Actors.Tests/PersistenceTests.cs
/LabApps.Actors.Tests/PersistenceTests.cs
PingActor.cs
/LabApps.Actors.Tests/PingActor.cs
/LabApps.Actors.Tests/PingActor.cs
PingEvent.cs
/LabApps.Actors.Tests/PingEvent.cs
/LabApps.Actors.Tests/PingEvent.cs
PingEventFactory.cs
/LabApps.Actors.Tests/PingEventFactory.cs
/LabApps.Actors.Tests/PingEventFactory.cs
PongActor.cs
/LabApps.Actors.Tests/PongActor.cs
/LabApps.Actors.Tests/PongActor.cs
StreamWriterActor.cs
/LabApps.Actors.Tests/StreamWriterActor.cs
/LabApps.Actors.Tests/StreamWriterActor.cs
TestActor.cs
/LabApps.Actors.Tests/TestActor.cs
/LabApps.Actors.Tests/TestActor.cs
TypedActorFuncTests.cs
/LabApps.Actors.Tests/TypedActorFuncTests.cs
/LabApps.Actors.Tests/TypedActorFuncTests.cs
TypedActorPerfTests.cs
/LabApps.Actors.Tests/TypedActorPerfTests.cs
/LabApps.Actors.Tests/TypedActorPerfTests.cs
DispatcherL0.cs
/Testing.Benchmarks/DispatcherL0.cs
/Testing.Benchmarks/DispatcherL0.cs
Testing.Benchmarks.csproj
/Testing.Benchmarks/Testing.Benchmarks.csproj
/Testing.Benchmarks/Testing.Benchmarks.csproj
Testing.Common.Messages.csproj
/Testing.Common.Messages/Testing.Common.Messages.csproj
/Testing.Common.Messages/Testing.Common.Messages.csproj
TestMessage.cs
/Testing.Common.Messages/TestMessage.cs
/Testing.Common.Messages/TestMessage.cs
TestActor.cs
/Testing.DomainA.Actors/TestActor.cs
/Testing.DomainA.Actors/TestActor.cs
TestClient.cs
/Testing.DomainA.Actors/TestClient.cs
/Testing.DomainA.Actors/TestClient.cs
TestClientState.cs
/Testing.DomainA.Actors/TestClientState.cs
/Testing.DomainA.Actors/TestClientState.cs
Testing.DomainA.Actors.csproj
/Testing.DomainA.Actors/Testing.DomainA.Actors.csproj
/Testing.DomainA.Actors/Testing.DomainA.Actors.csproj
DomainEntity.cs
/Testing.DomainA.AzureFn/DomainEntity.cs
/Testing.DomainA.AzureFn/DomainEntity.cs
GreeterActor.cs
/Testing.DomainB.Actors/GreeterActor.cs
/Testing.DomainB.Actors/GreeterActor.cs
TestActor.cs
/Testing.DomainB.Actors/TestActor.cs
/Testing.DomainB.Actors/TestActor.cs
TestServer.cs
/Testing.DomainB.Actors/TestServer.cs
/Testing.DomainB.Actors/TestServer.cs
DomainEntity.cs
/Testing.DomainB.AzureFn/DomainEntity.cs
/Testing.DomainB.AzureFn/DomainEntity.cs
TestServer.cs
/Testing.DomainB.Proxies/TestServer.cs
/Testing.DomainB.Proxies/TestServer.cs
GrpcClient.cs
/Testing.gRPC.Client/GrpcClient.cs
/Testing.gRPC.Client/GrpcClient.cs
Testing.gRPC.Client.csproj
/Testing.gRPC.Client/Testing.gRPC.Client.csproj
/Testing.gRPC.Client/Testing.gRPC.Client.csproj
Testing.gRPC.Common.csproj
/Testing.gRPC.Common/Testing.gRPC.Common.csproj
/Testing.gRPC.Common/Testing.gRPC.Common.csproj
Program.cs
/Testing.gRPC.CoreCli/Program.cs
/Testing.gRPC.CoreCli/Program.cs
ActorService.cs
/Testing.gRPC.Server/Services/ActorService.cs
/Testing.gRPC.Server/Services/ActorService.cs
Program.cs
/Testing.SelfHost/Program.cs
/Testing.SelfHost/Program.cs
publish.cmd
/publish.cmd
/publish.cmd