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(); }
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(); }