private void AnalyseDictionary(IBNode parent) { // 字典一定是d开始的 if (GetCurrentCharMove() != 'd') { return; } // 循环分析键值对 do { KeyValueNode keyValueNode = _bNodeFactory.GetBNode('k') as KeyValueNode; // 键值对,键一定是string keyValueNode.SetKey(AnalyseString()); // 值 switch (GetCurrentChar()) { case 'i': // 数字 keyValueNode.SetValue(AnalyseInteger()); keyValueNode.ValueType = 'i'; break; case 'd': // 字典 AnalyseDictionary(keyValueNode); keyValueNode.ValueType = 'd'; break; case 'l': // 列表 AnalyseList(keyValueNode); keyValueNode.ValueType = 'l'; break; default: keyValueNode.SetValue(AnalyseString()); keyValueNode.ValueType = 's'; break; } parent.Child.Add(keyValueNode); } while (GetCurrentChar() != 'e'); GetCurrentCharMove(); }
public IBNode Analysis(byte[] torrentStream) { // 清空上一次处理的信息 BNodeList = new List<IBNode>(); _bNodeFactory = new BNodeFactory(BNodeList); index = 0; this.torrentStream = torrentStream; // bt文件一定是一个字典开始的 DictNode rootNode = _bNodeFactory.GetBNode('d') as DictNode; AnalysisDictionary(rootNode); return rootNode; }
public IBNode Analyse(byte[] torrentStream) { // 清空上一次处理的信息 BNodeList = new List <IBNode>(); _bNodeFactory = new BNodeFactory(BNodeList); index = 0; this.torrentStream = torrentStream; // bt文件一定是一个字典开始的 DictNode rootNode = _bNodeFactory.GetBNode('d') as DictNode; AnalyseDictionary(rootNode); return(rootNode); }