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

Reply via email to