static PeerMessage()
{
MessageDict = new Dictionary<byte, CreateMessage>();
// Note - KeepAlive messages aren't registered as they have no payload or ID and are never 'decoded'
// - Handshake messages aren't registered as they are always the first message sent/received
Register(AllowedFastMessage.MessageId, manager => new AllowedFastMessage());
Register(BitfieldMessage.MessageId, manager => new BitfieldMessage(manager.Torrent.Pieces.Count));
Register(CancelMessage.MessageId, manager => new CancelMessage());
Register(ChokeMessage.MessageId, manager => new ChokeMessage());
Register(HaveAllMessage.MessageId, manager => new HaveAllMessage());
Register(HaveMessage.MessageId, manager => new HaveMessage());
Register(HaveNoneMessage.MessageId, manager => new HaveNoneMessage());
Register(InterestedMessage.MessageId, manager => new InterestedMessage());
Register(NotInterestedMessage.MessageId, manager => new NotInterestedMessage());
Register(PieceMessage.MessageId, manager => new PieceMessage());
Register(PortMessage.MessageId, manager => new PortMessage());
Register(RejectRequestMessage.MessageId, manager => new RejectRequestMessage());
Register(RequestMessage.MessageId, manager => new RequestMessage());
Register(SuggestPieceMessage.MessageId, manager => new SuggestPieceMessage());
Register(UnchokeMessage.MessageId, manager => new UnchokeMessage());
// We register this solely so that the user cannot register their own message with this ID.
// Actual decoding is handled with manual detection
Register(ExtensionMessage.MessageId, manager => { throw new MessageException("Shouldn't decode extension message this way"); });
}