基本信息
源码名称:C#制作的 BT种子生成器 含完整源码下载
源码大小:0.02M
文件格式:.zip
开发语言:C#
更新时间:2013-10-21
   友情提示:(无需注册或充值,赞助后即可获取资源下载链接)

     嘿,亲!知识可是无价之宝呢,但咱这精心整理的资料也耗费了不少心血呀。小小地破费一下,绝对物超所值哦!如有下载和支付问题,请联系我们QQ(微信同号):813200300

本次赞助数额为: 2 元 
   源码介绍


using System;
using System.Collections.Generic;
using System.Text;

namespace BenCode
{
    interface IBenCode
    {
        byte[] ToByteArray();
    }

    abstract class BenByteString : IBenCode
    {
        abstract protected byte[] GetByteArray();
        public byte[] ToByteArray()
        {
            List<byte> byteList = new List<byte>();
            byte[] byteContent = GetByteArray();
            string sizeHeader = string.Format("{0}:", byteContent.Length);
            byteList.AddRange(Encoding.UTF8.GetBytes(sizeHeader));
            byteList.AddRange(byteContent);
            return byteList.ToArray();
        }
    }

    class BenStringFormString : BenByteString, IComparable<BenStringFormString>
    {
        public BenStringFormString(string value)
        {
            m_value = value;
        }
 
        override protected byte[] GetByteArray()
        {
            return Encoding.UTF8.GetBytes(m_value);
        }

        public int CompareTo(BenStringFormString other)
        {
            return string.CompareOrdinal(m_value, other.m_value);
        }

        private string m_value;
    }

    class BenBinaryFormString : BenByteString
    {
        public BenBinaryFormString(byte[] binaryArray)
        {
            m_binaryArray = binaryArray;
        }

        override protected byte[] GetByteArray()
        {
            return m_binaryArray;
        }

        private byte[] m_binaryArray;
    }

    class BenInt : IBenCode
    {
        public BenInt(long value)
        {
            m_value = value;
        }

        public byte[] ToByteArray()
        {
            string resultInStringForm = string.Format("i{0}e", m_value);
            return Encoding.UTF8.GetBytes(resultInStringForm);
        }

        private long m_value;
    }

    class BenList : IBenCode
    {
        public BenList()
        {
            m_items = new List<IBenCode>();
        }

        public void Add(IBenCode item)
        {
            m_items.Add(item);
        }

        public byte[] ToByteArray()
        {
            List<byte> byteList = new List<byte>();
            byteList.AddRange(Encoding.UTF8.GetBytes("l"));
            foreach (IBenCode item in m_items)
            {
                byteList.AddRange(item.ToByteArray());
            }
            byteList.AddRange(Encoding.UTF8.GetBytes("e"));
            return byteList.ToArray();
        }

        private List<IBenCode> m_items;
    }

    class BenDictionary : IBenCode
    {
        public BenDictionary()
        {
            m_directionary = new SortedDictionary<BenStringFormString, IBenCode>();
        }

        public void Add(string key, IBenCode value)
        {
            BenStringFormString benKey = new BenStringFormString(key);
            Add(benKey, value);
        }

        public void Add(BenStringFormString key, IBenCode value)
        {
            m_directionary.Add(key, value);
        }

        public byte[] ToByteArray()
        {
            List<byte> byteList = new List<byte>();
            byteList.AddRange(Encoding.UTF8.GetBytes("d"));
            foreach (KeyValuePair<BenStringFormString, IBenCode> entry in m_directionary)
            {
                byteList.AddRange(entry.Key.ToByteArray());
                byteList.AddRange(entry.Value.ToByteArray());
            }
            byteList.AddRange(Encoding.UTF8.GetBytes("e"));
            return byteList.ToArray();
        }

        private SortedDictionary<BenStringFormString, IBenCode> m_directionary;
    }
}