SendCtrlBreak() public static method

public static SendCtrlBreak ( int clientPid ) : void
clientPid int
return void
示例#1
0
文件: Program.cs 项目: xtrm0/vscoq
        static async Task copyStreamWithInterrupt(Process coqtop, Stream from, Stream to)
        {
            try
            {
                var settings = new XmlReaderSettings();
                settings.Async            = true;
                settings.CheckCharacters  = false;
                settings.ValidationType   = ValidationType.None;
                settings.ConformanceLevel = ConformanceLevel.Fragment;
                settings.DtdProcessing    = DtdProcessing.Parse;
                var context = new XmlParserContext(null, new XmlNamespaceManager(new NameTable()), null, XmlSpace.None, Encoding.UTF8);
                context.InternalSubset = "<!ENTITY nbsp \"&#160;\">";
                context.DocTypeName    = "coq";

                var reader = XmlTextReader.Create(from, settings, context);
                var writer = new StreamWriter(to);
                while (await reader.ReadAsync())
                {
                    if (reader.NodeType == XmlNodeType.Element && reader.Depth == 0 && reader.Name == "call" && reader.GetAttribute("val") == "Interrupt")
                    {
                        await Console.Error.WriteLineAsync("Sending ctrl+break");

                        Signals.SendCtrlBreak(coqtop.Id);
                        using (var y = reader.ReadSubtree())
                        {
                            y.Read();
                            await y.ReadOuterXmlAsync();
                        }
                        //await reader.SkipAsync();
                    }
                    else if (reader.NodeType == XmlNodeType.Element)
                    {
                        using (var y = reader.ReadSubtree())
                        {
                            y.Read();
                            await writer.WriteAsync(await y.ReadOuterXmlAsync());

                            await writer.FlushAsync();
                        }
                    }
                }
            }
            catch (Exception error)
            {
                Console.Error.WriteLine("Error reading main channel write stream.");
                Console.Error.WriteLine("Reason: " + error.ToString());
                System.Environment.Exit(-1);
            }
        }