Example #1
0
        /// <summary>
        /// Begins the accept TCP client.
        /// </summary>
        /// <param name="callback">The callback.</param>
        /// <param name="state">The state.</param>
        /// <returns>Async property</returns>
        public IAsyncResult BeginAcceptTcpClient(AsyncCallback callback, object state)
        {
            Interlocked.Increment(ref mAsyncActiveAcceptTcpClientCount);
            TcpListenerAcceptTcpClientDelegate d = new TcpListenerAcceptTcpClientDelegate(this.AcceptTcpClient);

            if (this.mAsyncActiveAcceptTcpClientEvent == null)
            {
                lock (LOCK_ACCEPTCLIENT)
                {
                    if (this.mAsyncActiveAcceptTcpClientEvent == null)
                    {
                        this.mAsyncActiveAcceptTcpClientEvent = new AutoResetEvent(true);
                    }
                }
            }
            this.mAsyncActiveAcceptTcpClientEvent.WaitOne();
            this.mAcceptTcpClientDelegate = d;
            return(d.BeginInvoke(callback, state));
        }
Example #2
0
 /// <summary>
 /// Ends the accept TCP client.
 /// </summary>
 /// <param name="asyncResult">The async result.</param>
 /// <returns>TcpClient implementation</returns>
 public ITcpClient EndAcceptTcpClient(IAsyncResult asyncResult)
 {
     if (asyncResult == null)
     {
         ThrowHelper.ThrowArgumentNullException("asyncResult");
     }
     if (this.mAcceptTcpClientDelegate == null)
     {
         ThrowHelper.ThrowArgumentException("Wrong async result or EndAcceptTcpClient called multiple times.", "asyncResult");
     }
     try
     {
         return(this.mAcceptTcpClientDelegate.EndInvoke(asyncResult));
     }
     finally
     {
         this.mAcceptTcpClientDelegate = null;
         this.mAsyncActiveAcceptTcpClientEvent.Set();
         CloseAsyncActiveAcceptTcpClientEvent(Interlocked.Decrement(ref mAsyncActiveAcceptTcpClientCount));
     }
 }