示例#1
0
 private void SearchProc()
 {
     while (!shutdown)
     {
         lock (syncSearch)
         {
             Monitor.Wait(syncSearch);
         }
         if (shutdown)
             break;
         IsBusy = true;
         var sample = new List<PcdbEntry>();
         lastChunk = CollectData();
         var chunk = lastChunk;
         if (chunk != null)
         {
             var haveTs = database.Revision >= (int)PcdbRevision.Rev1;
             foreach (DataRow hashRow in chunk.Hashes.Rows)
             {
                 if (cancel || shutdown)
                     break;
                 var entry = new PcdbEntry(hashRow[0].ToString());
                 foreach (DataRow row in chunk.Names.Rows)
                 {
                     if (row[0].ToString() == entry.Hash)
                     {
                         var name = new PcdbName();
                         name.Name = row[1].ToString();
                         if (haveTs)
                             name.Timestamp = (DateTime)row[2];
                         entry.Names.Add(name);
                     }
                 }
                 if (cancel || shutdown)
                     break;
                 foreach (DataRow row in chunk.Ips.Rows)
                 {
                     if (row[0].ToString() == entry.Hash)
                     {
                         var ip = new PcdbIp();
                         ip.Ip = row[1].ToString();
                         if (haveTs)
                             ip.Timestamp = (DateTime)row[2];
                         entry.Ips.Add(ip);
                     }
                 }
                 if (cancel || shutdown)
                     break;
                 if (dbGameVersion == PcdbGameVersion.COP && chunk.Gsids != null)
                 {
                     foreach (DataRow row in chunk.Gsids.Rows)
                     {
                         if (row[0].ToString() == entry.Hash)
                         {
                             var gsid = new PcdbGsid();
                             gsid.Gsid = (uint)row[1];
                             if (haveTs)
                                 gsid.Timestamp = (DateTime)row[2];
                             entry.Gsids.Add(gsid);
                         }
                     }
                 }
                 entry.Info.Item = hashRow[1].ToString();
                 sample.Add(entry);
             }
         }
         OnSearchCompleted(sample, cancel);
         cancel = false;
         IsBusy = false;
         syncSearchCompleted.Set();
     }
     IsBusy = false;
     syncSearchCompleted.Set();
 }
示例#2
0
 public void UpdateEntry(PcdbEntry parent, IPcdbField field)
 {
     database.BeginTransaction();
     switch (field.Id)
     {
     case PcdbFieldId.Comment:
         var info = (PcdbItemContainer<string>)field;
         database.UpdateHash(parent.Hash, info);
         break;
     case PcdbFieldId.Name:
         var name = (PcdbName)field;
         database.UpdateName(parent.Hash, name.Name, name.Timestamp);
         break;
     case PcdbFieldId.Ip:
         var ip = (PcdbIp)field;
         database.UpdateIp(parent.Hash, ip.Ip, ip.Timestamp);
         break;
     case PcdbFieldId.Gsid:
         var gsid = (PcdbGsid)field;
         database.UpdateGsid(parent.Hash, gsid.Gsid, gsid.Timestamp);
         break;
     }
     database.CommitTransaction();
 }