コード例 #1
0
        /// <summary>
        /// Gets the first data item of the given name and possibly gets the
        /// indicated pieces from DHT.
        /// </summary>
        /// <param name="getPieces">Whether to get pieces if the data at the
        /// specified DHT name is a FragmentationInfo</param>
        public DhtGetResult GetOneDatum(byte[] key, bool getPieces,
                                        OneDatumMode mode)
        {
            DhtGetResult[] results = _dht.Get(key);
            DhtGetResult   ret;

            if (results.Length == 0)
            {
                ret = null;
            }
            else
            {
                DhtGetResult dgr;
                if (mode == OneDatumMode.FirstOne)
                {
                    dgr = results[0];
                }
                else if (mode == OneDatumMode.LastOne)
                {
                    dgr = results[results.Length - 1];
                }
                else
                {
                    throw new NotImplementedException(
                              "This OneDatumMode not implemented.");
                }
                DictionaryData dd = null;
                try {
                    dd = DictionaryData.CreateDictionaryData(dgr.value);
                } catch (Exception ex) {
                    // Not an error in this case. Log with verbose level.
                    Logger.WriteLineIf(LogLevel.Verbose, _log_props,
                                       ex);
                }
                if (dd != null && dd is FragmentationInfo)
                {
                    FragmentationInfo frag_info = dd as FragmentationInfo;
                    BrunetDhtEntry    bde       = null;
                    try {
                        bde = GetFragments(frag_info) as BrunetDhtEntry;
                        RegularData rd = (RegularData)DictionaryData.CreateDictionaryData(
                            bde.Value);
                        //Only 1 entry (if any) in this array
                        ret = new DhtGetResult(rd.PayLoad, bde.Age, bde.Ttl);
                    } catch (Exception ex) {
                        Logger.WriteLineIf(LogLevel.Error, _log_props, string.Format("Can't get fragments."), ex);
                        ret = null;
                    }
                }
                else
                {
                    ret = dgr;
                }
            }
            return(ret);
        }
コード例 #2
0
ファイル: BrunetDht.cs プロジェクト: xujyan/hurricane
 /// <summary>
 /// Gets the first data item of the given name and possibly gets the 
 /// indicated pieces from DHT.
 /// </summary>
 /// <param name="getPieces">Whether to get pieces if the data at the 
 /// specified DHT name is a FragmentationInfo</param>
 public DhtGetResult GetOneDatum(byte[] key, bool getPieces, 
     OneDatumMode mode)
 {
     DhtGetResult[] results =  _dht.Get(key);
       DhtGetResult ret;
       if (results.Length == 0) {
     ret = null;
       } else {
     DhtGetResult dgr;
     if (mode == OneDatumMode.FirstOne) {
       dgr = results[0];
     } else if (mode == OneDatumMode.LastOne) {
       dgr = results[results.Length - 1];
     } else {
       throw new NotImplementedException(
     "This OneDatumMode not implemented.");
     }
     DictionaryData dd = null;
     try {
       dd = DictionaryData.CreateDictionaryData(dgr.value);
     } catch (Exception ex) {
       // Not an error in this case. Log with verbose level.
       Logger.WriteLineIf(LogLevel.Verbose, _log_props,
       ex);
     }
     if (dd != null && dd is FragmentationInfo) {
       FragmentationInfo frag_info = dd as FragmentationInfo;
       BrunetDhtEntry bde = null;
       try {
     bde = GetFragments(frag_info) as BrunetDhtEntry;
     RegularData rd = (RegularData)DictionaryData.CreateDictionaryData(
       bde.Value);
     //Only 1 entry (if any) in this array
     ret = new DhtGetResult(rd.PayLoad, bde.Age, bde.Ttl);
       } catch (Exception ex) {
     Logger.WriteLineIf(LogLevel.Error, _log_props, string.Format("Can't get fragments."), ex);
     ret = null;
       }
     } else {
       ret = dgr;
     }
       }
       return ret;
 }