From 49b5e54c317c00a4e1105ef343233f388c088fd1 Mon Sep 17 00:00:00 2001 From: Dunestorm Date: Tue, 30 Jun 2020 20:46:42 +0100 Subject: [PATCH] Implemented initial MongoDB driver - FireLance DatabaseConnection implementation - Crude test importing from GSMParser to FireLance DB. --- DevConsole/Program.cs | 58 ++++++++++++++++--- FireLance/Class1.cs | 8 --- FireLance/DatabaseConnection.cs | 37 ++++++++++++ FireLance/FireLance.csproj | 4 ++ FireLance/Interfaces/IDatabaseConnection.cs | 2 +- FireLance/Interfaces/Models/ISaveDataModel.cs | 5 +- FireLance/Model/DirectoriesModel.cs | 21 +++++++ FireLance/Model/SaveDataModel.cs | 17 ++++++ GSMParser/DatabaseConnection.cs | 50 ++++++++++++++++ GSMParser/Main.cs | 47 --------------- 10 files changed, 182 insertions(+), 67 deletions(-) delete mode 100644 FireLance/Class1.cs create mode 100644 FireLance/DatabaseConnection.cs create mode 100644 FireLance/Model/DirectoriesModel.cs create mode 100644 FireLance/Model/SaveDataModel.cs create mode 100644 GSMParser/DatabaseConnection.cs delete mode 100644 GSMParser/Main.cs diff --git a/DevConsole/Program.cs b/DevConsole/Program.cs index 439dff5..8844d1c 100644 --- a/DevConsole/Program.cs +++ b/DevConsole/Program.cs @@ -1,4 +1,5 @@ using FireLance.Interfaces; +using FireLance.Model; using System; using System.Collections.Generic; @@ -6,24 +7,23 @@ namespace DevConsole { class Program { - public static GSMParser gsmParser = new GSMParser(); + public static GSMParser.DatabaseConnection gsmParser = new GSMParser.DatabaseConnection(); + public static FireLance.DatabaseConnection flcParser = new FireLance.DatabaseConnection(); static void Main(string[] args) { - while (true) - { - Console.WriteLine($"Connection State: {gsmParser.IsConnectionOpen()}"); - CommandsMenu(); - } + while (true) { CommandsMenu(); } } private static void CommandsMenu() { Console.WriteLine("Please select an option below:\n"); - Console.WriteLine("A. Database connection"); + Console.WriteLine("A. GSMParser Database connection"); Console.WriteLine("B. Query game by ID"); Console.WriteLine("C. Query directory by ID"); Console.WriteLine("D. Query game by NAME"); + Console.WriteLine("E. FireLance Database connection"); + Console.WriteLine("F. FireLance Import Predefined SaveData Entry"); Console.WriteLine("X. Exit application\n"); Console.Write(":"); @@ -44,6 +44,12 @@ namespace DevConsole case ConsoleKey.D: OptionD(); break; + case ConsoleKey.E: + OptionE(); + break; + case ConsoleKey.F: + OptionF(); + break; case ConsoleKey.X: Environment.Exit(0); break; @@ -66,12 +72,14 @@ namespace DevConsole { case ConsoleKey.A: Console.WriteLine("Connect to database"); - gsmParser.OpenConnection(@"C:\Users\Dunestorm\Projects\FireLance\GSMParser\games.db"); + gsmParser.OpenConnection(@"C:\Users\Dunestorm\Projects\FireLance\GSMParser\games.db", 0); break; case ConsoleKey.B: gsmParser.CloseCurrentConnection(); break; } + + Console.WriteLine($"GSMParser Connection State: {gsmParser.IsConnectionOpen()}\n"); } private static void OptionB() @@ -100,6 +108,40 @@ namespace DevConsole PrintGameEntries(gsmParser.QueryGameByName(r)); } + + private static void OptionE() + { + Console.WriteLine("A. Open DB"); + Console.WriteLine("B. Close DB"); + Console.Write(":"); + + var userInput = Console.ReadKey(); + Console.Write("\n\n"); + + switch (userInput.Key) + { + case ConsoleKey.A: + Console.WriteLine("Connect to database"); + flcParser.OpenConnection("sr3", 27017); + break; + case ConsoleKey.B: + flcParser.CloseCurrentConnection(); + break; + } + + Console.WriteLine($"FireLance Connection State: {flcParser.IsConnectionOpen()}\n"); + } + + private static void OptionF() + { + Guid guid = Guid.NewGuid(); + IEnumerable dm = gsmParser.QueryDirectoryById("600"); + foreach (var entry in dm) + { + entry.Path = guid.ToString(); + flcParser.InsertRecord("SaveData", entry); + } + } #endregion private static void PrintGameEntries(IEnumerable gameEntries) diff --git a/FireLance/Class1.cs b/FireLance/Class1.cs deleted file mode 100644 index 7b26a89..0000000 --- a/FireLance/Class1.cs +++ /dev/null @@ -1,8 +0,0 @@ -using System; - -namespace FireLance -{ - public class Class1 - { - } -} diff --git a/FireLance/DatabaseConnection.cs b/FireLance/DatabaseConnection.cs new file mode 100644 index 0000000..f838576 --- /dev/null +++ b/FireLance/DatabaseConnection.cs @@ -0,0 +1,37 @@ +using FireLance.Interfaces; +using MongoDB.Driver; + +namespace FireLance +{ + public class DatabaseConnection : IDatabaseConnection + { + IMongoDatabase mongoDatabase; + + public void CloseCurrentConnection() + { + OpenConnection(string.Empty, 0); + } + + public bool IsConnectionOpen() + { + int connectionCnt = 0; + + try { connectionCnt = mongoDatabase.Client.ListDatabases().ToList().Count; } + catch {} + + return (connectionCnt > 0) ? true : false; + } + + public void OpenConnection(string dbLocation, int port) + { + var client = new MongoClient($"mongodb://{dbLocation}:{port}"); + mongoDatabase = client.GetDatabase(dbLocation); + } + + public void InsertRecord(string table, T record) + { + var collection = mongoDatabase.GetCollection(table); + collection.InsertOne(record); + } + } +} diff --git a/FireLance/FireLance.csproj b/FireLance/FireLance.csproj index cb63190..dfb8d5c 100644 --- a/FireLance/FireLance.csproj +++ b/FireLance/FireLance.csproj @@ -4,4 +4,8 @@ netcoreapp3.1 + + + + diff --git a/FireLance/Interfaces/IDatabaseConnection.cs b/FireLance/Interfaces/IDatabaseConnection.cs index 2c30dae..ffb0b83 100644 --- a/FireLance/Interfaces/IDatabaseConnection.cs +++ b/FireLance/Interfaces/IDatabaseConnection.cs @@ -2,7 +2,7 @@ { public interface IDatabaseConnection { - public void OpenConnection(string dbLocation); + public void OpenConnection(string dbLocation, int port); public void CloseCurrentConnection(); diff --git a/FireLance/Interfaces/Models/ISaveDataModel.cs b/FireLance/Interfaces/Models/ISaveDataModel.cs index 6adca53..2d0dc17 100644 --- a/FireLance/Interfaces/Models/ISaveDataModel.cs +++ b/FireLance/Interfaces/Models/ISaveDataModel.cs @@ -4,12 +4,11 @@ namespace FireLance.Interfaces { public interface ISaveDataModel { - string GUID { get; set; } int GameID { get; set; } string SHA256Hash { get; set; } string Description { get; set; } DateTime CreationDate { get; set; } - public object SaveData { get; set; } - public uint BackupSize { get; set; } + object SaveData { get; set; } + uint BackupSize { get; set; } } } diff --git a/FireLance/Model/DirectoriesModel.cs b/FireLance/Model/DirectoriesModel.cs new file mode 100644 index 0000000..313ad74 --- /dev/null +++ b/FireLance/Model/DirectoriesModel.cs @@ -0,0 +1,21 @@ +using FireLance.Interfaces; +using System; +using System.Collections.Generic; +using System.Text; + +namespace FireLance.Model +{ + public class DirectoriesModel : IDirectoriesModel + { + public int id { get; set; } + public int GameID { get; set; } + public string SpecialPath { get; set; } + public string Path { get; set; } + public string RegHive { get; set; } + public string RegPath { get; set; } + public string RegValue { get; set; } + public string DefinedFiles { get; set; } + public string ExcludedFiles { get; set; } + public bool Recurse { get; set; } + } +} diff --git a/FireLance/Model/SaveDataModel.cs b/FireLance/Model/SaveDataModel.cs new file mode 100644 index 0000000..2041c04 --- /dev/null +++ b/FireLance/Model/SaveDataModel.cs @@ -0,0 +1,17 @@ +using FireLance.Interfaces; +using System; +using System.Collections.Generic; +using System.Text; + +namespace FireLance.Model +{ + public class SaveDataModel : ISaveDataModel + { + public int GameID { get; set; } + public string SHA256Hash { get; set; } + public string Description { get; set; } + public DateTime CreationDate { get; set; } + public object SaveData { get; set; } + public uint BackupSize { get; set; } + } +} diff --git a/GSMParser/DatabaseConnection.cs b/GSMParser/DatabaseConnection.cs new file mode 100644 index 0000000..c0e731e --- /dev/null +++ b/GSMParser/DatabaseConnection.cs @@ -0,0 +1,50 @@ +using Microsoft.Data.Sqlite; +using System; +using System.Collections.Generic; +using System.IO; +using Dapper; +using FireLance.Interfaces; + +namespace GSMParser +{ + public class DatabaseConnection : IDatabaseConnection + { + private SqliteConnection DBConnection = new SqliteConnection(); + + public void OpenConnection(string dbLocation, int port) + { + if (File.Exists(dbLocation) == false) + { + throw new FileNotFoundException(dbLocation); + } + + DBConnection = new SqliteConnection($"Data Source={dbLocation};Mode=ReadOnly"); + DBConnection.Open(); + } + + public void CloseCurrentConnection() + { + DBConnection.Close(); + } + + public bool IsConnectionOpen() + { + return Convert.ToBoolean(DBConnection.State); + } + + public IEnumerable QueryGameById(string id) + { + return DBConnection.Query(QueryBuilder.GameEntryByGameId(id), new DynamicParameters()); + } + + public IEnumerable QueryDirectoryById(string id) + { + return DBConnection.Query(QueryBuilder.DirectoryByGameId(id), new DynamicParameters()); + } + + public IEnumerable QueryGameByName(string name) + { + return DBConnection.Query(QueryBuilder.GameEntryByName(name), new DynamicParameters()); + } + } +} diff --git a/GSMParser/Main.cs b/GSMParser/Main.cs deleted file mode 100644 index d484978..0000000 --- a/GSMParser/Main.cs +++ /dev/null @@ -1,47 +0,0 @@ -using Microsoft.Data.Sqlite; -using System; -using System.Collections.Generic; -using System.IO; -using Dapper; -using FireLance.Interfaces; - -public class GSMParser : IDatabaseConnection -{ - private SqliteConnection DBConnection = new SqliteConnection(); - - public void OpenConnection(string dbLocation) - { - if (File.Exists(dbLocation) == false) - { - throw new FileNotFoundException(dbLocation); - } - - DBConnection = new SqliteConnection($"Data Source={dbLocation};Mode=ReadOnly"); - DBConnection.Open(); - } - - public void CloseCurrentConnection() - { - DBConnection.Close(); - } - - public bool IsConnectionOpen() - { - return Convert.ToBoolean(DBConnection.State); - } - - public IEnumerable QueryGameById(string id) - { - return DBConnection.Query(QueryBuilder.GameEntryByGameId(id), new DynamicParameters()); - } - - public IEnumerable QueryDirectoryById(string id) - { - return DBConnection.Query(QueryBuilder.DirectoryByGameId(id), new DynamicParameters()); - } - - public IEnumerable QueryGameByName(string name) - { - return DBConnection.Query(QueryBuilder.GameEntryByName(name), new DynamicParameters()); - } -}