Exemple #1
0
        public async Task when_a_KernelCommand_is_sent_it_writes_a_KernelCommandEnvelope()
        {
            var kernelCommand = new SubmitCode("x=1");
            var buffer        = new StringBuilder();

            var sender = new KernelCommandAndEventTextStreamSender(new StringWriter(buffer));
            await sender.SendAsync(kernelCommand, CancellationToken.None);

            var envelopeMessage = buffer.ToString();

            envelopeMessage.Should()
            .BeEquivalentTo(KernelCommandEnvelope.Serialize(KernelCommandEnvelope.Create(kernelCommand)) + KernelCommandAndEventTextStreamSender.Delimiter);
        }
Exemple #2
0
        private async Task <Kernel> CreateProxyKernel(Language language)
        {
            var psi = new ProcessStartInfo
            {
                FileName               = "dotnet-interactive",
                Arguments              = $"stdio --default-kernel {language.LanguageName()}",
                WorkingDirectory       = Directory.GetCurrentDirectory(),
                RedirectStandardInput  = true,
                RedirectStandardOutput = true,
                UseShellExecute        = false,
            };

            var process = new Process {
                StartInfo = psi
            };
            TaskCompletionSource <bool> ready = new();

            process.Start();

            var receiver = new KernelCommandAndEventTextReceiver(process.StandardOutput);
            var sender   = new KernelCommandAndEventTextStreamSender(process.StandardInput);

            var kernel = new ProxyKernel("proxy", receiver, sender);

            kernel.RegisterForDisposal(() =>
            {
                process.Kill(true);
                process.Dispose();
            });

            var _ = kernel.RunAsync();

            var sub = kernel.KernelEvents.OfType <KernelReady>().Subscribe(_ =>
            {
                ready.SetResult(true);
            });

            await ready.Task;

            sub.Dispose();

            return(kernel);
        }