public static void DoStreamOperations(PipeStream stream) { if (stream.CanWrite) { stream.Write(new byte[] { 123, 124 }, 0, 2); } if (stream.CanRead) { if (stream.ReadByte() != 123) { Console.WriteLine("First byte read != 123"); } if (stream.ReadByte() != 124) { Console.WriteLine("Second byte read != 124"); } } Console.WriteLine("*** Operations finished. ***"); }
static byte[] ReadBytes(PipeStream pipeStream, int length) { Assert.True(pipeStream.IsConnected); byte[] buffer = new byte[length]; Assert.True(length > 0); buffer[0] = (byte)pipeStream.ReadByte(); if (length > 1) { int len = pipeStream.Read(buffer, 1, length - 1); Assert.Equal(length - 1, len); } return buffer; }
public static void DoStreamOperations(PipeStream stream) { if (stream.CanWrite) { stream.Write(new byte[] { 123, 124 }, 0, 2); } if (stream.CanRead) { Assert.Equal(123, stream.ReadByte()); Assert.Equal(124, stream.ReadByte()); } }
//RENDERER private NKRemotingProxy(string[] args) { NKLogging.log("+Started Renderer in new Process"); this.context = null; this._localHandlers = new Dictionary<string, NKScriptMessageHandler>(); this.cancelTokenSource = new CancellationTokenSource(); this.cancelToken = cancelTokenSource.Token; var outHandle = args[2]; var inHandle = args[1]; var syncPipeOut = new AnonymousPipeClientStream(PipeDirection.Out, outHandle); var syncPipeIn = new AnonymousPipeClientStream(PipeDirection.In, inHandle); this.syncPipeOut = syncPipeOut; this.syncPipeIn = syncPipeIn; syncPipeIn.ReadByte(); var handshake = readObject(syncPipeIn); if (handshake.command != NKRemotingMessage.Command.NKRemotingHandshake) { Environment.Exit(911); } var pipeName = handshake.args[0]; ns = handshake.args[1]; id = handshake.args[2]; NKScriptChannel.nativeFirstSequence = Int32.Parse(handshake.args[3]); handshake.args = new string[] { }; writeObject(syncPipeOut, handshake); var asyncPipe = new NamedPipeClientStream(".", pipeName, PipeDirection.InOut, PipeOptions.Asynchronous | PipeOptions.WriteThrough); asyncPipe.Connect(); cancelToken.Register(requestSelfTeardown); this.asyncPipe = asyncPipe; Task.Factory.StartNew((s) => _processClientMessages(), null, cancelToken, TaskCreationOptions.LongRunning, TaskScheduler.Default); }
static string StreamIntercept(PipeStream client, PipeStream server) { /*bytes.Clear(); int count; do { count = client.Read(buffer, 0, 8192); AddBuffer(count); } while (SomethingToRead(client.SafePipeHandle)); var array = bytes.ToArray(); server.Write(array, 0, bytes.Count); return Encoding.ASCII.GetString(array);*/ bytes.Clear(); int integer; do { integer = client.ReadByte(); if (integer >= 0) bytes.Add((byte)integer); } while (integer >= 0 && integer != 10); var array = bytes.ToArray(); server.Write(array, 0, bytes.Count); return Encoding.ASCII.GetString(array); }