23 changed files
LabApps.Actors.Client.gRPC | ||
actors.proto | ||
GrpcClient.cs | ||
LabApps.Actors.Client.gRPC.csproj | ||
LabApps.Actors.Common.AzFn | ||
Constants.cs | ||
LabApps.Actors.Common.AzFn.csproj | ||
LabApps.Actors.Runtime.AzureFn | ||
DomainEntityBase.cs | ||
EntityActorRef.cs | ||
EntityRuntime.cs | ||
IEntityActor.cs | ||
LabApps.Actors.Runtime.AzureFn.csproj | ||
TypedEntityActorRef.cs | ||
LabApps.Actors.Server.gRPC | ||
actors.proto | ||
ActorService.cs | ||
LabApps.Actors.Server.gRPC.csproj | ||
LabApps.Actors.Testing2.gRPCCli | ||
AzFnClient.cs | ||
LabApps.Actors.Testing2.gRPCCli.csproj | ||
Program.cs | ||
LabApps.Actors.Testing2.gRPCServer | ||
appsettings.Development.json | ||
appsettings.json | ||
LabApps.Actors.Testing2.gRPCServer.csproj | ||
Program.cs | ||
Startup.cs | ||
Actors.sln | ||
Add comment 1 Minus syntax = "proto3";
Add comment 2 Minus
Add comment 3 Minus option csharp_namespace = "LabApps.Actors.Client.gRPC";
Add comment 4 Minus
Add comment 5 Minus package actors_grpc;
Add comment 6 Minus
Add comment 7 Minus service ActorIO {
Add comment 8 Minus rpc UnaryPump(PumpRequest) returns (PumpResponse);
Add comment 9 Minus }
Add comment 10 Minus
Add comment 11 Minus message FaultDetail {
Add comment 12 Minus string FaultText = 1;
Add comment 13 Minus string FaultType = 2;
Add comment 14 Minus }
Add comment 15 Minus
Add comment 16 Minus message PumpRequest {
Add comment 17 Minus string SessionId = 1;
Add comment 18 Minus bytes Buffer = 2;
Add comment 19 Minus }
Add comment 20 Minus
Add comment 21 Minus message PumpResponse {
Add comment 22 Minus string SessionId = 1;
Add comment 23 Minus bytes Buffer = 2;
Add comment 24 Minus FaultDetail Fault = 3;
Add comment 25 Minus }
Add comment 26 Minus
GrpcClient.cs
/LabApps.Actors.Client.gRPC/GrpcClient.cs-66/LabApps.Actors.Client.gRPC/GrpcClient.cs
Add comment 1 Minus using Datafac;
Add comment 2 Minus using Google.Protobuf;
Add comment 3 Minus using Grpc.Net.Client;
Add comment 4 Minus using LabApps.Actors.Events.MsgPack;
Add comment 5 Minus using LabApps.Types.Memory;
Add comment 6 Minus using System;
Add comment 7 Minus using System.Text;
Add comment 8 Minus using System.Threading.Tasks;
Add comment 9 Minus
Add comment 10 Minus namespace LabApps.Actors.Client.gRPC
Add comment 11 Minus {
Add comment 12 Minus public interface IActorClient : IDisposable
Add comment 13 Minus {
Add comment 14 Minus ValueTask<SerializedEvent?> Pump(Guid sessionId, SerializedEvent? outgoing);
Add comment 15 Minus }
Add comment 16 Minus public sealed class GrpcClient : IActorClient
Add comment 17 Minus {
Add comment 18 Minus private readonly GrpcChannel _channel;
Add comment 19 Minus private readonly ActorIO.ActorIOClient _client;
Add comment 20 Minus private readonly IDataFactories _factories;
Add comment 21 Minus
Add comment 22 Minus public GrpcClient(string address, IDataFactories factories)
Add comment 23 Minus {
Add comment 24 Minus _channel = GrpcChannel.ForAddress(address);
Add comment 25 Minus _client = new ActorIO.ActorIOClient(_channel);
Add comment 26 Minus _factories = factories;
Add comment 27 Minus }
Add comment 28 Minus
Add comment 29 Minus private volatile bool _disposed = false;
Add comment 30 Minus public void Dispose()
Add comment 31 Minus {
Add comment 32 Minus if (_disposed) return;
Add comment 33 Minus _disposed = true;
Add comment 34 Minus _channel.Dispose();
Add comment 35 Minus }
Add comment 36 Minus
Add comment 37 Minus private static void ThrowIfFaulted(FaultDetail fault)
Add comment 38 Minus {
Add comment 39 Minus if (!(fault is null))
Add comment 40 Minus {
Add comment 41 Minus var message = new StringBuilder();
Add comment 42 Minus message.AppendLine("An unhandled exception occurred on the server:");
Add comment 43 Minus message.AppendLine(" Exception type: "); message.AppendLine(fault.FaultType);
Add comment 44 Minus message.AppendLine(" Exception text: "); message.AppendLine(fault.FaultText);
Add comment 45 Minus throw new Exception(message.ToString());
Add comment 46 Minus }
Add comment 47 Minus }
Add comment 48 Minus
Add comment 49 Minus public async ValueTask<SerializedEvent?> Pump(Guid sessionId, SerializedEvent? outgoing)
Add comment 50 Minus {
Add comment 51 Minus var pumpRequest = new PumpRequest()
Add comment 52 Minus {
Add comment 53 Minus SessionId = sessionId.ToString("N"),
Add comment 54 Minus Buffer = outgoing is null ? null : ByteString.CopyFrom(MsgPackHelper<SerializedEvent>.Serialize(outgoing)),
Add comment 55 Minus };
Add comment 56 Minus var pumpResponse = await _client.UnaryPumpAsync(pumpRequest);
Add comment 57 Minus ThrowIfFaulted(pumpResponse.Fault);
Add comment 58 Minus var buffer = pumpResponse.Buffer;
Add comment 59 Minus return buffer is null
Add comment 60 Minus ? null
Add comment 61 Minus : buffer.IsEmpty
Add comment 62 Minus ? null
Add comment 63 Minus : MsgPackHelper<SerializedEvent>.Deserialize(Block.Wrap(buffer.Memory));
Add comment 64 Minus }
Add comment 65 Minus }
Add comment 66 Minus }
LabApps.Actors.Client.gRPC.csproj
/LabApps.Actors.Client.gRPC/LabApps.Actors.Client.gRPC.csproj-58/LabApps.Actors.Client.gRPC/LabApps.Actors.Client.gRPC.csproj
Add comment 1 Minus <Project Sdk="Microsoft.NET.Sdk">
Add comment 2 Minus
Add comment 3 Minus <PropertyGroup>
Add comment 4 Minus <Description>gRPC client for actors.</Description>
Add comment 5 Minus <TargetFrameworks>netstandard2.0;net6.0</TargetFrameworks>
Add comment 6 Minus <Nullable>enable</Nullable>
Add comment 7 Minus <WarningsAsErrors>nullable</WarningsAsErrors>
Add comment 8 Minus <LangVersion>latest</LangVersion>
Add comment 9 Minus <Company>MetaFac</Company>
Add comment 10 Minus <Product>Actors</Product>
Add comment 11 Minus <PackageLicenseUrl></PackageLicenseUrl>
Add comment 12 Minus <Copyright>Copyright (c) 2022 MetaFac</Copyright>
Add comment 13 Minus <Authors>MetaFac Contributors</Authors>
Add comment 14 Minus <PackageProjectUrl>https://dev.azure.com/labapps21/LAP</PackageProjectUrl>
Add comment 15 Minus <RepositoryUrl>https://dev.azure.com/labapps21/LAP/_git/Actors</RepositoryUrl>
Add comment 16 Minus <RepositoryType>Git</RepositoryType>
Add comment 17 Minus <PackageLicenseExpression>Apache-2.0</PackageLicenseExpression>
Add comment 18 Minus <GeneratePackageOnBuild>true</GeneratePackageOnBuild>
Add comment 19 Minus <PackageRequireLicenseAcceptance>False</PackageRequireLicenseAcceptance>
Add comment 20 Minus <SignAssembly>true</SignAssembly>
Add comment 21 Minus <AssemblyOriginatorKeyFile>..\SigningKey.snk</AssemblyOriginatorKeyFile>
Add comment 22 Minus <PackageTags>actors thread concurrency labapps</PackageTags>
Add comment 23 Minus <PackageReadmeFile>README.md</PackageReadmeFile>
Add comment 24 Minus <IncludeSymbols>true</IncludeSymbols>
Add comment 25 Minus <SymbolPackageFormat>snupkg</SymbolPackageFormat>
Add comment 26 Minus </PropertyGroup>
Add comment 27 Minus
Add comment 28 Minus <ItemGroup>
Add comment 29 Minus <None Include="..\README.md">
Add comment 30 Minus <Pack>True</Pack>
Add comment 31 Minus <PackagePath>\</PackagePath>
Add comment 32 Minus </None>
Add comment 33 Minus </ItemGroup>
Add comment 34 Minus
Add comment 35 Minus <ItemGroup>
Add comment 36 Minus <PackageReference Include="Google.Protobuf" Version="3.20.1" />
Add comment 37 Minus <PackageReference Include="Grpc.Net.Client" Version="2.46.0" />
Add comment 38 Minus <PackageReference Include="Grpc.Tools" Version="2.46.1">
Add comment 39 Minus <PrivateAssets>all</PrivateAssets>
Add comment 40 Minus <IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
Add comment 41 Minus </PackageReference>
Add comment 42 Minus <PackageReference Include="Nerdbank.GitVersioning" Version="3.5.107">
Add comment 43 Minus <PrivateAssets>all</PrivateAssets>
Add comment 44 Minus <IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
Add comment 45 Minus </PackageReference>
Add comment 46 Minus </ItemGroup>
Add comment 47 Minus
Add comment 48 Minus <ItemGroup>
Add comment 49 Minus <ProjectReference Include="..\LabApps.Actors.Core\LabApps.Actors.Core.csproj" />
Add comment 50 Minus <ProjectReference Include="..\LabApps.Actors.Events\LabApps.Actors.Events.csproj" />
Add comment 51 Minus </ItemGroup>
Add comment 52 Minus
Add comment 53 Minus <ItemGroup>
Add comment 54 Minus <Protobuf Include="actors.proto" GrpcServices="Client" />
Add comment 55 Minus </ItemGroup>
Add comment 56 Minus
Add comment 57 Minus </Project>
Add comment 58 Minus
Add comment 1 Minus namespace LabApps.Actors.Common.AzFn
Add comment 2 Minus {
Add comment 3 Minus public static class Constants
Add comment 4 Minus {
Add comment 5 Minus public static class Functions
Add comment 6 Minus {
Add comment 7 Minus public const string UnaryPump = nameof(UnaryPump);
Add comment 8 Minus }
Add comment 9 Minus }
Add comment 10 Minus }
LabApps.Actors.Common.AzFn.csproj
/LabApps.Actors.Common.AzFn/LabApps.Actors.Common.AzFn.csproj-43/LabApps.Actors.Common.AzFn/LabApps.Actors.Common.AzFn.csproj
Add comment 1 Minus <Project Sdk="Microsoft.NET.Sdk">
Add comment 2 Minus
Add comment 3 Minus <PropertyGroup>
Add comment 4 Minus <Description>Common types for Azure Functions actors</Description>
Add comment 5 Minus <TargetFrameworks>netstandard2.0;net6.0</TargetFrameworks>
Add comment 6 Minus <Nullable>enable</Nullable>
Add comment 7 Minus <WarningsAsErrors>nullable</WarningsAsErrors>
Add comment 8 Minus <LangVersion>latest</LangVersion>
Add comment 9 Minus <Company>MetaFac</Company>
Add comment 10 Minus <Product>Actors</Product>
Add comment 11 Minus <PackageLicenseUrl></PackageLicenseUrl>
Add comment 12 Minus <Copyright>Copyright (c) 2022 MetaFac</Copyright>
Add comment 13 Minus <Authors>MetaFac Contributors</Authors>
Add comment 14 Minus <PackageProjectUrl>https://dev.azure.com/labapps21/LAP</PackageProjectUrl>
Add comment 15 Minus <RepositoryUrl>https://dev.azure.com/labapps21/LAP/_git/Actors</RepositoryUrl>
Add comment 16 Minus <RepositoryType>Git</RepositoryType>
Add comment 17 Minus <PackageLicenseExpression>Apache-2.0</PackageLicenseExpression>
Add comment 18 Minus <GeneratePackageOnBuild>true</GeneratePackageOnBuild>
Add comment 19 Minus <PackageRequireLicenseAcceptance>False</PackageRequireLicenseAcceptance>
Add comment 20 Minus <SignAssembly>true</SignAssembly>
Add comment 21 Minus <AssemblyOriginatorKeyFile>..\SigningKey.snk</AssemblyOriginatorKeyFile>
Add comment 22 Minus <PackageTags>actors thread concurrency labapps</PackageTags>
Add comment 23 Minus <PackageReadmeFile>README.md</PackageReadmeFile>
Add comment 24 Minus <IncludeSymbols>true</IncludeSymbols>
Add comment 25 Minus <SymbolPackageFormat>snupkg</SymbolPackageFormat>
Add comment 26 Minus </PropertyGroup>
Add comment 27 Minus
Add comment 28 Minus <ItemGroup>
Add comment 29 Minus <None Include="..\README.md">
Add comment 30 Minus <Pack>True</Pack>
Add comment 31 Minus <PackagePath>\</PackagePath>
Add comment 32 Minus </None>
Add comment 33 Minus </ItemGroup>
Add comment 34 Minus
Add comment 35 Minus <ItemGroup>
Add comment 36 Minus <PackageReference Include="Nerdbank.GitVersioning" Version="3.5.107">
Add comment 37 Minus <PrivateAssets>all</PrivateAssets>
Add comment 38 Minus <IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
Add comment 39 Minus </PackageReference>
Add comment 40 Minus </ItemGroup>
Add comment 41 Minus
Add comment 42 Minus </Project>
Add comment 43 Minus
DomainEntityBase.cs
/LabApps.Actors.Runtime.AzureFn/DomainEntityBase.cs-68/LabApps.Actors.Runtime.AzureFn/DomainEntityBase.cs
Add comment 1 Minus using Datafac;
Add comment 2 Minus using LabApps.Actors.Core;
Add comment 3 Minus using LabApps.Platform.Abstractions;
Add comment 4 Minus using LabApps.Types.Memory;
Add comment 5 Minus using Microsoft.Extensions.Logging;
Add comment 6 Minus using Newtonsoft.Json;
Add comment 7 Minus using System;
Add comment 8 Minus
Add comment 9 Minus namespace LabApps.Actors.Runtime.AzureFn
Add comment 10 Minus {
Add comment 11 Minus [JsonObject(MemberSerialization.OptIn)]
Add comment 12 Minus public abstract class DomainEntityBase : IEntityActor
Add comment 13 Minus {
Add comment 14 Minus protected static IActorFactories? _actorFactories;
Add comment 15 Minus protected static IDataFactories? _dataFactories;
Add comment 16 Minus protected static ITimeOfDayClock? _timeOfDayClock;
Add comment 17 Minus
Add comment 18 Minus [JsonIgnore]
Add comment 19 Minus private readonly ILogger _logger;
Add comment 20 Minus
Add comment 21 Minus [JsonProperty("stateType")]
Add comment 22 Minus public string? StateTypeName { get; set; } = null;
Add comment 23 Minus
Add comment 24 Minus [JsonProperty("state")]
Add comment 25 Minus public byte[]? StateBytes { get; set; } = null;
Add comment 26 Minus
Add comment 27 Minus [JsonIgnore]
Add comment 28 Minus private IActor? _actor = null;
Add comment 29 Minus
Add comment 30 Minus protected DomainEntityBase(ILogger logger)
Add comment 31 Minus {
Add comment 32 Minus _logger = logger;
Add comment 33 Minus }
Add comment 34 Minus
Add comment 35 Minus public void Submit(ActorAddress address, object message, IActorRef sender)
Add comment 36 Minus {
Add comment 37 Minus try
Add comment 38 Minus {
Add comment 39 Minus if (_actorFactories is null)
Add comment 40 Minus throw new ArgumentNullException(nameof(_actorFactories), "Is your static constructor correct?");
Add comment 41 Minus if (_dataFactories is null)
Add comment 42 Minus throw new ArgumentNullException(nameof(_dataFactories), "Is your static constructor correct?");
Add comment 43 Minus if (_timeOfDayClock is null)
Add comment 44 Minus throw new ArgumentNullException(nameof(_timeOfDayClock), "Is your static constructor correct?");
Add comment 45 Minus
Add comment 46 Minus if (_actor is null)
Add comment 47 Minus {
Add comment 48 Minus var runtime = new EntityRuntime(_logger, _actorFactories, _dataFactories, _timeOfDayClock);
Add comment 49 Minus _actor = runtime.GetOrAdd(address);
Add comment 50 Minus if (_actor.HasState)
Add comment 51 Minus {
Add comment 52 Minus _actor.LoadState(StateTypeName, new Block(StateBytes));
Add comment 53 Minus }
Add comment 54 Minus }
Add comment 55 Minus _actor.ReceiveAsync(message, sender, false, 0).ConfigureAwait(false).GetAwaiter().GetResult();
Add comment 56 Minus if (_actor.HasState)
Add comment 57 Minus {
Add comment 58 Minus StateBytes = _actor.SaveState().Memory.ToArray();
Add comment 59 Minus }
Add comment 60 Minus }
Add comment 61 Minus catch (Exception e)
Add comment 62 Minus {
Add comment 63 Minus _logger.LogError(e, $"Actor ({address}) failed to process event ({message.GetType().FullName}) from ({sender.Address})");
Add comment 64 Minus }
Add comment 65 Minus }
Add comment 66 Minus
Add comment 67 Minus }
Add comment 68 Minus }
EntityActorRef.cs
/LabApps.Actors.Runtime.AzureFn/EntityActorRef.cs/LabApps.Actors.Runtime.AzureFn/EntityActorRef.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
ActorService.cs
/LabApps.Actors.Server.gRPC/ActorService.cs/LabApps.Actors.Server.gRPC/ActorService.cs
LabApps.Actors.Server.gRPC.csproj
/LabApps.Actors.Server.gRPC/LabApps.Actors.Server.gRPC.csproj/LabApps.Actors.Server.gRPC/LabApps.Actors.Server.gRPC.csproj
AzFnClient.cs
/LabApps.Actors.Testing2.gRPCCli/AzFnClient.cs/LabApps.Actors.Testing2.gRPCCli/AzFnClient.cs
LabApps.Actors.Testing2.gRPCCli.csproj
/LabApps.Actors.Testing2.gRPCCli/LabApps.Actors.Testing2.gRPCCli.csproj/LabApps.Actors.Testing2.gRPCCli/LabApps.Actors.Testing2.gRPCCli.csproj
Program.cs
/LabApps.Actors.Testing2.gRPCCli/Program.cs/LabApps.Actors.Testing2.gRPCCli/Program.cs
appsettings.Development.json
/LabApps.Actors.Testing2.gRPCServer/appsettings.Development.json/LabApps.Actors.Testing2.gRPCServer/appsettings.Development.json
appsettings.json
/LabApps.Actors.Testing2.gRPCServer/appsettings.json/LabApps.Actors.Testing2.gRPCServer/appsettings.json
LabApps.Actors.Testing2.gRPCServer.csproj
/LabApps.Actors.Testing2.gRPCServer/LabApps.Actors.Testing2.gRPCServer.csproj/LabApps.Actors.Testing2.gRPCServer/LabApps.Actors.Testing2.gRPCServer.csproj
Program.cs
/LabApps.Actors.Testing2.gRPCServer/Program.cs/LabApps.Actors.Testing2.gRPCServer/Program.cs
Startup.cs
/LabApps.Actors.Testing2.gRPCServer/Startup.cs/LabApps.Actors.Testing2.gRPCServer/Startup.cs