예제 #1
0
        private void ExecutePartialMessageHandler(object message, PartialAction <object> partialAction)
        {
            var wasHandled = partialAction(message);

            if (!wasHandled && _shouldUnhandle)
            {
                Unhandled(message);
            }
        }
예제 #2
0
 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;
     }
 }
예제 #3
0
        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");
        }