public static SendCtrlBreak ( int clientPid ) : void | ||
clientPid | int | |
return | void |
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 \" \">"; 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); } }