private static void AddFunction(SpracheCalculator calculator, FunctionDefinition functionDefinition) { calculator.AddFunction(functionDefinition.Name, functionDefinition.Description, functionDefinition.Expression, functionDefinition.Parameters); }
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(); }