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);
         }
     }
 }
示例#2
0
        /// <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);
        }