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