Aegis.Network.Session.Socket_Connect C# (CSharp) Method

Socket_Connect() private method

private Socket_Connect ( IAsyncResult ar ) : void
ar IAsyncResult
return void
        private void Socket_Connect(IAsyncResult ar)
        {
            try
            {
                lock (this)
                {
                    try
                    {
                        if (Socket == null)
                            return;

                        Socket.EndConnect(ar);
                    }
                    catch (Exception)
                    {
                        //  Nothing to do.
                    }

                    Action<int> resultHandler = (ar.AsyncState as Action<int>);
                    if (Socket.Connected == true)
                    {
                        Activated?.Invoke(this);

                        if (resultHandler != null)
                            resultHandler(AegisResult.Ok);
                        else
                        {
                            SpinWorker.Dispatch(() =>
                            {
                                EventConnect?.Invoke(new IOEventResult(this, IOEventType.Connect, AegisResult.Ok));
                            });
                        }

                        _method.WaitForReceive();
                    }
                    else
                    {
                        Socket.Close();
                        Socket = null;

                        if (resultHandler != null)
                            resultHandler(AegisResult.ConnectionFailed);
                        else
                        {
                            SpinWorker.Dispatch(() =>
                            {
                                EventConnect?.Invoke(new IOEventResult(this, IOEventType.Accept, AegisResult.ConnectionFailed));
                            });
                        }
                    }
                }
            }
            catch (Exception e)
            {
                Logger.Err(LogMask.Aegis, e.ToString());
            }
        }