Author: alanmc
Date: 2007-12-24 09:01:43 -0500 (Mon, 24 Dec 2007)
New Revision: 91858
Modified:
trunk/bitsharp/src/MonoTorrent/Client/EventArgs/NewConnectionEventArgs.cs
trunk/bitsharp/src/MonoTorrent/Client/Managers/ConnectionManager.cs
trunk/bitsharp/src/MonoTorrent/Client/Managers/PeerManager.cs
trunk/bitsharp/src/MonoTorrent/Client/Managers/TorrentManager.cs
Log:
More peers related refactorings
Modified:
trunk/bitsharp/src/MonoTorrent/Client/EventArgs/NewConnectionEventArgs.cs
===================================================================
--- trunk/bitsharp/src/MonoTorrent/Client/EventArgs/NewConnectionEventArgs.cs
2007-12-24 13:34:29 UTC (rev 91857)
+++ trunk/bitsharp/src/MonoTorrent/Client/EventArgs/NewConnectionEventArgs.cs
2007-12-24 14:01:43 UTC (rev 91858)
@@ -4,7 +4,7 @@
namespace MonoTorrent.Client
{
- public class NewConnectionEventArgs : TorrentEventArgs
+ internal class NewConnectionEventArgs : TorrentEventArgs
{
private Peer peer;
private PeerConnectionBase connection;
Modified: trunk/bitsharp/src/MonoTorrent/Client/Managers/ConnectionManager.cs
===================================================================
--- trunk/bitsharp/src/MonoTorrent/Client/Managers/ConnectionManager.cs
2007-12-24 13:34:29 UTC (rev 91857)
+++ trunk/bitsharp/src/MonoTorrent/Client/Managers/ConnectionManager.cs
2007-12-24 14:01:43 UTC (rev 91858)
@@ -167,7 +167,7 @@
lock (id)
{
Logger.Log(id, "Connecting");
- manager.Peers.AddPeer(id.Peer, PeerType.Connecting);
+ manager.Peers.AddPeer(id.Peer, PeerType.Active);
id.TorrentManager.ConnectingToPeers.Add(id);
System.Threading.Interlocked.Increment(ref
this.halfOpenConnections);
@@ -195,7 +195,7 @@
{
// If there's a socket exception at this point, just drop
the peer's details silently
// as they must be invalid.
- manager.Peers.RemovePeer(id.Peer, PeerType.Connecting);
+ manager.Peers.RemovePeer(id.Peer, PeerType.Active);
id.TorrentManager.ConnectingToPeers.Remove(id);
System.Threading.Interlocked.Decrement(ref
this.halfOpenConnections);
}
@@ -235,9 +235,7 @@
// Remove the peer from the "connecting" list and put
them in the "connected" list
// because we have now successfully connected to them
- id.TorrentManager.Peers.RemovePeer(id.Peer,
PeerType.Connecting);
id.TorrentManager.ConnectingToPeers.Remove(id);
- id.TorrentManager.Peers.AddPeer(id.Peer,
PeerType.Connected);
id.TorrentManager.ConnectedPeers.Add(id);
id.PublicId = new PeerId();
@@ -297,11 +295,13 @@
id.Connection = null;
id.NulledAt = "1";
- id.TorrentManager.Peers.RemovePeer(id.Peer,
PeerType.Connecting);
+ id.TorrentManager.Peers.RemovePeer(id.Peer,
PeerType.Active);
id.TorrentManager.ConnectingToPeers.Remove(id);
if (id.Peer.FailedConnectionAttempts < 2) // We
couldn't connect this time, so re-add to available
id.TorrentManager.Peers.AddPeer(id.Peer,
PeerType.Available);
+ else
+ id.TorrentManager.Peers.AddPeer(id.Peer,
PeerType.Busy);
}
}
}
@@ -323,11 +323,13 @@
id.Connection = null;
id.NulledAt = "2";
- id.TorrentManager.Peers.RemovePeer(id.Peer,
PeerType.Connecting);
+ id.TorrentManager.Peers.RemovePeer(id.Peer,
PeerType.Active);
id.TorrentManager.ConnectingToPeers.Remove(id);
if (id.Peer.FailedConnectionAttempts < 2) // We
couldn't connect this time, so re-add to available
id.TorrentManager.Peers.AddPeer(id.Peer,
PeerType.Available);
+ else
+ id.TorrentManager.Peers.AddPeer(id.Peer,
PeerType.Busy);
}
}
}
@@ -865,16 +867,15 @@
id.TorrentManager.ConnectingToPeers.RemoveAll(delegate(PeerIdInternal other) {
return id == other; });
id.TorrentManager.ConnectedPeers.RemoveAll(delegate(PeerIdInternal other) {
return id == other; });
- if
(id.TorrentManager.Peers.ConnectedPeers.Contains(id.Peer))
- id.TorrentManager.Peers.RemovePeer(id.Peer,
PeerType.Connected);
+ if
(id.TorrentManager.Peers.ActivePeers.Contains(id.Peer))
+ id.TorrentManager.Peers.RemovePeer(id.Peer,
PeerType.Active);
- if
(id.TorrentManager.Peers.ConnectingToPeers.Contains(id.Peer))
- id.TorrentManager.Peers.RemovePeer(id.Peer,
PeerType.Connecting);
-
// If we get our own details, this check makes sure we
don't try connecting to ourselves again
if (id.Peer.PeerId != engine.PeerId)
+ {
if
(!id.TorrentManager.Peers.AvailablePeers.Contains(id.Peer) &&
id.Peer.CleanedUpCount < 5)
id.TorrentManager.Peers.AvailablePeers.Insert(0, id.Peer);
+ }
}
}
}
@@ -966,7 +967,7 @@
return;
}
- if
(id.TorrentManager.Peers.ConnectedPeers.Contains(id.Peer) ||
id.TorrentManager.Peers.ConnectingToPeers.Contains(id.Peer))
+ if
(id.TorrentManager.Peers.ActivePeers.Contains(id.Peer))
{
Logger.Log(id, "Already connected to peer");
id.Connection.Dispose();
@@ -975,7 +976,7 @@
Logger.Log(id, "Peer accepted ok");
id.TorrentManager.Peers.RemovePeer(id.Peer,
PeerType.Available);
- id.TorrentManager.Peers.AddPeer(id.Peer,
PeerType.Connected);
+ id.TorrentManager.Peers.AddPeer(id.Peer,
PeerType.Active);
id.TorrentManager.ConnectedPeers.Add(id);
//ClientEngine.BufferManager.FreeBuffer(ref
id.Connection.sendBuffer);
@@ -1191,8 +1192,8 @@
{
foreach (TorrentManager manager in this.torrents)
{
- // If we have reached the max peers allo5wed for this
torrent, don't connect to a new peer for this torrent
- if (manager.Peers.ConnectedPeers.Count >=
manager.Settings.MaxConnections)
+ // If we have reached the max peers allowed for this
torrent, don't connect to a new peer for this torrent
+ if (manager.ConnectedPeers.Count >=
manager.Settings.MaxConnections)
continue;
// If the torrent isn't active, don't connect to a peer
for it
Modified: trunk/bitsharp/src/MonoTorrent/Client/Managers/PeerManager.cs
===================================================================
--- trunk/bitsharp/src/MonoTorrent/Client/Managers/PeerManager.cs
2007-12-24 13:34:29 UTC (rev 91857)
+++ trunk/bitsharp/src/MonoTorrent/Client/Managers/PeerManager.cs
2007-12-24 14:01:43 UTC (rev 91858)
@@ -6,13 +6,10 @@
{
internal enum PeerType
{
- Connecting,
- Connected,
+ Active,
Available,
- UploadQueue,
- DownloadQueue,
- Busy,
- Banned
+ Banned,
+ Busy
}
public class PeerManager
@@ -21,11 +18,11 @@
private ClientEngine engine;
private TorrentManager manager;
- private List<Peer> availablePeers;
- private List<Peer> banned;
- private List<Peer> busy;
- private List<Peer> connectedPeers;
- private List<Peer> connectingTo;
+ private MonoTorrentCollection<Peer> activePeers;
+ private MonoTorrentCollection<Peer> availablePeers;
+ private MonoTorrentCollection<Peer> bannedPeers;
+ private MonoTorrentCollection<Peer> busyPeers;
+
#endregion Member Variables
@@ -36,13 +33,13 @@
/// </summary>
public int Available
{
- get { return this.availablePeers.Count + this.connectedPeers.Count
+ this.connectingTo.Count; }
+ get { return this.availablePeers.Count + this.activePeers.Count +
this.busyPeers.Count; }
}
/// <summary>
/// The list of peers that are available to be connected to
/// </summary>
- internal List<Peer> AvailablePeers
+ internal MonoTorrentCollection<Peer> AvailablePeers
{
get { return this.availablePeers; }
}
@@ -50,20 +47,12 @@
/// <summary>
/// The list of peers that we are currently connected to
/// </summary>
- internal List<Peer> ConnectedPeers
+ internal MonoTorrentCollection<Peer> ActivePeers
{
- get { return this.connectedPeers; }
+ get { return this.activePeers; }
}
/// <summary>
- /// The list of peers that we are currently trying to connect to
- /// </summary>
- internal List<Peer> ConnectingToPeers
- {
- get { return this.connectingTo; }
- }
-
- /// <summary>
/// Returns the number of Leechs we are currently connected to
/// </summary>
/// <returns></returns>
@@ -73,9 +62,9 @@
{
int leechs = 0;
lock (this.manager.listLock)
- for (int i = 0; i < this.connectedPeers.Count; i++)
- lock (this.connectedPeers[i])
- if (!this.connectedPeers[i].IsSeeder)
+ for (int i = 0; i < this.activePeers.Count; i++)
+ lock (this.activePeers[i])
+ if (!this.activePeers[i].IsSeeder)
leechs++;
return leechs;
@@ -92,9 +81,9 @@
{
int seeds = 0;
lock (this.manager.listLock)
- for (int i = 0; i < this.connectedPeers.Count; i++)
- lock (this.connectedPeers[i])
- if (this.connectedPeers[i].IsSeeder)
+ for (int i = 0; i < this.activePeers.Count; i++)
+ lock (this.activePeers[i])
+ if (this.activePeers[i].IsSeeder)
seeds++;
return seeds;
}
@@ -109,11 +98,10 @@
{
this.engine = engine;
this.manager = manager;
- this.availablePeers = new List<Peer>();
- this.banned = new List<Peer>();
- this.busy = new List<Peer>();
- this.connectedPeers = new List<Peer>();
- this.connectingTo = new List<Peer>();
+ this.activePeers = new MonoTorrentCollection<Peer>();
+ this.availablePeers = new MonoTorrentCollection<Peer>();
+ this.bannedPeers = new MonoTorrentCollection<Peer>();
+ this.busyPeers = new MonoTorrentCollection<Peer>();
}
#endregion Constructors
@@ -123,38 +111,39 @@
internal IEnumerable<Peer> AllPeers()
{
- for (int i = 0; i < this.availablePeers.Count; i++)
+ for (int i = 0; i < availablePeers.Count; i++)
yield return availablePeers[i];
- for (int i = 0; i < this.connectedPeers.Count; i++)
- yield return connectedPeers[i];
+ for (int i = 0; i < activePeers.Count; i++)
+ yield return activePeers[i];
- for (int i = 0; i < this.connectingTo.Count; i++)
- yield return this.connectingTo[i];
+ for (int i = 0; i < bannedPeers.Count; i++)
+ yield return bannedPeers[i];
- for (int i = 0; i < this.banned.Count; i++)
- yield return this.banned[i];
-
- for (int i = 0; i < this.busy.Count; i++)
- yield return this.busy[i];
+ for (int i = 0; i < busyPeers.Count; i++)
+ yield return busyPeers[i];
}
internal void AddPeer(Peer peer, PeerType type)
{
switch (type)
{
- case (PeerType.Connected):
- this.connectedPeers.Add(peer);
+ case (PeerType.Active):
+ this.activePeers.Add(peer);
break;
- case (PeerType.Connecting):
- this.connectingTo.Add(peer);
- break;
-
case (PeerType.Available):
this.availablePeers.Add(peer);
break;
+ case(PeerType.Banned):
+ bannedPeers.Add(peer);
+ break;
+
+ case(PeerType.Busy):
+ busyPeers.Add(peer);
+ break;
+
default:
throw new NotSupportedException();
}
@@ -162,9 +151,10 @@
internal void ClearAll()
{
+ this.activePeers.Clear();
this.availablePeers.Clear();
- this.connectedPeers.Clear();
- this.connectingTo.Clear();
+ this.bannedPeers.Clear();
+ this.busyPeers.Clear();
}
internal bool Contains(Peer peer)
@@ -181,21 +171,18 @@
Peer id;
switch (type)
{
- case (PeerType.Connected):
- id = this.connectedPeers[0];
- this.connectedPeers.RemoveAt(0);
- return id;
+ case (PeerType.Active):
+ return activePeers.Dequeue();
- case (PeerType.Connecting):
- id = this.connectingTo[0];
- this.connectingTo.RemoveAt(0);
- return id;
-
case (PeerType.Available):
- id = this.availablePeers[0];
- this.availablePeers.RemoveAt(0);
- return id;
+ return availablePeers.Dequeue();
+ case (PeerType.Banned):
+ return bannedPeers.Dequeue();
+
+ case (PeerType.Busy):
+ return busyPeers.Dequeue();
+
default:
throw new NotSupportedException();
}
@@ -205,18 +192,22 @@
{
switch (type)
{
- case (PeerType.Connected):
- this.connectedPeers.Add(id);
- return;
+ case (PeerType.Active):
+ activePeers.Add(id);
+ break;
- case (PeerType.Connecting):
- this.connectingTo.Add(id);
- return;
-
case (PeerType.Available):
- this.availablePeers.Add(id);
- return;
+ availablePeers.Add(id);
+ break;
+ case (PeerType.Banned):
+ bannedPeers.Add(id);
+ break;
+
+ case (PeerType.Busy):
+ busyPeers.Add(id);
+ break;
+
default:
throw new NotSupportedException();
}
@@ -226,18 +217,22 @@
{
switch (type)
{
- case (PeerType.Connected):
- this.connectedPeers.Remove(id);
+ case (PeerType.Active):
+ activePeers.Remove(id);
break;
- case (PeerType.Connecting):
- this.connectingTo.Remove(id);
+ case (PeerType.Available):
+ availablePeers.Remove(id);
break;
- case (PeerType.Available):
- this.availablePeers.Remove(id);
+ case (PeerType.Banned):
+ bannedPeers.Remove(id);
break;
+ case (PeerType.Busy):
+ busyPeers.Remove(id);
+ break;
+
default:
throw new NotSupportedException();
}
Modified: trunk/bitsharp/src/MonoTorrent/Client/Managers/TorrentManager.cs
===================================================================
--- trunk/bitsharp/src/MonoTorrent/Client/Managers/TorrentManager.cs
2007-12-24 13:34:29 UTC (rev 91857)
+++ trunk/bitsharp/src/MonoTorrent/Client/Managers/TorrentManager.cs
2007-12-24 14:01:43 UTC (rev 91858)
@@ -160,7 +160,7 @@
/// </summary>
public int OpenConnections
{
- get { return this.peers.ConnectedPeers.Count; }
+ get { return this.ConnectedPeers.Count; }
}
@@ -915,9 +915,9 @@
lock (this.listLock)
{
- for (int i = 0; i < this.peers.ConnectedPeers.Count; i++)
+ for (int i = 0; i < this.ConnectedPeers.Count; i++)
{
- lock (this.peers.ConnectedPeers[i])
+ lock (this.ConnectedPeers[i])
{
if (this.ConnectedPeers[i].Connection == null)
continue;
_______________________________________________
Mono-patches maillist - [email protected]
http://lists.ximian.com/mailman/listinfo/mono-patches