public PipeInstance GetInstance() { lock (_instances) { if (_instances.Count == 0) { // create a new pipe instance return(PipeInstance.Create(_pipe.Name, false, _pipe.SecurityDescriptor)); } else { // reuse pooled instance (newer one) PipeInstance instance = (PipeInstance)_instances[_instances.Count - 1]; _instances.Remove(instance); return(instance); } } }
/// <summary> /// Creates pipe on the server side to allow client to connect to /// </summary> public void Bind(PipeName pipeName, SecurityDescriptor securityDescriptor) { // check object state if (_disposed) { throw new ObjectDisposedException(GetType().FullName); } if (_instance != null) { throw new InvalidOperationException("Pipe is already connected"); } // store security descriptor _securityDescriptor = securityDescriptor; // create pipe _instance = PipeInstance.Create(pipeName, true, _securityDescriptor); _instancePool = new PipeInstancePool(this); }