public Domain.Service.IJobIndexPointCalculator GetCalculator(Domain.Model.Calculations.CalculationId calculationId) { lock (providerLock) { if (calculators.Any(i => !i.Key.Equals(calculationId) && i.Value.State == CalculatorState.Running)) { throw new Exception("تنها اجرای یک محاسبه امکان پذیر است."); } return(calculators.AddOrUpdate(calculationId, id => (JobIndexPointCalculator)ServiceLocator.Current.GetInstance <IJobIndexPointCalculator>(), (id, old) => { if (old != null) { if (old.State == CalculatorState.Running) { return old; } else { ServiceLocator.Current.Release(old); } } return (JobIndexPointCalculator)ServiceLocator.Current.GetInstance <IJobIndexPointCalculator>(); })); } }
public CalculationEngineState GetCalculationState(Domain.Model.Calculations.CalculationId calculationId) { var client = new CalculationEngineRef.CalculationEngineServiceClient(); var progress = WcfClientHelper.CallMethod((c, id) => c.CheckStatus(id.Id), client, calculationId, errorAdapter); var msgList = progress.MessageList.ToList(); return(new CalculationEngineState { MessageList = msgList, Percent = progress.Percent, StateName = progress.StateName }); }
public void PauseCalculation(Domain.Model.Calculations.CalculationId calculationId) { var client = new CalculationEngineRef.CalculationEngineServiceClient(); WcfClientHelper.CallMethod((c, id) => c.Pause(id.Id), client, calculationId, errorAdapter); }