static int Main(string[] args) { if (args.Length > 0) { if (args[0].Equals("infinite")) { // To avoid potential issues with orphaned processes (say, the test exits before // exiting the process), we'll say "infinite" is actually 100 seconds. Sleep(100 * 1000); } else if (args[0].Equals("error")) { Console.Error.WriteLine(Name + " started error stream"); Console.Error.WriteLine(Name + " closed error stream"); Sleep(); } else if (args[0].Equals("input")) { string str = Console.ReadLine(); } else if (args[0].Equals("stream")) { Console.WriteLine(Name + " started"); Console.WriteLine(Name + " closed"); Sleep(); } else if (args[0].Equals("byteAtATime")) { var stdout = Console.OpenStandardOutput(); var bytes = new byte[] { 97, 0 }; //Encoding.Unicode.GetBytes("a"); for (int i = 0; i != bytes.Length; ++i) { stdout.WriteByte(bytes[i]); stdout.Flush(); Sleep(100); } } else if (args[0].Equals("ipc")) { using (var inbound = new AnonymousPipeClientStream(PipeDirection.In, args[1])) using (var outbound = new AnonymousPipeClientStream(PipeDirection.Out, args[2])) { // Echo 10 bytes from inbound to outbound for (int i = 0; i < 10; i++) { int b = inbound.ReadByte(); outbound.WriteByte((byte)b); } } } else { Console.WriteLine(string.Join(" ", args)); } } return 100; }
private static int PingPong_OtherProcess(string inHandle, string outHandle) { // Create the clients associated with the supplied handles using (var inbound = new AnonymousPipeClientStream(PipeDirection.In, inHandle)) using (var outbound = new AnonymousPipeClientStream(PipeDirection.Out, outHandle)) { // Repeatedly read then write a byte from and to the server for (int i = 0; i < 10; i++) { int b = inbound.ReadByte(); outbound.WriteByte((byte)b); } } return SuccessExitCode; }