private void ExecutePartialMessageHandler(object message, PartialAction <object> partialAction) { var wasHandled = partialAction(message); if (!wasHandled && _shouldUnhandle) { Unhandled(message); } }
void IInitializableActor.Init() { //This might be called directly after the constructor, or when the same actor instance has been returned //during recreate. Make sure what happens here is idempotent if (!_hasBeenInitialized) //Do not perform this when "recreating" the same instance { _partialReceive = BuildNewReceiveHandler(_matchHandlerBuilders.Pop()); _hasBeenInitialized = true; } }
public void When_compiling_second_time_with_same_signature_the_cached_version_should_be_used() { //Arrange object[] argumentValues = new object[0]; Expression <Func <object, bool> > lambdaExpression = _ => true; var matchExpressionBuilder = new DummyMatchExpressionBuilder() { BuildLambdaExpressionResult = new MatchExpressionBuilderResult(lambdaExpression, argumentValues), CreateArgumentValuesArrayResult = argumentValues, }; Func <object, bool> deleg = _ => true; var expressionCompiler = new DummyLambdaExpressionCompiler() { CompileResult = deleg, }; PartialAction <object> partialAction = item => true; var partialActionBuilder = new DummyPartialActionBuilder() { BuildResult = partialAction, }; var compiler = new CachedMatchCompiler <object>(matchExpressionBuilder, partialActionBuilder, expressionCompiler); var typeHandlers = new List <TypeHandler>(); var arguments = new List <Argument>(); compiler.Compile(typeHandlers, arguments, new MatchBuilderSignature(null)); matchExpressionBuilder.ResetCalls(); partialActionBuilder.ResetCalls(); expressionCompiler.ResetCalls(); //Act var resultPartialAction = compiler.Compile(typeHandlers, arguments, new MatchBuilderSignature(null)); //Assert AssertOneCall(to: matchExpressionBuilder.CreateArgumentValuesArrayCalls, withArgument: arguments, description: "CreateArgumentValuesArray"); AssertOneCall(to: partialActionBuilder.BuildCalls, description: "Build", check: i => ReferenceEquals(i.CompiledDelegate, deleg) && ReferenceEquals(i.DelegateArguments, argumentValues)); Assert.Same(partialAction, resultPartialAction); AssertNoCall(to: matchExpressionBuilder.BuildLambdaExpressionCalls, description: "BuildLambdaExpression"); AssertNoCall(to: expressionCompiler.CompileCalls, description: "Compile"); }