/// <summary> /// Starts connecting to remote end point. /// </summary> /// <param name="op">Asynchronous operation.</param> /// <returns>Returns true if aynchronous operation is pending (The <see cref="ConnectAsyncOP.CompletedAsync"/> event is raised upon completion of the operation). /// Returns false if operation completed synchronously.</returns> /// <exception cref="ObjectDisposedException">Is raised when this object is disposed and and this method is accessed.</exception> /// <exception cref="ArgumentNullException">Is raised when <b>op</b> is null reference.</exception> public bool ConnectAsync(ConnectAsyncOP op) { if(m_IsDisposed){ throw new ObjectDisposedException(this.GetType().Name); } if(op == null){ throw new ArgumentNullException("op"); } if(op.State != AsyncOP_State.WaitingForStart){ throw new ArgumentException("Invalid argument 'op' state, 'op' must be in 'AsyncOP_State.WaitingForStart' state.","op"); } return op.Start(this); }
/// <summary> /// Connects to the specified remote end point. /// </summary> /// <param name="localEP">Local IP end point to use. Value null means that system will allocate it.</param> /// <param name="remoteEP">Remote IP end point to connect.</param> /// <param name="ssl">Specifies if connection switches to SSL affter connect.</param> /// <param name="certCallback">SSL server certificate validation callback. Value null means any certificate is accepted.</param> /// <exception cref="ObjectDisposedException">Is raised when this object is disposed and and this method is accessed.</exception> /// <exception cref="InvalidOperationException">Is raised when TCP client is already connected.</exception> /// <exception cref="ArgumentNullException">Is raised when <b>remoteEP</b> is null reference.</exception> public void Connect(IPEndPoint localEP,IPEndPoint remoteEP,bool ssl,RemoteCertificateValidationCallback certCallback) { if(m_IsDisposed){ throw new ObjectDisposedException(this.GetType().Name); } if(m_IsConnected){ throw new InvalidOperationException("TCP client is already connected."); } if(remoteEP == null){ throw new ArgumentNullException("remoteEP"); } ManualResetEvent wait = new ManualResetEvent(false); using(ConnectAsyncOP op = new ConnectAsyncOP(localEP,remoteEP,ssl,certCallback)){ op.CompletedAsync += delegate(object s1,EventArgs<ConnectAsyncOP> e1){ wait.Set(); }; if(!this.ConnectAsync(op)){ wait.Set(); } wait.WaitOne(); wait.Close(); if(op.Error != null){ //throw op.Error; } } }