Author: alanmc
Date: 2008-02-16 20:40:11 -0500 (Sat, 16 Feb 2008)
New Revision: 95952

Modified:
   
trunk/bitsharp/src/MonoTorrent/MonoTorrent.Client/Messages/LibtorrentMessages/ExtendedHandshakeMessage.cs
   
trunk/bitsharp/src/MonoTorrent/MonoTorrent.Client/Messages/LibtorrentMessages/LibtorrentMessage.cs
Log:
Moved the extended messages to the new API too

Modified: 
trunk/bitsharp/src/MonoTorrent/MonoTorrent.Client/Messages/LibtorrentMessages/ExtendedHandshakeMessage.cs
===================================================================
--- 
trunk/bitsharp/src/MonoTorrent/MonoTorrent.Client/Messages/LibtorrentMessages/ExtendedHandshakeMessage.cs
   2008-02-17 01:27:58 UTC (rev 95951)
+++ 
trunk/bitsharp/src/MonoTorrent/MonoTorrent.Client/Messages/LibtorrentMessages/ExtendedHandshakeMessage.cs
   2008-02-17 01:40:11 UTC (rev 95952)
@@ -145,7 +145,7 @@
             mainDict.Add(VersionKey, (BEncodedString)Version);
             mainDict.Add(PortKey, (BEncodedNumber)localPort);
 
-            LibtorrentMessage.Supports.ForEach(delegate(LTSupport s) { 
supportsDict.Add(s.Name, (BEncodedNumber)s.MessageId); });
+                       SupportedMessages.ForEach(delegate(LTSupport s) { 
supportsDict.Add(s.Name, (BEncodedNumber)s.MessageId); });
             mainDict.Add(SupportsKey, supportsDict);
             return mainDict;
         }

Modified: 
trunk/bitsharp/src/MonoTorrent/MonoTorrent.Client/Messages/LibtorrentMessages/LibtorrentMessage.cs
===================================================================
--- 
trunk/bitsharp/src/MonoTorrent/MonoTorrent.Client/Messages/LibtorrentMessages/LibtorrentMessage.cs
  2008-02-17 01:27:58 UTC (rev 95951)
+++ 
trunk/bitsharp/src/MonoTorrent/MonoTorrent.Client/Messages/LibtorrentMessages/LibtorrentMessage.cs
  2008-02-17 01:40:11 UTC (rev 95952)
@@ -7,21 +7,30 @@
 {
     public abstract class LibtorrentMessage : PeerMessage
     {
-        internal static readonly List<LTSupport> Supports = new 
List<LTSupport>();
+               private static Dictionary<byte, CreateMessage> messageDict;
 
+        internal static readonly List<LTSupport> SupportedMessages = new 
List<LTSupport>();
+
         protected static byte nextId;
         public const byte MessageId = 20;
 
         static LibtorrentMessage()
         {
-            nextId = 1;
-            Supports.Add(new LTSupport("LT_chat", nextId++));
-            Supports.Add(new LTSupport("LT_metadata", nextId++));
+                       messageDict = new Dictionary<byte, CreateMessage>();
+                       nextId = 1;
+
+                       Register(ExtendedHandshakeMessage.MessageId, delegate { 
return new ExtendedHandshakeMessage(); });
+
+                       Register(nextId, delegate { return new LTChat(); });
+            SupportedMessages.Add(new LTSupport("LT_chat", nextId++));
+
+                       Register(nextId, delegate { return new LTMetadata(); });
+                       SupportedMessages.Add(new LTSupport("LT_metadata", 
nextId++));
         }
 
         protected static LTSupport CreateSupport(string name)
         {
-            return Supports.Find(delegate(LTSupport s) { return s.Name == 
name; });
+                       return SupportedMessages.Find(delegate(LTSupport s) { 
return s.Name == name; });
         }
 
         public new static PeerMessage DecodeMessage(ArraySegment<byte> buffer, 
int offset, int count, TorrentManager manager)
@@ -31,23 +40,15 @@
 
         public new static PeerMessage DecodeMessage(byte[] buffer, int offset, 
int count, TorrentManager manager)
         {
+                       CreateMessage creator;
             PeerMessage message;
 
             byte id = buffer[offset];
+                       if (!messageDict.TryGetValue(buffer[offset], out 
creator))
+                               message = new UnknownMessage();
+                       else
+                               message = creator();
 
-            // The first byte tells us what kind of extended message it is
-            if (id == ExtendedHandshakeMessage.Support.MessageId)
-                message = new ExtendedHandshakeMessage();
-
-            else if (id == LTChat.Support.MessageId)
-                message = new LTChat();
-
-            else if (id == LTMetadata.Support.MessageId)
-                message = new LTMetadata();
-
-            else
-                message = new UnknownMessage();
-
             message.Decode(buffer, offset + 1, count);
             return message;
         }

_______________________________________________
Mono-patches maillist  -  Mono-patches@lists.ximian.com
http://lists.ximian.com/mailman/listinfo/mono-patches

Reply via email to