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 - [email protected]
http://lists.ximian.com/mailman/listinfo/mono-patches