Exemplo n.º 1
0
 public PcdbFileInfo(string path)
 {
     var db = new SQLiteDatabase(path);
     db.Open();
     Revision = PcdbUtil.GetRevision(db);
     GameVersion = PcdbUtil.GetGameVersion(db);
     db.Close();
 }
Exemplo n.º 2
0
 private PcdbFile(string path, PcdbGameVersion gameVersion)
 {
     FileName = path;
     database = new SQLiteDatabase(FileName);
     database.BeginTransaction();
     {
         database.ExecuteNonQuery(new[] {"PRAGMA encoding = 'UTF-8'", "PRAGMA foreign_keys = ON"});
         switch (gameVersion)
         {
         case PcdbGameVersion.Unknown:
             database.RollBackTransaction();
             database.Close();
             throw new NotSupportedException("Unknown game version.");
         case PcdbGameVersion.SHOC:
             database.RollBackTransaction();
             database.Close();
             throw new NotSupportedException("S.T.A.L.K.E.R.: Shadow of Chernobyl is not supported.");
         case PcdbGameVersion.CS:
             database.ExecuteNonQuery(new[]
             {
                 "CREATE TABLE DBVERSION (VERSION INTEGER UNSIGNED NOT NULL)",
                 "INSERT INTO DBVERSION VALUES ('" + (int)SupportedRevision + "')",
                 "CREATE TABLE DBTYPE (TYPEID TINYINT UNSIGNED NOT NULL)",
                 "INSERT INTO DBTYPE VALUES ('2')",
                 "CREATE TABLE HASHES (HASH CHAR(32) NOT NULL PRIMARY KEY, INFO TINYTEXT NULL)",
                 "CREATE TABLE NAMES (HASH CHAR(32) NOT NULL, NAME TINYTEXT NOT NULL, " +
                     "DATEINFO TIMESTAMP NULL, FOREIGN KEY (HASH) REFERENCES HASHES(HASH), " +
                     "PRIMARY KEY (HASH, NAME))",
                 "CREATE TABLE IPS (HASH CHAR(32) NOT NULL, IP TINYTEXT NOT NULL, " +
                     "DATEINFO TIMESTAMP NULL, FOREIGN KEY (HASH) REFERENCES HASHES(HASH), " +
                     "PRIMARY KEY (HASH, IP))"
             });
             break;
         case PcdbGameVersion.COP:
             database.ExecuteNonQuery(new[]
             {
                 "CREATE TABLE DBVERSION (VERSION INTEGER UNSIGNED NOT NULL)",
                 "INSERT INTO DBVERSION VALUES ('" + (int)SupportedRevision + "')",
                 "CREATE TABLE DBTYPE (TYPEID TINYINT UNSIGNED NOT NULL)",
                 "INSERT INTO DBTYPE VALUES ('3')",
                 "CREATE TABLE HASHES (HASH CHAR(32) NOT NULL PRIMARY KEY, INFO TINYTEXT NULL)",
                 "CREATE TABLE NAMES (HASH CHAR(32) NOT NULL, NAME TINYTEXT NOT NULL, " +
                     "DATEINFO TIMESTAMP NULL, FOREIGN KEY (HASH) REFERENCES HASHES(HASH), " +
                     "PRIMARY KEY (HASH, NAME))",
                 "CREATE TABLE IPS (HASH CHAR(32) NOT NULL, IP TINYTEXT NOT NULL, " +
                     "DATEINFO TIMESTAMP NULL, FOREIGN KEY (HASH) REFERENCES HASHES(HASH), " +
                     "PRIMARY KEY (HASH, IP))",
                 "CREATE TABLE GSIDS (HASH CHAR(32) NOT NULL, GSID INT UNSIGNED NOT NULL, " +
                     "DATEINFO TIMESTAMP NULL, FOREIGN KEY (HASH) REFERENCES HASHES(HASH), " +
                     "PRIMARY KEY (HASH, GSID))"
             });
             break;
         }
     }
     database.CommitTransaction();
     database.Close();
     Revision = (int)SupportedRevision;
 }
Exemplo n.º 3
0
 /// <summary>
 /// Returns true, if source and destination databases use same game version 
 /// or if verification process has been cancelled by user; otherwise, returns false.
 /// </summary>
 private bool VerifyOldDatabase(string path, PcdbGameVersion version)
 {
     var hashCount = 0;
     var gsidCount = 0;
     using (var reader = new StreamReader(path, Encoding.Default))
     {
         while (!reader.EndOfStream)
         {
             if (Cancelled)
                 return false;
             var buf = reader.ReadLine().TrimEnd();
             if (buf.StartsWith("[") && buf.EndsWith("]") && buf.Length == 34)
             {
                 hashCount++;
                 continue;
             }
             if (buf == "\tplayer_profile_id")
             {
                 gsidCount++;
                 continue;
             }
         }
     }
     if (version == PcdbGameVersion.COP && hashCount != gsidCount)
         return false;
     if (version != PcdbGameVersion.COP && gsidCount != 0)
         return false;
     return true;
 }
Exemplo n.º 4
0
 private void CompleteJoinQuery(StringBuilder query, SearchFilter filter, PcdbGameVersion ver)
 {
     var cop = ver == PcdbGameVersion.COP;
     query.AppendLine(" from hashes");
     query.AppendLine("join names on hashes.hash = names.hash");
     query.AppendLine("join ips on hashes.hash = ips.hash");
     if (cop)
         query.AppendLine("join gsids on hashes.hash = gsids.hash");
     query.AppendLine("where");
     var andRequired = false;
     if (filter.Hashes.Length > 0)
     {
         andRequired = true;
         AppendFilter(query, "hashes.hash", filter.Hashes, false);
     }
     if (filter.Names.Length > 0)
     {
         if (andRequired)
             query.AppendLine("and");
         andRequired = true;
         AppendFilter(query, "name", filter.Names, filter.UseNamePattern);
     }
     if (filter.Ips.Length > 0)
     {
         if (andRequired)
             query.AppendLine("and");
         andRequired = true;
         AppendFilter(query, "ip", filter.Ips, filter.UseIpPattern);
     }
     if (cop && filter.Gsids.Length > 0)
     {
         if (andRequired)
             query.AppendLine("and");
         AppendFilter(query, "gsid", filter.Gsids, false);
     }
 }
Exemplo n.º 5
0
 public static PcdbFile Create(string filename, PcdbGameVersion type)
 {
     if (File.Exists(filename))
         File.Delete(filename);
     return new PcdbFile(filename, type);
 }
Exemplo n.º 6
0
 private void OnConnectionStatusChanged(bool connected)
 {
     if (connected)
         dbGameVersion = database.GetGameVersion();
     if (ConnectionStatusChanged != null)
         ConnectionStatusChanged(connected);
 }