Beispiel #1
0
        public override ExecutionResult Run(string input, IChannel channel)
        {
            var parts   = input.Trim().Split(" ", 2);
            var command = parts[0];

            if (command.Trim() == "--save")
            {
                if (NoiseModelSource.NoiseModel == null)
                {
                    channel.Stderr("No noise model set; nothing to save.");
                }
                else
                {
                    var filename = parts[1];
                    File.WriteAllText(filename, JsonSerializer.Serialize(NoiseModelSource.NoiseModel));
                }
            }
            else if (command.Trim() == "--load")
            {
                var filename = parts[1];
                NoiseModelSource.NoiseModel = JsonSerializer.Deserialize <NoiseModel>(File.ReadAllText(filename));
            }
            else if (command.Trim() == "--get-by-name")
            {
                var name = parts[1];
                if (NoiseModel.TryGetByName(name, out var noiseModel))
                {
                    return(noiseModel.ToExecutionResult());
                }
                else
                {
                    return($"No built-in noise model with name {name}.".ToExecutionResult(ExecuteStatus.Error));
                }
            }
            else if (command.Trim() == "--load-by-name")
            {
                var name = parts[1];
                if (NoiseModel.TryGetByName(name, out var noiseModel))
                {
                    NoiseModelSource.NoiseModel = noiseModel;
                }
                else
                {
                    return($"No built-in noise model with name {name}.".ToExecutionResult(ExecuteStatus.Error));
                }
            }
            else if (input.Trim().StartsWith("{"))
            {
                // Parse the input as JSON.
                NoiseModelSource.NoiseModel = JsonSerializer.Deserialize <NoiseModel>(input.Trim());
            }
            else
            {
                // Just return the existing noise model.
                return(NoiseModelSource.NoiseModel.ToExecutionResult());
            }

            return(ExecuteStatus.Ok.ToExecutionResult());
        }
        public static void SetNoiseModel(ulong simId, NoiseModel noiseModel)
        {
            LogCall("set_noise_model");
            string?jsonData = null;

            try
            {
                jsonData = JsonSerializer.Serialize(noiseModel);
                CheckCall(_SetNoiseModel(simId, jsonData));
            }
            catch (NotSupportedException ex)
            {
                throw new ArgumentException("Could not serialize noise model to JSON, as no suitable serializer was found.", ex);
            }
            catch (JsonException ex)
            {
                throw new Exception($"Could not serialize noise model: {ex.Message}", ex);
            }
            catch (SimulationException ex)
            {
                throw new Exception($"Could not set noise model from JSON: {ex.Message}\nJSON data:\n{jsonData}", ex);
            }
        }