From 2ab4051c6fe720dc47e99b0c305a0d779ee02d51 Mon Sep 17 00:00:00 2001 From: Dennis Kobert Date: Sun, 19 May 2019 17:58:42 +0200 Subject: Moved Gamelogic to DSALib --- DSALib/FireBase/Database.cs | 272 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 272 insertions(+) create mode 100644 DSALib/FireBase/Database.cs (limited to 'DSALib/FireBase') diff --git a/DSALib/FireBase/Database.cs b/DSALib/FireBase/Database.cs new file mode 100644 index 0000000..8946cf0 --- /dev/null +++ b/DSALib/FireBase/Database.cs @@ -0,0 +1,272 @@ +using System.Collections.Generic; +using System.IO; +using System.Linq; +using System.Threading.Tasks; +using DSACore.DSA_Game; +using DSACore.DSA_Game.Characters; +using DSACore.Models.Database.DSA; +using DSACore.Models.Network; +using Firebase.Database; +using Firebase.Database.Query; + +namespace DSACore.FireBase +{ + public static class Database + { + public static FirebaseClient firebase; + + public static Dictionary Chars = new Dictionary(); + + public static Dictionary MeleeList = new Dictionary(); + + public static Dictionary RangedWeapons = new Dictionary(); + + public static Dictionary Talents = new Dictionary(); + + public static Dictionary Spells = new Dictionary(); + + static Database() + { + var auth = File.ReadAllText(Dsa.rootPath + "Token"); + ; // your app secret + firebase = new FirebaseClient( + "https://heldenonline-4d828.firebaseio.com/", + new FirebaseOptions + { + AuthTokenAsyncFactory = () => Task.FromResult(auth) + }); + + Initialize(); + } + + private static async Task Initialize() + { + IntializeCollection("Chars", Chars); + IntializeCollection("MeleeWeapons", MeleeList); + IntializeCollection("RangedWeapons", RangedWeapons); + IntializeCollection("Talents", Talents); + IntializeCollection("Spells", Spells); + } + + private static async Task IntializeCollection(string path, Dictionary list) + { + var temp = await firebase + .Child(path) + .OrderByKey() + .OnceAsync(); + + foreach (var firebaseObject in temp) list.Add(firebaseObject.Key, firebaseObject.Object); + } + + public static async Task AddChar(Character file, Group group) + { + DatabaseChar.LoadChar(file, out var groupChar, out var data); + + var lastChar = await firebase + .Child("Chars") + .OrderByKey() + .LimitToLast(1) + .OnceAsync(); + var id = groupChar.Id = data.Id = lastChar.First().Object.Id + 1; + + await firebase //TODO Reomve await Operators + .Child("Groups") + .Child("Char" + id) + .PutAsync(groupChar); + + await firebase + .Child("Chars") + .Child("Char" + id) + .PutAsync(data); + + Chars["Char" + id] = data; + + await firebase + .Child("Inventories") + .Child("Inventory" + id) + .PutAsync(new Inventory()); + + return id + 1; + } + + public static async Task RemoveChar(int id) + { + await firebase + .Child("Groups") + .Child("Char" + id) + .DeleteAsync(); + + await firebase + .Child("Chars") + .Child("Char" + id) + .DeleteAsync(); + + Chars.Remove("Char" + id); + + await firebase + .Child("Inventories") + .Child("Inventory" + id) + .DeleteAsync(); + } + + public static async Task GetChar(int id) + { + /*var chr = await firebase + .Child("Chars") + .Child("Char" + id) + .OnceSingleAsync(); + return chr;*/ + return Chars["Char" + id]; + } + + public static async Task GetInventory(int id) + { + var inv = await firebase + .Child("Inventories") + .Child("Inventory" + id) + .OnceSingleAsync(); + return inv; + } + + public static async Task SetInventory(int id, Inventory inv) + { + await firebase + .Child("Inventories") + .Child("Inventory" + id) + .PutAsync(inv); + } + + public static async Task AddTalent(Talent tal) + { + await firebase + .Child("Talents") + .Child(tal.Name) + .PutAsync(tal); + } + + public static async Task RemoveTalent(string talent) + { + await firebase + .Child("Talents") + .Child(talent) + .DeleteAsync(); + } + + public static async Task GetTalent(string talent) + { + /* + return await firebase + .Child("Talents") + .Child(talent) + .OnceSingleAsync();*/ + return Talents[talent]; + } + + public static async Task AddSpell(GeneralSpell tal) + { + await firebase + .Child("Spells") + .Child(tal.Name) + .PutAsync(tal); + } + + public static async Task RemoveSpell(string spell) + { + await firebase + .Child("Spells") + .Child(spell) + .DeleteAsync(); + } + + public static async Task GetSpell(string spell) + { + /*return await firebase + .Child("Spells") + .Child(spell) + .OnceSingleAsync();*/ + return Spells[spell]; + } + + + public static async Task AddWeapon(Weapon wep) + { + var collection = wep.GetType() == typeof(MeleeWeapon) ? "MeleeWeapons" : "RangedWeapons"; + await firebase + .Child(collection) + .Child(wep.Name) + .PutAsync(wep); + } + + public static async Task RemoveWeapon(string weapon, bool ranged = false) + { + var collection = ranged ? "RangedWeapons" : "MeleeWeapons"; + await firebase + .Child(collection) + .Child(weapon) + .DeleteAsync(); + } + + public static async Task GetWeapon(string weapon, bool ranged = false) + { + var collection = ranged ? "RangedWeapons" : "MeleeWeapons"; + return await firebase + .Child(collection) + .Child(weapon) + .OnceSingleAsync(); + } + + public static async Task> GetGroups() + { + var groups = await firebase + .Child("Groups") + .OrderByKey() + .OnceAsync(); + var ret = new List(); + + foreach (var firebaseObject in groups) + ret.Add(new Group(firebaseObject.Object.Name, firebaseObject.Object.Password)); + + return ret; + } + + public static async Task GetGroup(int id) + { + var group = await firebase + .Child("Groups") + .Child("Group" + id) + .OnceSingleAsync(); + return group; + } + + public static async Task AddGroup(Models.Database.Groups.Group group) + { + var lastChar = await firebase + .Child("Groups") + .OrderByKey() + .LimitToLast(1) + .OnceAsync(); + var id = group.Id = lastChar.First().Object.Id + 1; + + await firebase + .Child("Groups") + .Child("Group" + id) + .PutAsync(group); + } + + public static async void SetGroup(Models.Database.Groups.Group group) + { + await firebase + .Child("Groups") + .Child("Group" + group.Id) + .PutAsync(group); + } + + public static async void DeleteGroup(int id) + { + await firebase + .Child("Groups") + .Child("Group" + id) + .DeleteAsync(); + } + } +} \ No newline at end of file -- cgit v1.2.3-54-g00ecf