/// <summary> /// Release any peer class resources. /// </summary> public void Close() { try { _closeGuardMutex.WaitOne(); if (Connected) { Log.Logger.Info($"Closing down Peer {Encoding.ASCII.GetString(RemotePeerID)}..."); Tc.UnMergePieceBitfield(this); if (Tc.peerSwarm.ContainsKey(Ip)) { if (Tc.peerSwarm.TryRemove(Ip, out Peer _)) { Log.Logger.Info($"Dead Peer {Ip} removed from swarm."); } } Connected = false; Log.Logger.Info($"Closed down {Encoding.ASCII.GetString(RemotePeerID)}."); } } catch (Exception ex) { Log.Logger.Error(ex); } _network?.Close(); _network = null; _closeGuardMutex.ReleaseMutex(); }