private static void AddFunction(SpracheCalculator calculator, FunctionDefinition functionDefinition)
 {
     calculator.AddFunction(functionDefinition.Name,
                            functionDefinition.Description,
                            functionDefinition.Expression,
                            functionDefinition.Parameters);
 }
Exemple #2
0
        public CalculatorActor()
        {
            PersistenceId = Self.Path.Name;
            var calculator = new SpracheCalculator();

            Command <CalculatorActorProtocol.AddFunction>(a =>
            {
                try
                {
                    AddFunction(calculator, a.Definition);
                    Persist(new FunctionAdded(PersistenceId, a.Definition), e =>
                    {
                        Sender.Tell(CalculatorActorProtocol.FunctionAdded.Instance);
                    });
                }
                catch (Exception ex)
                {
                    Sender.Tell(new CalculatorActorProtocol.FunctionAddError(ex));
                    throw new FunctionAddException(ex);
                }
            });

            Command <CalculatorActorProtocol.GetKnownFunctions>(g =>
                                                                Sender.Tell(new CalculatorActorProtocol.KnownFunctions(calculator.GetKnownFunctions().ToArray())));

            Command <CalculatorActorProtocol.CalculateExpression>(c =>
            {
                try
                {
                    var result = calculator.Calculate(c.Representation, c.Parameters);
                    Log.Debug("Calculating expression " + c.Representation);
                    PersistAsync(new CalculationPerformed(PersistenceId, c.Representation,
                                                          c.Parameters, result.FunctionUsages.ToArray()), e => { });
                    Sender.Tell(new CalculatorActorProtocol.CalculationResult(result.Value));
                }
                catch (Exception ex)
                {
                    Sender.Tell(new CalculatorActorProtocol.CalculationError(ex));
                }
            });
            Recover <FunctionAdded>(a => AddFunction(calculator, a.Definition));
            Recover <CalculationPerformed>(p => { });
        }
 public CalculatorTests()
 {
     _calculator = new SpracheCalculator();
 }