private void EndCreateConnection(bool succeeded, int count, object state)
{
AsyncConnectState connect = (AsyncConnectState)state;
pendingConnects.Remove(connect);
if (connect.Manager.Engine == null ||
!connect.Manager.Mode.CanAcceptConnections)
{
connect.Connection.Dispose();
return;
}
try
{
connect.Manager.Peers.ConnectingToPeers.Remove(connect.Peer);
if (!succeeded)
{
Logger.Log(null, "ConnectionManager - Failed to connect{0}", connect.Peer);
connect.Manager.RaiseConnectionAttemptFailed(
new PeerConnectionFailedEventArgs(connect.Manager, connect.Peer, Direction.Outgoing, "EndCreateConnection"));
connect.Peer.FailedConnectionAttempts++;
connect.Connection.Dispose();
connect.Manager.Peers.BusyPeers.Add(connect.Peer);
}
else
{
PeerId id = new PeerId(connect.Peer, connect.Manager);
id.Connection = connect.Connection;
connect.Manager.Peers.ActivePeers.Add(connect.Peer);
Logger.Log(id.Connection, "ConnectionManager - Connection opened");
ProcessFreshConnection(id);
}
}
catch (Exception)
{
// FIXME: Do nothing now?
}
finally
{
// Try to connect to another peer
TryConnect();
}
}