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());
}
}