private void ServerThreadStart(CountdownEvent signalledOnWaitingForConnection) { while (m_isAlive) { var pipeHandle = LowIntegrityPipeFactory.CreateLowIntegrityNamedPipe(m_defaultPipeName); var connection = new NamedPipeServerStream(PipeDirection.InOut, true, false, pipeHandle); if (signalledOnWaitingForConnection != null) { signalledOnWaitingForConnection.Signal(); signalledOnWaitingForConnection = null; } connection.WaitForConnection(); Logger.L(LoggerLevel.Info, "DSPEx Node got connection"); var session = new DtpNodeSession(this, connection, DSPExNodeRole.Server); m_sessions.TryAdd(session); } }
protected override void ThreadStart(CountdownEvent readySignal) { try { while (!CancellationToken.IsCancellationRequested) { var pipeHandle = LowIntegrityPipeFactory.CreateLowIntegrityNamedPipe(pipeName); var connection = new NamedPipeServerStream(PipeDirection.InOut, true, false, pipeHandle); if (readySignal != null) { readySignal.Signal(); readySignal = null; } var asyncResult = connection.BeginWaitForConnection(ar => acceptThreadSynchronization.Release(1), null); acceptThreadSynchronization.WaitOne(); Console.WriteLine("Past acceptThreadSynchronization!"); if (asyncResult.IsCompleted) { connection.EndWaitForConnection(asyncResult); Logger.L(LoggerLevel.Info, "DSPEx Node got connection"); HandleAccept(connection); } else { connection.Dispose(); pipeHandle.Dispose(); } } } finally { if (readySignal != null) { readySignal.Signal(); } } }