public void GetSieveInformation() { using (NamedPipeClientStream pipeStream = new NamedPipeClientStream(".", PIPE_NAME, PipeDirection.InOut, PipeOptions.None, System.Security.Principal.TokenImpersonationLevel.Impersonation)) { pipeStream.Connect(); PrintClientMessage("[Client] Pipe connection established"); StreamWriter writer = new StreamWriter(pipeStream); writer.WriteLine(QueryType.GetSieve); writer.Flush(); StreamReader reader = new StreamReader(pipeStream); var tmp = reader.ReadLine(); PrintClientMessage(tmp); sieve = JsonConvert.DeserializeObject <Sieve>(tmp); pipeStream.Close(); Thread.Sleep(4000); } }
public PipeServer() { int i; Thread[] servers = new Thread[numberOfThreads]; Console.WriteLine("\n*** Named pipe server started ***\n"); Console.WriteLine("Waiting for client connect...\n"); int blockSize = (int)Math.Sqrt(N); Sieve sieve = new Sieve(blockSize); sieve.blockSize = blockSize; sieveJson = JsonConvert.SerializeObject(sieve); for (i = 0; i < numberOfThreads; i++) { servers[i] = new Thread(ServerThread); servers[i].Start(); } Thread.Sleep(250); while (i > 0) { for (int j = 0; j < numberOfThreads; j++) { if (servers[j] != null) { if (servers[j].Join(250)) { PrintServerMessage($"Thread[{servers[j].ManagedThreadId}] finished."); servers[j] = null; i--; // decrement the thread watch count } } } } Console.WriteLine("\nServer threads exhausted, exiting."); }