Beispiel #1
0
        public async Task <ExecutionResult> RunAsync(string input, IChannel channel)
        {
            var(name, args) = ParseInput(input);
            var symbol = SymbolResolver.Resolve(name) as IQSharpSymbol;

            if (symbol == null)
            {
                throw new InvalidOperationException($"Invalid operation name: {name}");
            }
            var snippetsWithNoOverlap = this.Snippets.Items.Where(s => s.Elements.Select(IQSharp.Extensions.ToFullName).Contains(Snippets.SNIPPETS_NAMESPACE + "." + symbol.Name));
            var files = new List <Uri>();

            files.Add(snippetsWithNoOverlap.FirstOrDefault().Uri);
            var l = snippetsWithNoOverlap.FirstOrDefault().Elements;

            Console.WriteLine(l.Count());
            foreach (var s in l)
            {
                Console.WriteLine(s.ToFullName());

                //AssemblyInfo = Compiler.BuildFiles(files, GlobalReferences.CompilerMetadata, logger, CacheDll);
            }
            var qsNamespace = new QsCompiler.SyntaxTree.QsNamespace(NonNullable <string> .New(Snippets.SNIPPETS_NAMESPACE), ImmutableArray.Create(l), null);
            var logger      = new QSharpLogger(Logger);
            var newAssembly = CompilerService.BuildAssembly(files.ToArray(), new[] { qsNamespace }, GlobalReferences.CompilerMetadata.RoslynMetadatas, logger, Path.Combine(Path.GetTempPath(), "__snippets__.dll"));

            Assembly.LoadFrom(newAssembly.Location);
            symbol = SymbolResolver.Resolve(name) as IQSharpSymbol;
            if (symbol == null)
            {
                throw new InvalidOperationException($"Invalid operation name: {name}");
            }

            var aSCIICircuitizer = new ASCIICircuitizer();
            var qsim             = new CircuitizerSimulator(aSCIICircuitizer);

            qsim.DisableLogToConsole();
            qsim.OnLog += channel.Stdout;

            var value = await symbol.Operation.RunAsync(qsim, args);

            var result = qsim.Render();
            // TODO : currently we are ignoring the Render result from qsim and rendering a local file instead.
            var imageHtml = new ImageDataWrapper
            {
                imageFileName = @"C:\Users\angarg\Pictures\bad_status.PNG"
            };

            //return imageHtml.ToExecutionResult();
            return(result.ToExecutionResult());
        }