From f89f308c525e9deebc6d2cf6416e27dfe1a299dc Mon Sep 17 00:00:00 2001 From: Dennis Kobert Date: Sun, 19 May 2019 16:03:38 +0200 Subject: Cleanup DiscoBot Project --- FireBase/Offline/OfflineDatabase.cs | 71 ++++++++++++++++--------------------- 1 file changed, 31 insertions(+), 40 deletions(-) (limited to 'FireBase/Offline/OfflineDatabase.cs') diff --git a/FireBase/Offline/OfflineDatabase.cs b/FireBase/Offline/OfflineDatabase.cs index 9cebf9c..3e6e7d8 100644 --- a/FireBase/Offline/OfflineDatabase.cs +++ b/FireBase/Offline/OfflineDatabase.cs @@ -5,7 +5,6 @@ using System.Collections.Generic; using System.IO; using System.Linq; - using LiteDB; /// @@ -23,21 +22,18 @@ /// Custom string which will get appended to the file name. public OfflineDatabase(Type itemType, string filenameModifier) { - var fullName = this.GetFileName(itemType.ToString()); - if(fullName.Length > 100) - { - fullName = fullName.Substring(0, 100); - } + var fullName = GetFileName(itemType.ToString()); + if (fullName.Length > 100) fullName = fullName.Substring(0, 100); - BsonMapper mapper = BsonMapper.Global; + var mapper = BsonMapper.Global; mapper.Entity().Id(o => o.Key); - string root = Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData); - string filename = fullName + filenameModifier + ".db"; + var root = Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData); + var filename = fullName + filenameModifier + ".db"; var path = Path.Combine(root, filename); - this.db = new LiteRepository(new LiteDatabase(path, mapper)); + db = new LiteRepository(new LiteDatabase(path, mapper)); - this.cache = db.Database.GetCollection().FindAll() + cache = db.Database.GetCollection().FindAll() .ToDictionary(o => o.Key, o => o); } @@ -45,24 +41,24 @@ /// Gets the number of elements contained in the . /// /// The number of elements contained in the . - public int Count => this.cache.Count; + public int Count => cache.Count; /// /// Gets a value indicating whether this is a read-only collection. /// - public bool IsReadOnly => this.cache.IsReadOnly; + public bool IsReadOnly => cache.IsReadOnly; /// /// Gets an containing the keys of the . /// /// An containing the keys of the object that implements . - public ICollection Keys => this.cache.Keys; + public ICollection Keys => cache.Keys; /// /// Gets an containing the values in the . /// /// An containing the values in the object that implements . - public ICollection Values => this.cache.Values; + public ICollection Values => cache.Values; /// /// Gets or sets the element with the specified key. @@ -71,15 +67,12 @@ /// The element with the specified key. public OfflineEntry this[string key] { - get - { - return this.cache[key]; - } + get => cache[key]; set { - this.cache[key] = value; - this.db.Upsert(value); + cache[key] = value; + db.Upsert(value); } } @@ -89,12 +82,12 @@ /// An enumerator that can be used to iterate through the collection. public IEnumerator> GetEnumerator() { - return this.cache.GetEnumerator(); + return cache.GetEnumerator(); } IEnumerator IEnumerable.GetEnumerator() { - return this.GetEnumerator(); + return GetEnumerator(); } /// @@ -103,7 +96,7 @@ /// The object to add to the . public void Add(KeyValuePair item) { - this.Add(item.Key, item.Value); + Add(item.Key, item.Value); } /// @@ -111,8 +104,8 @@ /// public void Clear() { - this.cache.Clear(); - this.db.Delete(Query.All()); + cache.Clear(); + db.Delete(Query.All()); } /// @@ -122,7 +115,7 @@ /// True if is found in the ; otherwise, false. public bool Contains(KeyValuePair item) { - return this.ContainsKey(item.Key); + return ContainsKey(item.Key); } /// @@ -132,7 +125,7 @@ /// The zero-based index in at which copying begins. public void CopyTo(KeyValuePair[] array, int arrayIndex) { - this.cache.CopyTo(array, arrayIndex); + cache.CopyTo(array, arrayIndex); } /// @@ -142,7 +135,7 @@ /// True if was successfully removed from the ; otherwise, false. This method also returns false if is not found in the original . public bool Remove(KeyValuePair item) { - return this.Remove(item.Key); + return Remove(item.Key); } /// @@ -152,7 +145,7 @@ /// True if the contains an element with the key; otherwise, false. public bool ContainsKey(string key) { - return this.cache.ContainsKey(key); + return cache.ContainsKey(key); } /// @@ -162,8 +155,8 @@ /// The object to use as the value of the element to add. public void Add(string key, OfflineEntry value) { - this.cache.Add(key, value); - this.db.Insert(value); + cache.Add(key, value); + db.Insert(value); } /// @@ -173,8 +166,8 @@ /// True if the element is successfully removed; otherwise, false. This method also returns false if was not found in the original . public bool Remove(string key) { - this.cache.Remove(key); - return this.db.Delete(key); + cache.Remove(key); + return db.Delete(key); } /// @@ -184,18 +177,16 @@ /// True if the object that implements contains an element with the specified key; otherwise, false. public bool TryGetValue(string key, out OfflineEntry value) { - return this.cache.TryGetValue(key, out value); + return cache.TryGetValue(key, out value); } private string GetFileName(string fileName) { - var invalidChars = new[] { '`', '[', ',', '=' }; - foreach(char c in invalidChars.Concat(System.IO.Path.GetInvalidFileNameChars()).Distinct()) - { + var invalidChars = new[] {'`', '[', ',', '='}; + foreach (var c in invalidChars.Concat(Path.GetInvalidFileNameChars()).Distinct()) fileName = fileName.Replace(c, '_'); - } return fileName; } } -} +} \ No newline at end of file -- cgit v1.2.3-54-g00ecf From c4d046858e0822b7c2c540ac2368b2c0e88e7a26 Mon Sep 17 00:00:00 2001 From: Dennis Kobert Date: Sun, 19 May 2019 17:00:02 +0200 Subject: general refectoring added 42 as dummy Token --- DSACore/Auxiliary/Calculator/Argument.cs | 8 +- DSACore/Auxiliary/Calculator/ISolvable.cs | 2 +- DSACore/Auxiliary/Calculator/Operator.cs | 2 +- DSACore/Auxiliary/Calculator/Ops.cs | 2 +- DSACore/Auxiliary/Calculator/StringSolver.cs | 21 ++- DSACore/Auxiliary/CommandInfo.cs | 6 +- DSACore/Auxiliary/SpellCorrect.cs | 10 +- DSACore/Auxiliary/TalentEnumerableExtension.cs | 4 +- DSACore/Auxiliary/WeaponImporter.cs | 10 +- DSACore/Commands/CommandHandler.cs | 4 +- DSACore/Commands/FileHandler.cs | 11 +- DSACore/Commands/Gm.cs | 9 +- DSACore/Commands/HeldList.cs | 2 +- DSACore/Commands/Help.cs | 27 +--- DSACore/Commands/LebenUndAstral.cs | 4 +- DSACore/Commands/List.cs | 3 +- DSACore/Commands/MiscCommands.cs | 13 +- DSACore/Commands/NpcCommands.cs | 3 - DSACore/Controllers/CommandsController.cs | 7 +- DSACore/Controllers/LobbyController.cs | 5 +- DSACore/Controllers/TokensController.cs | 11 +- DSACore/DSA_Game/Characters/Character.cs | 14 +- DSACore/DSA_Game/Characters/NPC.cs | 4 - DSACore/DSA_Game/Dsa.cs | 15 +- DSACore/DSA_Game/Save/Properties.cs | 9 +- DSACore/DSA_Game/Save/SaveCommand.cs | 10 +- DSACore/DSA_Game/Save/Session.cs | 7 +- DSACore/FireBase/Database.cs | 55 ++++---- DSACore/Hubs/Login.cs | 30 ++-- DSACore/Models/Database/DSA/DatabaseChar.cs | 3 +- DSACore/Models/Database/DSA/Weapon.cs | 18 +-- DSACore/Models/Network/Command.cs | 4 +- DSACore/Models/Network/CommandResponse.cs | 7 +- DSACore/Models/Network/Group.cs | 2 - DSACore/Models/Network/Token.cs | 10 +- DSACore/Models/Network/User.cs | 7 +- DSACore/Program.cs | 10 +- DSACore/Startup.cs | 9 +- DSALib/Characters/Being.cs | 4 +- DSALib/Characters/Critter.cs | 53 ++++--- DSALib/Characters/ICombatant.cs | 8 +- DSALib/CritterAttack.cs | 8 +- FireBase/ExceptionEventArgs.cs | 10 +- FireBase/Extensions/ObservableExtensions.cs | 15 +- FireBase/Extensions/TaskExtensions.cs | 10 +- FireBase/FirebaseClient.cs | 34 ++--- FireBase/FirebaseException.cs | 16 +-- FireBase/FirebaseKeyGenerator.cs | 15 +- FireBase/FirebaseObject.cs | 10 +- FireBase/FirebaseOptions.cs | 30 ++-- FireBase/Http/HttpClientExtensions.cs | 32 ++--- FireBase/Http/PostResult.cs | 4 +- FireBase/ObservableExtensions.cs | 16 +-- FireBase/Offline/ConcurrentOfflineDatabase.cs | 128 +++++++++++------ FireBase/Offline/DatabaseExtensions.cs | 111 ++++++++++----- FireBase/Offline/ISetHandler.cs | 8 +- FireBase/Offline/InitialPullStrategy.cs | 10 +- FireBase/Offline/Internals/MemberAccessVisitor.cs | 16 +-- FireBase/Offline/OfflineCacheAdapter.cs | 64 ++++----- FireBase/Offline/OfflineDatabase.cs | 126 +++++++++++------ FireBase/Offline/OfflineEntry.cs | 43 +++--- FireBase/Offline/RealtimeDatabase.cs | 118 +++++++++------- FireBase/Offline/SetHandler.cs | 8 +- FireBase/Offline/StreamingOptions.cs | 10 +- FireBase/Offline/SyncOptions.cs | 10 +- FireBase/Query/AuthQuery.cs | 14 +- FireBase/Query/ChildQuery.cs | 14 +- FireBase/Query/FilterQuery.cs | 38 +++-- FireBase/Query/FirebaseQuery.cs | 162 +++++++++++----------- FireBase/Query/IFirebaseQuery.cs | 28 ++-- FireBase/Query/OrderQuery.cs | 12 +- FireBase/Query/ParameterQuery.cs | 18 +-- FireBase/Query/QueryExtensions.cs | 68 ++++----- FireBase/Query/QueryFactoryExtensions.cs | 85 +++++++----- FireBase/Query/SilentQuery.cs | 2 +- FireBase/Streaming/FirebaseCache.cs | 39 +++--- FireBase/Streaming/FirebaseEvent.cs | 8 +- FireBase/Streaming/FirebaseEventSource.cs | 14 +- FireBase/Streaming/FirebaseEventType.cs | 6 +- FireBase/Streaming/FirebaseSubscription.cs | 38 +++-- FireBase/Streaming/NonBlockingStreamReader.cs | 21 +-- ZooBOTanica/CritCreate.cs | 11 +- ZooBOTanica/Program.cs | 5 +- ZooBOTanica/Properties/AssemblyInfo.cs | 1 - 84 files changed, 947 insertions(+), 932 deletions(-) (limited to 'FireBase/Offline/OfflineDatabase.cs') diff --git a/DSACore/Auxiliary/Calculator/Argument.cs b/DSACore/Auxiliary/Calculator/Argument.cs index 14982aa..5ed9ee3 100644 --- a/DSACore/Auxiliary/Calculator/Argument.cs +++ b/DSACore/Auxiliary/Calculator/Argument.cs @@ -1,9 +1,9 @@ -namespace DSACore.Auxiliary.Calculator -{ - using System; +using System; +namespace DSACore.Auxiliary.Calculator +{ /// - /// Provides an ISolvable class to save numbers. The class handles Argument checking and conversion from string to int. + /// Provides an ISolvable class to save numbers. The class handles Argument checking and conversion from string to int. /// public class Argument : ISolvable { diff --git a/DSACore/Auxiliary/Calculator/ISolvable.cs b/DSACore/Auxiliary/Calculator/ISolvable.cs index 2acbd11..7be4d19 100644 --- a/DSACore/Auxiliary/Calculator/ISolvable.cs +++ b/DSACore/Auxiliary/Calculator/ISolvable.cs @@ -1,7 +1,7 @@ namespace DSACore.Auxiliary.Calculator { /// - /// Object has to be able to return an integer as it's value + /// Object has to be able to return an integer as it's value /// public interface ISolvable { diff --git a/DSACore/Auxiliary/Calculator/Operator.cs b/DSACore/Auxiliary/Calculator/Operator.cs index ed46186..31b2a9b 100644 --- a/DSACore/Auxiliary/Calculator/Operator.cs +++ b/DSACore/Auxiliary/Calculator/Operator.cs @@ -4,7 +4,7 @@ using DSACorev.Auxiliary.Calculator; namespace DSACore.Auxiliary.Calculator { /// - /// The Operator Class represents a binary operator with tow Arguments and an Operation type + /// The Operator Class represents a binary operator with tow Arguments and an Operation type /// public class Operator : ISolvable { diff --git a/DSACore/Auxiliary/Calculator/Ops.cs b/DSACore/Auxiliary/Calculator/Ops.cs index c804257..a5c9a2d 100644 --- a/DSACore/Auxiliary/Calculator/Ops.cs +++ b/DSACore/Auxiliary/Calculator/Ops.cs @@ -1,7 +1,7 @@ namespace DSACorev.Auxiliary.Calculator { /// - /// The Different Operations, witch can be performed in execution-order + /// The Different Operations, witch can be performed in execution-order /// public enum Ops { diff --git a/DSACore/Auxiliary/Calculator/StringSolver.cs b/DSACore/Auxiliary/Calculator/StringSolver.cs index 212f812..b2a7d83 100644 --- a/DSACore/Auxiliary/Calculator/StringSolver.cs +++ b/DSACore/Auxiliary/Calculator/StringSolver.cs @@ -5,28 +5,20 @@ using DSACorev.Auxiliary.Calculator; namespace DSACore.Auxiliary.Calculator { - using System; - using System.Collections.Generic; - using System.Linq; - /// - /// The StringSolver divides the calculation string into operations and SubStringSolvers if the string contains parentheses + /// The StringSolver divides the calculation string into operations and SubStringSolvers if the string contains + /// parentheses /// public class StringSolver : ISolvable { - private readonly string input; private readonly List arguments = new List(); + private readonly string input; public StringSolver(string input) { this.input = input; } - public override string ToString() - { - return "(0+" + input.Replace(" ", string.Empty).ToLower() + ")"; - } - public int Solve() { var workInput = "0+" + input.Replace(" ", string.Empty).ToLower(); @@ -42,6 +34,11 @@ namespace DSACore.Auxiliary.Calculator return ((ISolvable) arguments.First()).Solve(); } + public override string ToString() + { + return "(0+" + input.Replace(" ", string.Empty).ToLower() + ")"; + } + private static string GetInner(ref string input) // extract the inner bracket an remove the section from the input string { @@ -123,7 +120,7 @@ namespace DSACore.Auxiliary.Calculator switch (c) { case ')': - throw new ArgumentException($"Unmögliche Anordnung von Klammern"); + throw new ArgumentException("Unmögliche Anordnung von Klammern"); case '(': arguments.Add(new StringSolver(GetInner(ref workInput))); index = -1; diff --git a/DSACore/Auxiliary/CommandInfo.cs b/DSACore/Auxiliary/CommandInfo.cs index 9afe6c0..1472587 100644 --- a/DSACore/Auxiliary/CommandInfo.cs +++ b/DSACore/Auxiliary/CommandInfo.cs @@ -1,8 +1,4 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; +using System.Linq; namespace DSACore.Auxiliary { diff --git a/DSACore/Auxiliary/SpellCorrect.cs b/DSACore/Auxiliary/SpellCorrect.cs index 3ef7bb6..77d1cf3 100644 --- a/DSACore/Auxiliary/SpellCorrect.cs +++ b/DSACore/Auxiliary/SpellCorrect.cs @@ -1,9 +1,9 @@ -namespace DSACore.Auxiliary -{ - using System; - using System.Diagnostics; - using System.Linq; +using System; +using System.Diagnostics; +using System.Linq; +namespace DSACore.Auxiliary +{ public class SpellCorrect : StringComparer { public const int ErrorThreshold = 94100; diff --git a/DSACore/Auxiliary/TalentEnumerableExtension.cs b/DSACore/Auxiliary/TalentEnumerableExtension.cs index 159480d..d83114c 100644 --- a/DSACore/Auxiliary/TalentEnumerableExtension.cs +++ b/DSACore/Auxiliary/TalentEnumerableExtension.cs @@ -1,7 +1,7 @@ -using DSACore.DSA_Game.Characters; -using System.Collections.Generic; +using System.Collections.Generic; using System.Linq; using System.Text; +using DSACore.DSA_Game.Characters; using DSALib; namespace DSACore.Auxiliary diff --git a/DSACore/Auxiliary/WeaponImporter.cs b/DSACore/Auxiliary/WeaponImporter.cs index ab51efb..3375236 100644 --- a/DSACore/Auxiliary/WeaponImporter.cs +++ b/DSACore/Auxiliary/WeaponImporter.cs @@ -1,5 +1,4 @@ -using DSACore.Models.Database; -using System; +using System; using System.Collections.Generic; using System.Linq; using System.Net.Http; @@ -7,14 +6,13 @@ using System.Text.RegularExpressions; using System.Threading.Tasks; using DSACore.FireBase; using DSACore.Models.Database.DSA; -using Group = System.Text.RegularExpressions.Group; namespace DSACore.Auxiliary { public class WeaponImporter { - private List Weapons = new List(); - private List Range = new List(); + private readonly List Range = new List(); + private readonly List Weapons = new List(); public async Task DownloadWeapons() { @@ -48,7 +46,7 @@ namespace DSACore.Auxiliary { var talent = lines[j]; - var values = await client.GetStringAsync($"http://diarium.eu/dsa4-forge/ajax/calculate/" + i + "/" + + var values = await client.GetStringAsync("http://diarium.eu/dsa4-forge/ajax/calculate/" + i + "/" + ids[j] + "/0/0/0/0/0/10/0/0/0"); values = Regex.Unescape(values.Replace(@"\t", "")); diff --git a/DSACore/Commands/CommandHandler.cs b/DSACore/Commands/CommandHandler.cs index 6879045..f74f87f 100644 --- a/DSACore/Commands/CommandHandler.cs +++ b/DSACore/Commands/CommandHandler.cs @@ -1,7 +1,7 @@ using System; using DSACore.Auxiliary; +using DSACore.Auxiliary.Calculator; using DSACore.DSA_Game; -using DSACore.Models; using DSACore.Models.Network; namespace DSACore.Commands @@ -49,7 +49,7 @@ namespace DSACore.Commands res = RandomMisc.Roll(cmd.CmdText + " " + cmd.Cmdmodifier); break; case "solve": - res = new Auxiliary.Calculator.StringSolver(cmd.CmdText + cmd.Cmdmodifier).Solve().ToString(); + res = new StringSolver(cmd.CmdText + cmd.Cmdmodifier).Solve().ToString(); break; case "npc": res = NpcCommands.CreateNpc(cmd.CharId, cmd.CmdTexts, cmd.Cmdmodifier); diff --git a/DSACore/Commands/FileHandler.cs b/DSACore/Commands/FileHandler.cs index d8fb585..bce7c54 100644 --- a/DSACore/Commands/FileHandler.cs +++ b/DSACore/Commands/FileHandler.cs @@ -1,13 +1,12 @@ -using DSACore.DSA_Game; +using System; +using System.Linq; +using System.Net; +using DSACore.DSA_Game; using DSACore.DSA_Game.Characters; +using DSALib; namespace DSACore.Commands { - using System; - using System.Linq; - using System.Net; - using DSALib; - public class FileHandler { public static string AddChar(ulong id, string url) diff --git a/DSACore/Commands/Gm.cs b/DSACore/Commands/Gm.cs index 59b3129..98b62db 100644 --- a/DSACore/Commands/Gm.cs +++ b/DSACore/Commands/Gm.cs @@ -1,12 +1,5 @@ -using DSACore.Auxiliary; -using DSACore.DSA_Game; - -namespace DSACore.Commands +namespace DSACore.Commands { - using System.Linq; - using System.Threading.Tasks; - using DSALib.Characters; - /*public class Iam { diff --git a/DSACore/Commands/HeldList.cs b/DSACore/Commands/HeldList.cs index 73861b7..370af34 100644 --- a/DSACore/Commands/HeldList.cs +++ b/DSACore/Commands/HeldList.cs @@ -1,9 +1,9 @@ using System.Collections.Generic; using System.Linq; using System.Text; -using DSACore.DSA_Game.Characters; using DSACore.Auxiliary; using DSACore.DSA_Game; +using DSACore.DSA_Game.Characters; namespace DSACore.Commands { diff --git a/DSACore/Commands/Help.cs b/DSACore/Commands/Help.cs index 6458c20..974c44c 100644 --- a/DSACore/Commands/Help.cs +++ b/DSACore/Commands/Help.cs @@ -1,39 +1,18 @@ using System.Linq; -using System.Threading.Tasks; using DSACore.Auxiliary; +using DSACore.DSA_Game.Save; namespace DSACore.Commands { public class Help { - static Help() - { - /*TextReader stream = new StreamReader(@"..\..\Help.json"); // Load command-description file - var reader = new JsonTextReader(stream); // create stream reader - - reader.Read(); // step into structure, until the array starts - reader.Read(); - reader.Read(); - - try - { - var test = new JsonSerializer().Deserialize>(reader); // Deserialize Data and create CommandInfo Struct - - Commands.AddRange(test); // Add new CommandInfos to List - } - catch (Exception e) - { - // ignored - }*/ - } - //public static List Commands { get; } = new List(); public static string Get_Specific_Help(string command) { // return command specific help - var com = DSA_Game.Save.Properties.CommandInfos + var com = Properties.CommandInfos .OrderBy(x => SpellCorrect.CompareEasy(x.Name, command.ToLower())).First(); // get best fit command return com.GetDescription(); } @@ -41,7 +20,7 @@ namespace DSACore.Commands public static string Get_Generic_Help() { var res = ""; - foreach (var com in DSA_Game.Save.Properties.CommandInfos) + foreach (var com in Properties.CommandInfos) { var first_column_width = 8; res += ("!" + com.Name + ": ").AddSpaces(first_column_width) + com.Brief; diff --git a/DSACore/Commands/LebenUndAstral.cs b/DSACore/Commands/LebenUndAstral.cs index 7e0cb5c..a671296 100644 --- a/DSACore/Commands/LebenUndAstral.cs +++ b/DSACore/Commands/LebenUndAstral.cs @@ -1,8 +1,6 @@ using System; -using System.Linq; -using System.Threading.Tasks; -using DSACore.DSA_Game; using DSACore.Auxiliary; +using DSACore.DSA_Game; using DSALib.Characters; namespace DSACore.Commands diff --git a/DSACore/Commands/List.cs b/DSACore/Commands/List.cs index 2c8f3d0..7fc682f 100644 --- a/DSACore/Commands/List.cs +++ b/DSACore/Commands/List.cs @@ -1,9 +1,8 @@ using System; using System.Collections.Generic; using System.Linq; -using System.Threading.Tasks; -using DSACore.DSA_Game; using DSACore.Audio; +using DSACore.DSA_Game; namespace DSACore.Commands { diff --git a/DSACore/Commands/MiscCommands.cs b/DSACore/Commands/MiscCommands.cs index 36d5fb1..ebd1598 100644 --- a/DSACore/Commands/MiscCommands.cs +++ b/DSACore/Commands/MiscCommands.cs @@ -1,15 +1,4 @@ -using System; -using System.Collections.Generic; -using System.IO; -using System.Linq; -using System.Net.Http; -using System.Text; -using System.Threading.Tasks; -using DSACore.DSA_Game; -using DSACore.Auxiliary; -using Microsoft.AspNetCore.Hosting.Internal; - -namespace DSACore.Commands +namespace DSACore.Commands { public class MiscCommands { diff --git a/DSACore/Commands/NpcCommands.cs b/DSACore/Commands/NpcCommands.cs index 9a27e6a..95243ca 100644 --- a/DSACore/Commands/NpcCommands.cs +++ b/DSACore/Commands/NpcCommands.cs @@ -1,12 +1,9 @@ using System; using System.Collections.Generic; using System.Linq; -using System.Threading.Tasks; using DSACore.Characters; using DSACore.DSA_Game; using DSACore.DSA_Game.Characters; -using DSACore.Auxiliary; -using Microsoft.AspNetCore.Mvc.Internal; namespace DSACore.Commands { diff --git a/DSACore/Controllers/CommandsController.cs b/DSACore/Controllers/CommandsController.cs index e9700ff..5addf82 100644 --- a/DSACore/Controllers/CommandsController.cs +++ b/DSACore/Controllers/CommandsController.cs @@ -1,8 +1,5 @@ using System; -using System.Collections.Generic; -using System.Linq; -using System.Threading.Tasks; -using DSACore.Models; +using DSACore.Commands; using DSACore.Models.Network; using Microsoft.AspNetCore.Mvc; @@ -33,7 +30,7 @@ namespace DSACore.Controllers { try { - return Commands.CommandHandler.ExecuteCommand(cmd).message; + return CommandHandler.ExecuteCommand(cmd).message; } catch (Exception e) { diff --git a/DSACore/Controllers/LobbyController.cs b/DSACore/Controllers/LobbyController.cs index 100fb5b..df22607 100644 --- a/DSACore/Controllers/LobbyController.cs +++ b/DSACore/Controllers/LobbyController.cs @@ -1,5 +1,6 @@ -using DSACore.Models.Network; using System; +using DSACore.Commands; +using DSACore.Models.Network; using Microsoft.AspNetCore.Mvc; namespace DSACore.Controllers @@ -19,7 +20,7 @@ namespace DSACore.Controllers { try { - return Commands.CommandHandler.ExecuteCommand(cmd).message; + return CommandHandler.ExecuteCommand(cmd).message; } catch (Exception e) { diff --git a/DSACore/Controllers/TokensController.cs b/DSACore/Controllers/TokensController.cs index 6a59db4..a85cabe 100644 --- a/DSACore/Controllers/TokensController.cs +++ b/DSACore/Controllers/TokensController.cs @@ -1,3 +1,4 @@ +using DSACore.Hubs; using Microsoft.AspNetCore.Mvc; namespace DSACore.Controllers @@ -10,13 +11,15 @@ namespace DSACore.Controllers [HttpGet("{token}")] public ActionResult Get(string token) { - if (!int.TryParse(token, out var inttoken)) + if (!int.TryParse(token, out var intToken)) return BadRequest("The token has to be a 32 bit unsigned integer"); - if (!Hubs.Users.Tokens.Exists(x => x.GetHashCode() == inttoken)) return NotFound(); + if (intToken == 42) return Ok("Scribble"); + + if (!Users.Tokens.Exists(x => x.GetHashCode() == intToken)) return NotFound(); - var group = Hubs.Users.Tokens.Find(x => x.GetHashCode() == inttoken); - return Ok(group); + var group = Users.Tokens.Find(x => x.GetHashCode() == intToken); + return Ok(group.Group); } } } \ No newline at end of file diff --git a/DSACore/DSA_Game/Characters/Character.cs b/DSACore/DSA_Game/Characters/Character.cs index 62d2e11..ac890cb 100644 --- a/DSACore/DSA_Game/Characters/Character.cs +++ b/DSACore/DSA_Game/Characters/Character.cs @@ -1,17 +1,15 @@ -using System.IO; +using System; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using System.Text; +using System.Xml; using DSACore.Auxiliary; using DSALib; using DSALib.Characters; namespace DSACore.DSA_Game.Characters { - using System; - using System.Collections.Generic; - using System.Linq; - using System.Text; - using System.Xml; - - public class Character : Being, ICharacter { public Character() diff --git a/DSACore/DSA_Game/Characters/NPC.cs b/DSACore/DSA_Game/Characters/NPC.cs index e6b7bed..75c3fe9 100644 --- a/DSACore/DSA_Game/Characters/NPC.cs +++ b/DSACore/DSA_Game/Characters/NPC.cs @@ -4,10 +4,6 @@ using DSALib.Characters; namespace DSACore.Characters { - using System; - using Auxiliary; - using DSACore.DSA_Game.Characters; - public class Npc : Being, ICharacter { private readonly int mean, stDv; diff --git a/DSACore/DSA_Game/Dsa.cs b/DSACore/DSA_Game/Dsa.cs index f2ffe48..18d0b81 100644 --- a/DSACore/DSA_Game/Dsa.cs +++ b/DSACore/DSA_Game/Dsa.cs @@ -1,18 +1,13 @@ using System; -using DSACore.Auxiliary; -using DSACore.FireBase; +using System.Collections.Generic; +using System.Linq; +using DSACore.DSA_Game.Characters; +using DSACore.DSA_Game.Save; using DSALib; using DSALib.Characters; -using Microsoft.EntityFrameworkCore.Design; namespace DSACore.DSA_Game { - using System.Collections.Generic; - using System.IO; - using System.Linq; - using Characters; - using Save; - public static class Dsa { #if DEBUG @@ -59,7 +54,7 @@ namespace DSACore.DSA_Game } */ - Properties.Deserialize(rootPath + "Properties"); + Properties.Deserialize(); Properties.Serialize(rootPath + "Properties"); diff --git a/DSACore/DSA_Game/Save/Properties.cs b/DSACore/DSA_Game/Save/Properties.cs index 50bd8fa..7eba911 100644 --- a/DSACore/DSA_Game/Save/Properties.cs +++ b/DSACore/DSA_Game/Save/Properties.cs @@ -1,4 +1,5 @@ using System; +using System.Collections; using System.Collections.Generic; using System.IO; using System.Linq; @@ -8,10 +9,6 @@ using Newtonsoft.Json; namespace DSACore.DSA_Game.Save { - using System.Collections; - using System.IO; - using Newtonsoft.Json; - public static class Properties { public static Dictionary objects; @@ -64,7 +61,7 @@ namespace DSACore.DSA_Game.Save foreach (var o in objects) { var assembly = o.Value is IList list - ? ((IList) list)[0]?.GetType().FullName + ? list[0]?.GetType().FullName : o.Value.GetType().FullName; var name = path + assembly.Replace('.', '-') + ".json"; @@ -76,7 +73,7 @@ namespace DSACore.DSA_Game.Save catch (Exception e) { // ignored - Console.WriteLine($"Speichern von Save-File fehlgeschlagen." + e); + Console.WriteLine("Speichern von Save-File fehlgeschlagen." + e); } } } diff --git a/DSACore/DSA_Game/Save/SaveCommand.cs b/DSACore/DSA_Game/Save/SaveCommand.cs index 80d4426..f358047 100644 --- a/DSACore/DSA_Game/Save/SaveCommand.cs +++ b/DSACore/DSA_Game/Save/SaveCommand.cs @@ -1,18 +1,16 @@ using System; +using System.IO; using System.Linq; -using System.Threading.Tasks; namespace DSACore.DSA_Game.Save { - using System.IO; - public class SaveCommand { public void LoadSession(string name = "") { if (name.Equals("?") || name.Equals(string.Empty)) { - Console.WriteLine($"Gespeicherte Sessions:"); + Console.WriteLine("Gespeicherte Sessions:"); Console.WriteLine(ListSessions()); return; } @@ -32,7 +30,7 @@ namespace DSACore.DSA_Game.Save if (name.Equals("?") || name.Equals(string.Empty)) { - Console.WriteLine($"Gespeicherte Sessions:"); + Console.WriteLine("Gespeicherte Sessions:"); Console.WriteLine(ListSessions()); return; } @@ -49,7 +47,7 @@ namespace DSACore.DSA_Game.Save { Directory.CreateDirectory(path); Dsa.Session.SessionName = name; - Dsa.Session.Save(path + "\\" + name + $"-0.json"); + Dsa.Session.Save(path + "\\" + name + "-0.json"); } Console.WriteLine($"{name} wurde gespeichert"); diff --git a/DSACore/DSA_Game/Save/Session.cs b/DSACore/DSA_Game/Save/Session.cs index 595f0e8..6944fb1 100644 --- a/DSACore/DSA_Game/Save/Session.cs +++ b/DSACore/DSA_Game/Save/Session.cs @@ -1,12 +1,11 @@ using System; using System.Collections.Generic; +using System.IO; +using DSACore.DSA_Game.Characters; +using Newtonsoft.Json; namespace DSACore.DSA_Game.Save { - using System.IO; - using Characters; - using Newtonsoft.Json; - public class Session { public static string DirectoryPath { get; set; } = Dsa.rootPath + @"sessions"; diff --git a/DSACore/FireBase/Database.cs b/DSACore/FireBase/Database.cs index abe2b92..8946cf0 100644 --- a/DSACore/FireBase/Database.cs +++ b/DSACore/FireBase/Database.cs @@ -1,14 +1,13 @@ -using DSACore.DSA_Game.Characters; -using DSACore.Models.Database; -using Firebase.Database; -using Firebase.Database.Query; -using System.Collections.Generic; +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.Database.Groups; - +using DSACore.Models.Network; +using Firebase.Database; +using Firebase.Database.Query; namespace DSACore.FireBase { @@ -16,9 +15,19 @@ namespace DSACore.FireBase { 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_Game.Dsa.rootPath + "Token"); + var auth = File.ReadAllText(Dsa.rootPath + "Token"); ; // your app secret firebase = new FirebaseClient( "https://heldenonline-4d828.firebaseio.com/", @@ -49,17 +58,7 @@ namespace DSACore.FireBase foreach (var firebaseObject in temp) list.Add(firebaseObject.Key, firebaseObject.Object); } - 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(); - - public static async Task AddChar(Character file, Models.Network.Group group) + public static async Task AddChar(Character file, Group group) { DatabaseChar.LoadChar(file, out var groupChar, out var data); @@ -216,36 +215,36 @@ namespace DSACore.FireBase .OnceSingleAsync(); } - public static async Task> GetGroups() + public static async Task> GetGroups() { var groups = await firebase .Child("Groups") .OrderByKey() - .OnceAsync(); - var ret = new List(); + .OnceAsync(); + var ret = new List(); foreach (var firebaseObject in groups) - ret.Add(new Models.Network.Group(firebaseObject.Object.Name, firebaseObject.Object.Password)); + ret.Add(new Group(firebaseObject.Object.Name, firebaseObject.Object.Password)); return ret; } - public static async Task GetGroup(int id) + public static async Task GetGroup(int id) { var group = await firebase .Child("Groups") .Child("Group" + id) - .OnceSingleAsync(); + .OnceSingleAsync(); return group; } - public static async Task AddGroup(Group group) + public static async Task AddGroup(Models.Database.Groups.Group group) { var lastChar = await firebase .Child("Groups") .OrderByKey() .LimitToLast(1) - .OnceAsync(); + .OnceAsync(); var id = group.Id = lastChar.First().Object.Id + 1; await firebase @@ -254,7 +253,7 @@ namespace DSACore.FireBase .PutAsync(group); } - public static async void SetGroup(Group group) + public static async void SetGroup(Models.Database.Groups.Group group) { await firebase .Child("Groups") diff --git a/DSACore/Hubs/Login.cs b/DSACore/Hubs/Login.cs index f589e49..1f6ca39 100644 --- a/DSACore/Hubs/Login.cs +++ b/DSACore/Hubs/Login.cs @@ -1,14 +1,14 @@ -using DSACore.DSA_Game.Characters; -using DSACore.FireBase; -using DSACore.Models.Network; -using Microsoft.AspNetCore.SignalR; -using System; +using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Text; using System.Threading.Tasks; -using Microsoft.CodeAnalysis.CSharp.Syntax; +using DSACore.Commands; +using DSACore.DSA_Game.Characters; +using DSACore.FireBase; +using DSACore.Models.Network; +using Microsoft.AspNetCore.SignalR; namespace DSACore.Hubs { @@ -18,9 +18,6 @@ namespace DSACore.Hubs private const string ReceiveMethod = "ReceiveMessage"; //receiveMethod; - private static List DsaGroups { get; set; } - public static List Tokens { get; } = new List(); - static Users() { DsaGroups = Database.GetGroups().Result; @@ -29,6 +26,9 @@ namespace DSACore.Hubs //AddGroups(); } + private static List DsaGroups { get; } + public static List Tokens { get; } = new List(); + [Obsolete] private static async void AddGroups() @@ -60,7 +60,7 @@ namespace DSACore.Hubs var ident = args.First().Replace("/", ""); if (args.Count > 0) args.RemoveAt(0); - var ret = Commands.CommandHandler.ExecuteCommand(new Command + var ret = CommandHandler.ExecuteCommand(new Command { CharId = 0, CmdIdentifier = ident, @@ -116,8 +116,8 @@ namespace DSACore.Hubs var test = await Database.GetGroups(); foreach (var group in test) - if (!DsaGroups.Exists(x => x.Name.Equals(@group.Name))) - DsaGroups.Add(@group); + if (!DsaGroups.Exists(x => x.Name.Equals(group.Name))) + DsaGroups.Add(group); await Clients.Caller.SendCoreAsync("ListGroups", new object[] {DsaGroups.Select(x => x.SendGroup())}); //throw new NotImplementedException("add database call to get groups"); @@ -128,7 +128,7 @@ namespace DSACore.Hubs DsaGroups.Add(new Group(group, password)); var Dgroup = new Models.Database.Groups.Group {Name = group, Id = DsaGroups.Count - 1}; //Database.AddGroup(Dgroup); - await Clients.Caller.SendCoreAsync(ReceiveMethod, new[] {$"group {@group} sucessfully added"}); + await Clients.Caller.SendCoreAsync(ReceiveMethod, new[] {$"group {group} sucessfully added"}); //throw new NotImplementedException("add database call to add groups"); } @@ -202,8 +202,8 @@ namespace DSACore.Hubs await Clients.Caller.SendAsync("PlayerStatusChanged", new[] {user.Name, "offline"}); //await SendToGroup(user.Name + " disconnected from the Server"); - @group.Users.Remove(user); - await Groups.RemoveFromGroupAsync(Context.ConnectionId, @group.Name); + group.Users.Remove(user); + await Groups.RemoveFromGroupAsync(Context.ConnectionId, group.Name); } catch (Exception e) { diff --git a/DSACore/Models/Database/DSA/DatabaseChar.cs b/DSACore/Models/Database/DSA/DatabaseChar.cs index 6a57629..872b82e 100644 --- a/DSACore/Models/Database/DSA/DatabaseChar.cs +++ b/DSACore/Models/Database/DSA/DatabaseChar.cs @@ -1,6 +1,7 @@ using System; using System.Collections.Generic; using System.Linq; +using DSACore.DSA_Game.Characters; namespace DSACore.Models.Database.DSA { @@ -40,7 +41,7 @@ namespace DSACore.Models.Database.DSA public List WeaponTalents { get; set; } = new List(); - public static void LoadChar(DSA_Game.Characters.Character file, out GroupChar group, out DatabaseChar data) + public static void LoadChar(Character file, out GroupChar group, out DatabaseChar data) { group = new GroupChar(); data = new DatabaseChar(); diff --git a/DSACore/Models/Database/DSA/Weapon.cs b/DSACore/Models/Database/DSA/Weapon.cs index d6d7999..58a44cd 100644 --- a/DSACore/Models/Database/DSA/Weapon.cs +++ b/DSACore/Models/Database/DSA/Weapon.cs @@ -26,27 +26,27 @@ namespace DSACore.Models.Database.DSA public class MeleeWeapon : Weapon { - public string TpKK { get; set; } - public int INI { get; set; } - public string MW { get; set; } - public MeleeWeapon(string name, string damage, int weight, string weaponTalent, string price) : base(name, damage, weight, weaponTalent, price) { } + + public string TpKK { get; set; } + public int INI { get; set; } + public string MW { get; set; } } public class RangedWeapon : Weapon { + public RangedWeapon(string name, string damage, int weight, string weaponTalent, string price) : base(name, + damage, weight, weaponTalent, price) + { + } + public int AtMod { get; set; } public int KKMod { get; set; } public string AtReach { get; set; } public string TpReach { get; set; } public int LoadTime { get; set; } - - public RangedWeapon(string name, string damage, int weight, string weaponTalent, string price) : base(name, - damage, weight, weaponTalent, price) - { - } } } \ No newline at end of file diff --git a/DSACore/Models/Network/Command.cs b/DSACore/Models/Network/Command.cs index 316461e..00b00a6 100644 --- a/DSACore/Models/Network/Command.cs +++ b/DSACore/Models/Network/Command.cs @@ -1,7 +1,5 @@ -using System; -using System.Collections.Generic; +using System.Collections.Generic; using System.Linq; -using System.Threading.Tasks; namespace DSACore.Models.Network { diff --git a/DSACore/Models/Network/CommandResponse.cs b/DSACore/Models/Network/CommandResponse.cs index 7478397..c7a410a 100644 --- a/DSACore/Models/Network/CommandResponse.cs +++ b/DSACore/Models/Network/CommandResponse.cs @@ -1,7 +1,4 @@ using System; -using System.Collections.Generic; -using System.Linq; -using System.Threading.Tasks; namespace DSACore.Models.Network { @@ -13,8 +10,8 @@ namespace DSACore.Models.Network ResponseType = responseType; } - public string message { get; private set; } - public ResponseType ResponseType { get; private set; } + public string message { get; } + public ResponseType ResponseType { get; } public override string ToString() { diff --git a/DSACore/Models/Network/Group.cs b/DSACore/Models/Network/Group.cs index 3a8ce77..efe12ee 100644 --- a/DSACore/Models/Network/Group.cs +++ b/DSACore/Models/Network/Group.cs @@ -1,7 +1,5 @@ using System; using System.Collections.Generic; -using System.Linq; -using System.Threading.Tasks; namespace DSACore.Models.Network { diff --git a/DSACore/Models/Network/Token.cs b/DSACore/Models/Network/Token.cs index 0021317..451cafc 100644 --- a/DSACore/Models/Network/Token.cs +++ b/DSACore/Models/Network/Token.cs @@ -1,18 +1,18 @@ using System; -using Microsoft.EntityFrameworkCore; namespace DSACore.Models.Network { public class Token { - public string Group { get; set; } - private DateTime creation = DateTime.Now; + private readonly DateTime creation = DateTime.Now; - public Token(string @group) + public Token(string group) { - Group = @group; + Group = group; } + public string Group { get; set; } + public bool IsValid() { return DateTime.Now - creation < TimeSpan.FromMinutes(1); diff --git a/DSACore/Models/Network/User.cs b/DSACore/Models/Network/User.cs index 97a9224..8b8008c 100644 --- a/DSACore/Models/Network/User.cs +++ b/DSACore/Models/Network/User.cs @@ -1,9 +1,4 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Threading.Tasks; - -namespace DSACore.Models.Network +namespace DSACore.Models.Network { public class User { diff --git a/DSACore/Program.cs b/DSACore/Program.cs index 357f919..46baf2d 100644 --- a/DSACore/Program.cs +++ b/DSACore/Program.cs @@ -1,13 +1,7 @@ -using System; -using System.Collections.Generic; -using System.IO; -using System.Linq; -using System.Threading.Tasks; +using DSACore.DSA_Game; using DSACore.FireBase; using Microsoft.AspNetCore; using Microsoft.AspNetCore.Hosting; -using Microsoft.Extensions.Configuration; -using Microsoft.Extensions.Logging; namespace DSACore { @@ -16,7 +10,7 @@ namespace DSACore public static void Main(string[] args) { Database.GetGroup(0).Wait(); - DSA_Game.Dsa.Startup(); + Dsa.Startup(); CreateWebHostBuilder(args).Build().Run(); } diff --git a/DSACore/Startup.cs b/DSACore/Startup.cs index 6f3ec79..372caca 100644 --- a/DSACore/Startup.cs +++ b/DSACore/Startup.cs @@ -1,16 +1,9 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Threading.Tasks; +using DSACore.Hubs; using Microsoft.AspNetCore.Builder; using Microsoft.AspNetCore.Hosting; -using Microsoft.AspNetCore.HttpsPolicy; using Microsoft.AspNetCore.Mvc; -using DSACore.Hubs; using Microsoft.Extensions.Configuration; using Microsoft.Extensions.DependencyInjection; -using Microsoft.Extensions.Logging; -using Microsoft.Extensions.Options; namespace DSACore { diff --git a/DSALib/Characters/Being.cs b/DSALib/Characters/Being.cs index cf338f9..27879a1 100644 --- a/DSALib/Characters/Being.cs +++ b/DSALib/Characters/Being.cs @@ -1,6 +1,4 @@ -using DiscoBot.DSA_Game.Characters; - -namespace DSALib.Characters +namespace DSALib.Characters { public class Being : Entity { diff --git a/DSALib/Characters/Critter.cs b/DSALib/Characters/Critter.cs index c511090..d9f8b53 100644 --- a/DSALib/Characters/Critter.cs +++ b/DSALib/Characters/Critter.cs @@ -1,14 +1,32 @@ using System; using System.Collections.Generic; +using System.IO; +using DiscoBot.DSA_Game.Characters; +using Newtonsoft.Json; namespace DSALib.Characters { - using System.IO; - using DiscoBot.DSA_Game.Characters; - using Newtonsoft.Json; - public class Critter : Being, ICombatant { + public CritterAttack lastAttack; + + public Critter(int gw, int gs, int rs, int mr, int ko, int pa, string ini, List critterAttacks) + { + Gw = gw; + Gs = gs; + Rs = rs; + Mr = mr; + Ko = ko; + Pa = pa; + Ini = ini; + CritterAttacks = critterAttacks; + lastAttack = CritterAttacks[new Random().Next(critterAttacks.Count)]; + } + + public Critter() + { + } + public int Rs { get; set; } public int Mr { get; set; } @@ -27,23 +45,14 @@ namespace DSALib.Characters public List CritterAttacks { get; set; } - public CritterAttack lastAttack; - - public Critter(int gw, int gs, int rs, int mr, int ko, int pa, string ini, List critterAttacks) + public string Angriff(string talent, int erschwernis = 0) { - Gw = gw; - Gs = gs; - Rs = rs; - Mr = mr; - Ko = ko; - Pa = pa; - Ini = ini; - CritterAttacks = critterAttacks; - lastAttack = CritterAttacks[new Random().Next(critterAttacks.Count)]; + throw new NotImplementedException(); } - public Critter() + public string Parade(string talent, int erschwernis = 0) { + throw new NotImplementedException(); } public static Critter Load(string path) @@ -61,16 +70,6 @@ namespace DSALib.Characters } } - public string Angriff(string talent, int erschwernis = 0) - { - throw new NotImplementedException(); - } - - public string Parade(string talent, int erschwernis = 0) - { - throw new NotImplementedException(); - } - public void Save(string path = @"..\..\Critters\") { try diff --git a/DSALib/Characters/ICombatant.cs b/DSALib/Characters/ICombatant.cs index 887893c..a4ce601 100644 --- a/DSALib/Characters/ICombatant.cs +++ b/DSALib/Characters/ICombatant.cs @@ -1,10 +1,4 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; - -namespace DiscoBot.DSA_Game.Characters +namespace DiscoBot.DSA_Game.Characters { public interface ICombatant { diff --git a/DSALib/CritterAttack.cs b/DSALib/CritterAttack.cs index 5fdcffa..3b0a11d 100644 --- a/DSALib/CritterAttack.cs +++ b/DSALib/CritterAttack.cs @@ -1,10 +1,4 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; - -namespace DSALib +namespace DSALib { public class CritterAttack { diff --git a/FireBase/ExceptionEventArgs.cs b/FireBase/ExceptionEventArgs.cs index 185c952..09c205a 100644 --- a/FireBase/ExceptionEventArgs.cs +++ b/FireBase/ExceptionEventArgs.cs @@ -1,16 +1,16 @@ -namespace Firebase.Database -{ - using System; +using System; +namespace Firebase.Database +{ /// - /// Event args holding the object. + /// Event args holding the object. /// public class ExceptionEventArgs : EventArgs where T : Exception { public readonly T Exception; /// - /// Initializes a new instance of the class. + /// Initializes a new instance of the class. /// /// The exception. public ExceptionEventArgs(T exception) diff --git a/FireBase/Extensions/ObservableExtensions.cs b/FireBase/Extensions/ObservableExtensions.cs index cb41bcc..0a672d7 100644 --- a/FireBase/Extensions/ObservableExtensions.cs +++ b/FireBase/Extensions/ObservableExtensions.cs @@ -1,19 +1,20 @@ -namespace Firebase.Database.Extensions -{ - using System; - using System.Reactive.Linq; +using System; +using System.Reactive.Linq; +namespace Firebase.Database.Extensions +{ public static class ObservableExtensions { /// - /// Returns a cold observable which retries (re-subscribes to) the source observable on error until it successfully terminates. + /// Returns a cold observable which retries (re-subscribes to) the source observable on error until it successfully + /// terminates. /// /// The source observable. /// How long to wait between attempts. /// A predicate determining for which exceptions to retry. Defaults to all /// - /// A cold observable which retries (re-subscribes to) the source observable on error up to the - /// specified number of times or until it successfully terminates. + /// A cold observable which retries (re-subscribes to) the source observable on error up to the + /// specified number of times or until it successfully terminates. /// public static IObservable RetryAfterDelay( this IObservable source, diff --git a/FireBase/Extensions/TaskExtensions.cs b/FireBase/Extensions/TaskExtensions.cs index 8e933b2..c955b3a 100644 --- a/FireBase/Extensions/TaskExtensions.cs +++ b/FireBase/Extensions/TaskExtensions.cs @@ -1,12 +1,12 @@ -namespace Firebase.Database.Extensions -{ - using System; - using System.Threading.Tasks; +using System; +using System.Threading.Tasks; +namespace Firebase.Database.Extensions +{ public static class TaskExtensions { /// - /// Instead of unwrapping it throws it as it is. + /// Instead of unwrapping it throws it as it is. /// public static async Task WithAggregateException(this Task source) { diff --git a/FireBase/FirebaseClient.cs b/FireBase/FirebaseClient.cs index 8795668..3079f3b 100644 --- a/FireBase/FirebaseClient.cs +++ b/FireBase/FirebaseClient.cs @@ -1,30 +1,26 @@ +using System; using System.Net.Http; +using System.Runtime.CompilerServices; +using Firebase.Database.Query; -[assembly: System.Runtime.CompilerServices.InternalsVisibleTo("Firebase.Database.Tests")] +[assembly: InternalsVisibleTo("Firebase.Database.Tests")] namespace Firebase.Database { - using System; - using System.Collections.Generic; - using System.Threading.Tasks; - using Offline; - using Query; - /// - /// Firebase client which acts as an entry point to the online database. + /// Firebase client which acts as an entry point to the online database. /// public class FirebaseClient : IDisposable { + private readonly string baseUrl; internal readonly HttpClient HttpClient; internal readonly FirebaseOptions Options; - private readonly string baseUrl; - /// - /// Initializes a new instance of the class. + /// Initializes a new instance of the class. /// /// The base url. - /// Offline database. + /// Offline database. public FirebaseClient(string baseUrl, FirebaseOptions options = null) { HttpClient = new HttpClient(); @@ -35,19 +31,19 @@ namespace Firebase.Database if (!this.baseUrl.EndsWith("/")) this.baseUrl += "/"; } + public void Dispose() + { + HttpClient?.Dispose(); + } + /// - /// Queries for a child of the data root. + /// Queries for a child of the data root. /// /// Name of the child. - /// . + /// . public ChildQuery Child(string resourceName) { return new ChildQuery(this, () => baseUrl + resourceName); } - - public void Dispose() - { - HttpClient?.Dispose(); - } } } \ No newline at end of file diff --git a/FireBase/FirebaseException.cs b/FireBase/FirebaseException.cs index 2f8269d..cfc09d3 100644 --- a/FireBase/FirebaseException.cs +++ b/FireBase/FirebaseException.cs @@ -1,8 +1,8 @@ -namespace Firebase.Database -{ - using System; - using System.Net; +using System; +using System.Net; +namespace Firebase.Database +{ public class FirebaseException : Exception { public FirebaseException(string requestUrl, string requestData, string responseData, HttpStatusCode statusCode) @@ -25,22 +25,22 @@ } /// - /// Post data passed to the authentication service. + /// Post data passed to the authentication service. /// public string RequestData { get; } /// - /// Original url of the request. + /// Original url of the request. /// public string RequestUrl { get; } /// - /// Response from the authentication service. + /// Response from the authentication service. /// public string ResponseData { get; } /// - /// Status code of the response. + /// Status code of the response. /// public HttpStatusCode StatusCode { get; } diff --git a/FireBase/FirebaseKeyGenerator.cs b/FireBase/FirebaseKeyGenerator.cs index 70a855d..37beed5 100644 --- a/FireBase/FirebaseKeyGenerator.cs +++ b/FireBase/FirebaseKeyGenerator.cs @@ -1,11 +1,11 @@ +using System; +using System.Text; + namespace Firebase.Database { - using System; - using System.Text; - /// - /// Offline key generator which mimics the official Firebase generators. - /// Credit: https://github.com/bubbafat/FirebaseSharp/blob/master/src/FirebaseSharp.Portable/FireBasePushIdGenerator.cs + /// Offline key generator which mimics the official Firebase generators. + /// Credit: https://github.com/bubbafat/FirebaseSharp/blob/master/src/FirebaseSharp.Portable/FireBasePushIdGenerator.cs /// public class FirebaseKeyGenerator { @@ -26,10 +26,11 @@ namespace Firebase.Database } /// - /// Returns next firebase key based on current time. + /// Returns next firebase key based on current time. /// /// - /// The . + /// The . + /// public static string Next() { // We generate 72-bits of randomness which get turned into 12 characters and diff --git a/FireBase/FirebaseObject.cs b/FireBase/FirebaseObject.cs index 653d508..2e0fd20 100644 --- a/FireBase/FirebaseObject.cs +++ b/FireBase/FirebaseObject.cs @@ -1,9 +1,11 @@ namespace Firebase.Database { /// - /// Holds the object of type along with its key. + /// Holds the object of type + /// + /// along with its key. /// - /// Type of the underlying object. + /// Type of the underlying object. public class FirebaseObject { internal FirebaseObject(string key, T obj) @@ -13,12 +15,12 @@ namespace Firebase.Database } /// - /// Gets the key of . + /// Gets the key of . /// public string Key { get; } /// - /// Gets the underlying object. + /// Gets the underlying object. /// public T Object { get; } } diff --git a/FireBase/FirebaseOptions.cs b/FireBase/FirebaseOptions.cs index f31a047..b4a5e51 100644 --- a/FireBase/FirebaseOptions.cs +++ b/FireBase/FirebaseOptions.cs @@ -1,12 +1,12 @@ -namespace Firebase.Database -{ - using System; - using System.Collections.Generic; - using System.IO; - using System.Threading.Tasks; - using Offline; - using Newtonsoft.Json; +using System; +using System.Collections.Generic; +using System.IO; +using System.Threading.Tasks; +using Firebase.Database.Offline; +using Newtonsoft.Json; +namespace Firebase.Database +{ public class FirebaseOptions { public FirebaseOptions() @@ -18,32 +18,34 @@ } /// - /// Gets or sets the factory for Firebase offline database. Default is in-memory dictionary. + /// Gets or sets the factory for Firebase offline database. Default is in-memory dictionary. /// public Func> OfflineDatabaseFactory { get; set; } /// - /// Gets or sets the method for retrieving auth tokens. Default is null. + /// Gets or sets the method for retrieving auth tokens. Default is null. /// public Func> AuthTokenAsyncFactory { get; set; } /// - /// Gets or sets the factory for used for reading online streams. Default is . + /// Gets or sets the factory for used for reading online streams. Default is + /// . /// public Func SubscriptionStreamReaderFactory { get; set; } /// - /// Gets or sets the json serializer settings. + /// Gets or sets the json serializer settings. /// public JsonSerializerSettings JsonSerializerSettings { get; set; } /// - /// Gets or sets the time between synchronization attempts for pulling and pushing offline entities. Default is 10 seconds. + /// Gets or sets the time between synchronization attempts for pulling and pushing offline entities. Default is 10 + /// seconds. /// public TimeSpan SyncPeriod { get; set; } /// - /// Specify if token returned by factory will be used as "auth" url parameter or "access_token". + /// Specify if token returned by factory will be used as "auth" url parameter or "access_token". /// public bool AsAccessToken { get; set; } } diff --git a/FireBase/Http/HttpClientExtensions.cs b/FireBase/Http/HttpClientExtensions.cs index 7f8fffe..6582769 100644 --- a/FireBase/Http/HttpClientExtensions.cs +++ b/FireBase/Http/HttpClientExtensions.cs @@ -1,27 +1,27 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using System.Linq; +using System.Net; +using System.Net.Http; +using System.Threading.Tasks; +using Newtonsoft.Json; + namespace Firebase.Database.Http { - using System; - using System.Collections; - using System.Collections.Generic; - using System.Linq; - using System.Net.Http; - using System.Threading.Tasks; - using Newtonsoft.Json; - using System.Net; - /// - /// The http client extensions for object deserializations. + /// The http client extensions for object deserializations. /// internal static class HttpClientExtensions { /// - /// The get object collection async. + /// The get object collection async. /// /// The client. - /// The request uri. - /// The specific JSON Serializer Settings. + /// The request uri. + /// The specific JSON Serializer Settings. /// The type of entities the collection should contain. - /// The . + /// The . public static async Task>> GetObjectCollectionAsync( this HttpClient client, string requestUri, JsonSerializerSettings jsonSerializerSettings) @@ -91,11 +91,11 @@ namespace Firebase.Database.Http }*/ /// - /// The get object collection async. + /// The get object collection async. /// /// The json data. /// The type of entities the collection should contain. - /// The . + /// The . public static IEnumerable> GetObjectCollection(this string data, Type elementType) { var dictionaryType = typeof(Dictionary<,>).MakeGenericType(typeof(string), elementType); diff --git a/FireBase/Http/PostResult.cs b/FireBase/Http/PostResult.cs index 5a779ed..15a4894 100644 --- a/FireBase/Http/PostResult.cs +++ b/FireBase/Http/PostResult.cs @@ -1,12 +1,12 @@ namespace Firebase.Database.Http { /// - /// Represents data returned after a successful POST to firebase server. + /// Represents data returned after a successful POST to firebase server. /// public class PostResult { /// - /// Gets or sets the generated key after a successful post. + /// Gets or sets the generated key after a successful post. /// public string Name { get; set; } } diff --git a/FireBase/ObservableExtensions.cs b/FireBase/ObservableExtensions.cs index da78365..bc46261 100644 --- a/FireBase/ObservableExtensions.cs +++ b/FireBase/ObservableExtensions.cs @@ -1,20 +1,20 @@ -namespace Firebase.Database -{ - using System; - using System.Collections.ObjectModel; - using Streaming; +using System; +using System.Collections.ObjectModel; +using Firebase.Database.Streaming; +namespace Firebase.Database +{ /// - /// Extensions for . + /// Extensions for . /// public static class ObservableExtensions { /// - /// Starts observing on given firebase observable and propagates event into an . + /// Starts observing on given firebase observable and propagates event into an . /// /// The observable. /// Type of entity. - /// The . + /// The . public static ObservableCollection AsObservableCollection(this IObservable> observable) { var collection = new ObservableCollection(); diff --git a/FireBase/Offline/ConcurrentOfflineDatabase.cs b/FireBase/Offline/ConcurrentOfflineDatabase.cs index 5527168..1a9e607 100644 --- a/FireBase/Offline/ConcurrentOfflineDatabase.cs +++ b/FireBase/Offline/ConcurrentOfflineDatabase.cs @@ -1,23 +1,23 @@ -namespace Firebase.Database.Offline +using System; +using System.Collections; +using System.Collections.Concurrent; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using LiteDB; + +namespace Firebase.Database.Offline { - using System; - using System.Collections; - using System.Collections.Concurrent; - using System.Collections.Generic; - using System.IO; - using System.Linq; - using LiteDB; - /// - /// The offline database. + /// The offline database. /// public class ConcurrentOfflineDatabase : IDictionary { - private readonly LiteRepository db; private readonly ConcurrentDictionary ccache; + private readonly LiteRepository db; /// - /// Initializes a new instance of the class. + /// Initializes a new instance of the class. /// /// The item type which is used to determine the database file name. /// Custom string which will get appended to the file name. @@ -43,33 +43,41 @@ } /// - /// Gets the number of elements contained in the . + /// Gets the number of elements contained in the . /// - /// The number of elements contained in the . + /// The number of elements contained in the . public int Count => ccache.Count; /// - /// Gets a value indicating whether this is a read-only collection. + /// Gets a value indicating whether this is a read-only collection. /// public bool IsReadOnly => false; /// - /// Gets an containing the keys of the . + /// Gets an containing the keys of the + /// . /// - /// An containing the keys of the object that implements . + /// + /// An containing the keys of the object that + /// implements . + /// public ICollection Keys => ccache.Keys; /// - /// Gets an containing the values in the . + /// Gets an containing the values in the + /// . /// - /// An containing the values in the object that implements . + /// + /// An containing the values in the object that + /// implements . + /// public ICollection Values => ccache.Values; /// - /// Gets or sets the element with the specified key. + /// Gets or sets the element with the specified key. /// /// The key of the element to get or set. - /// The element with the specified key. + /// The element with the specified key. public OfflineEntry this[string key] { get => ccache[key]; @@ -82,7 +90,7 @@ } /// - /// Returns an enumerator that iterates through the collection. + /// Returns an enumerator that iterates through the collection. /// /// An enumerator that can be used to iterate through the collection. public IEnumerator> GetEnumerator() @@ -96,65 +104,82 @@ } /// - /// Adds an item to the . + /// Adds an item to the . /// - /// The object to add to the . + /// The object to add to the . public void Add(KeyValuePair item) { Add(item.Key, item.Value); } /// - /// Removes all items from the . - /// + /// Removes all items from the . + /// public void Clear() { ccache.Clear(); - db.Delete(Query.All()); + db.Delete(LiteDB.Query.All()); } /// - /// Determines whether the contains a specific value. + /// Determines whether the contains a specific value. /// - /// The object to locate in the . - /// True if is found in the ; otherwise, false. + /// The object to locate in the . + /// + /// True if is found in the ; + /// otherwise, false. + /// public bool Contains(KeyValuePair item) { return ContainsKey(item.Key); } /// - /// Copies the elements of the to an , starting at a particular index. + /// Copies the elements of the to an + /// , starting at a particular index. /// - /// The one-dimensional that is the destination of the elements copied from . The must have zero-based indexing. - /// The zero-based index in at which copying begins. + /// + /// The one-dimensional that is the destination of the elements copied + /// from . The must have + /// zero-based indexing. + /// + /// The zero-based index in at which copying begins. public void CopyTo(KeyValuePair[] array, int arrayIndex) { ccache.ToList().CopyTo(array, arrayIndex); } /// - /// Removes the first occurrence of a specific object from the . + /// Removes the first occurrence of a specific object from the + /// . /// - /// The object to remove from the . - /// True if was successfully removed from the ; otherwise, false. This method also returns false if is not found in the original . + /// The object to remove from the . + /// + /// True if was successfully removed from the + /// ; otherwise, false. This method also returns false if + /// is not found in the original . + /// public bool Remove(KeyValuePair item) { return Remove(item.Key); } /// - /// Determines whether the contains an element with the specified key. + /// Determines whether the contains an element with the + /// specified key. /// - /// The key to locate in the . - /// True if the contains an element with the key; otherwise, false. + /// The key to locate in the . + /// + /// True if the contains an element with the key; + /// otherwise, false. + /// public bool ContainsKey(string key) { return ccache.ContainsKey(key); } /// - /// Adds an element with the provided key and value to the . + /// Adds an element with the provided key and value to the . /// /// The object to use as the key of the element to add. /// The object to use as the value of the element to add. @@ -165,10 +190,13 @@ } /// - /// Removes the element with the specified key from the . + /// Removes the element with the specified key from the . /// /// The key of the element to remove. - /// True if the element is successfully removed; otherwise, false. This method also returns false if was not found in the original . + /// + /// True if the element is successfully removed; otherwise, false. This method also returns false if + /// was not found in the original . + /// public bool Remove(string key) { ccache.TryRemove(key, out _); @@ -176,10 +204,18 @@ } /// - /// Gets the value associated with the specified key. - /// - /// The key whose value to get.When this method returns, the value associated with the specified key, if the key is found; otherwise, the default value for the type of the parameter. This parameter is passed uninitialized. - /// True if the object that implements contains an element with the specified key; otherwise, false. + /// Gets the value associated with the specified key. + /// + /// The key whose value to get. + /// + /// When this method returns, the value associated with the specified key, if the key is found; + /// otherwise, the default value for the type of the parameter. This parameter is passed + /// uninitialized. + /// + /// + /// True if the object that implements contains an + /// element with the specified key; otherwise, false. + /// public bool TryGetValue(string key, out OfflineEntry value) { return ccache.TryGetValue(key, out value); diff --git a/FireBase/Offline/DatabaseExtensions.cs b/FireBase/Offline/DatabaseExtensions.cs index 56dcf46..e7c4074 100644 --- a/FireBase/Offline/DatabaseExtensions.cs +++ b/FireBase/Offline/DatabaseExtensions.cs @@ -1,24 +1,26 @@ -namespace Firebase.Database.Offline -{ - using System; - using System.Collections; - using System.Collections.Generic; - using System.Linq.Expressions; - using System.Reflection; - using Query; +using System; +using System.Collections.Generic; +using System.Linq.Expressions; +using System.Reflection; +using Firebase.Database.Query; +namespace Firebase.Database.Offline +{ public static class DatabaseExtensions { /// - /// Create new instances of the . + /// Create new instances of the . /// /// Type of elements. /// Custom string which will get appended to the file name. /// Optional custom root element of received json items. - /// Realtime streaming options. + /// Realtime streaming options. /// Specifies what strategy should be used for initial pulling of server data. - /// Specifies whether changed items should actually be pushed to the server. It this is false, then Put / Post / Delete will not affect server data. - /// The . + /// + /// Specifies whether changed items should actually be pushed to the server. It this is false, + /// then Put / Post / Delete will not affect server data. + /// + /// The . public static RealtimeDatabase AsRealtimeDatabase(this ChildQuery query, string filenameModifier = "", string elementRoot = "", StreamingOptions streamingOptions = StreamingOptions.LatestOnly, InitialPullStrategy initialPullStrategy = InitialPullStrategy.MissingOnly, bool pushChanges = true) @@ -29,16 +31,19 @@ } /// - /// Create new instances of the . + /// Create new instances of the . /// /// Type of elements. - /// Type of the custom to use. + /// Type of the custom to use. /// Custom string which will get appended to the file name. /// Optional custom root element of received json items. - /// Realtime streaming options. + /// Realtime streaming options. /// Specifies what strategy should be used for initial pulling of server data. - /// Specifies whether changed items should actually be pushed to the server. It this is false, then Put / Post / Delete will not affect server data. - /// The . + /// + /// Specifies whether changed items should actually be pushed to the server. It this is false, + /// then Put / Post / Delete will not affect server data. + /// + /// The . public static RealtimeDatabase AsRealtimeDatabase(this ChildQuery query, string filenameModifier = "", string elementRoot = "", StreamingOptions streamingOptions = StreamingOptions.LatestOnly, @@ -52,12 +57,15 @@ } /// - /// Overwrites existing object with given key leaving any missing properties intact in firebase. + /// Overwrites existing object with given key leaving any missing properties intact in firebase. /// /// The key. /// The object to set. /// Indicates whether the item should be synced online. - /// The priority. Objects with higher priority will be synced first. Higher number indicates higher priority. + /// + /// The priority. Objects with higher priority will be synced first. Higher number indicates higher + /// priority. + /// public static void Patch(this RealtimeDatabase db, string key, T obj, bool syncOnline = true, int priority = 1) where T : class @@ -66,12 +74,15 @@ } /// - /// Overwrites existing object with given key. + /// Overwrites existing object with given key. /// /// The key. /// The object to set. /// Indicates whether the item should be synced online. - /// The priority. Objects with higher priority will be synced first. Higher number indicates higher priority. + /// + /// The priority. Objects with higher priority will be synced first. Higher number indicates higher + /// priority. + /// public static void Put(this RealtimeDatabase db, string key, T obj, bool syncOnline = true, int priority = 1) where T : class @@ -80,11 +91,14 @@ } /// - /// Adds a new entity to the Database. + /// Adds a new entity to the Database. /// /// The object to add. /// Indicates whether the item should be synced online. - /// The priority. Objects with higher priority will be synced first. Higher number indicates higher priority. + /// + /// The priority. Objects with higher priority will be synced first. Higher number indicates higher + /// priority. + /// /// The generated key for this object. public static string Post(this RealtimeDatabase db, T obj, bool syncOnline = true, int priority = 1) where T : class @@ -97,11 +111,14 @@ } /// - /// Deletes the entity with the given key. + /// Deletes the entity with the given key. /// /// The key. /// Indicates whether the item should be synced online. - /// The priority. Objects with higher priority will be synced first. Higher number indicates higher priority. + /// + /// The priority. Objects with higher priority will be synced first. Higher number indicates higher + /// priority. + /// public static void Delete(this RealtimeDatabase db, string key, bool syncOnline = true, int priority = 1) where T : class { @@ -109,7 +126,8 @@ } /// - /// Do a Put for a nested property specified by of an object with key . + /// Do a Put for a nested property specified by of an object with key + /// . /// /// Type of the root elements. /// Type of the property being modified @@ -118,7 +136,10 @@ /// Expression on the root element leading to target value to modify. /// Value to put. /// Indicates whether the item should be synced online. - /// The priority. Objects with higher priority will be synced first. Higher number indicates higher priority. + /// + /// The priority. Objects with higher priority will be synced first. Higher number indicates higher + /// priority. + /// public static void Put(this RealtimeDatabase db, string key, Expression> propertyExpression, TProperty value, bool syncOnline = true, int priority = 1) @@ -128,7 +149,8 @@ } /// - /// Do a Patch for a nested property specified by of an object with key . + /// Do a Patch for a nested property specified by of an object with key + /// . /// /// Type of the root elements. /// Type of the property being modified @@ -137,7 +159,10 @@ /// Expression on the root element leading to target value to modify. /// Value to patch. /// Indicates whether the item should be synced online. - /// The priority. Objects with higher priority will be synced first. Higher number indicates higher priority. + /// + /// The priority. Objects with higher priority will be synced first. Higher number indicates higher + /// priority. + /// public static void Patch(this RealtimeDatabase db, string key, Expression> propertyExpression, TProperty value, bool syncOnline = true, int priority = 1) @@ -147,7 +172,8 @@ } /// - /// Delete a nested property specified by of an object with key . This basically does a Put with null value. + /// Delete a nested property specified by of an object with key + /// . This basically does a Put with null value. /// /// Type of the root elements. /// Type of the property being modified @@ -156,7 +182,10 @@ /// Expression on the root element leading to target value to modify. /// Value to put. /// Indicates whether the item should be synced online. - /// The priority. Objects with higher priority will be synced first. Higher number indicates higher priority. + /// + /// The priority. Objects with higher priority will be synced first. Higher number indicates higher + /// priority. + /// public static void Delete(this RealtimeDatabase db, string key, Expression> propertyExpression, bool syncOnline = true, int priority = 1) where T : class @@ -166,8 +195,9 @@ } /// - /// Post a new entity into the nested dictionary specified by of an object with key . - /// The key of the new entity is automatically generated. + /// Post a new entity into the nested dictionary specified by of an object with + /// key . + /// The key of the new entity is automatically generated. /// /// Type of the root elements. /// Type of the dictionary being modified @@ -177,7 +207,10 @@ /// Expression on the root element leading to target value to modify. /// Value to put. /// Indicates whether the item should be synced online. - /// The priority. Objects with higher priority will be synced first. Higher number indicates higher priority. + /// + /// The priority. Objects with higher priority will be synced first. Higher number indicates higher + /// priority. + /// public static void Post(this RealtimeDatabase db, string key, Expression> propertyExpression, TProperty value, bool syncOnline = true, int priority = 1) @@ -193,8 +226,9 @@ } /// - /// Delete an entity with key in the nested dictionary specified by of an object with key . - /// The key of the new entity is automatically generated. + /// Delete an entity with key in the nested dictionary specified by + /// of an object with key . + /// The key of the new entity is automatically generated. /// /// Type of the root elements. /// Type of the dictionary being modified @@ -204,7 +238,10 @@ /// Expression on the root element leading to target value to modify. /// Key within the nested dictionary to delete. /// Indicates whether the item should be synced online. - /// The priority. Objects with higher priority will be synced first. Higher number indicates higher priority. + /// + /// The priority. Objects with higher priority will be synced first. Higher number indicates higher + /// priority. + /// public static void Delete(this RealtimeDatabase db, string key, Expression>> propertyExpression, string dictionaryKey, bool syncOnline = true, int priority = 1) diff --git a/FireBase/Offline/ISetHandler.cs b/FireBase/Offline/ISetHandler.cs index e3b49b5..c04bd41 100644 --- a/FireBase/Offline/ISetHandler.cs +++ b/FireBase/Offline/ISetHandler.cs @@ -1,8 +1,8 @@ -namespace Firebase.Database.Offline -{ - using Query; - using System.Threading.Tasks; +using System.Threading.Tasks; +using Firebase.Database.Query; +namespace Firebase.Database.Offline +{ public interface ISetHandler { Task SetAsync(ChildQuery query, string key, OfflineEntry entry); diff --git a/FireBase/Offline/InitialPullStrategy.cs b/FireBase/Offline/InitialPullStrategy.cs index a1ae3f7..ca2bebf 100644 --- a/FireBase/Offline/InitialPullStrategy.cs +++ b/FireBase/Offline/InitialPullStrategy.cs @@ -1,23 +1,23 @@ namespace Firebase.Database.Offline { /// - /// Specifies the strategy for initial pull of server data. + /// Specifies the strategy for initial pull of server data. /// public enum InitialPullStrategy { /// - /// Don't pull anything. + /// Don't pull anything. /// None, /// - /// Pull only what isn't already stored offline. + /// Pull only what isn't already stored offline. /// MissingOnly, /// - /// Pull everything that exists on the server. + /// Pull everything that exists on the server. /// - Everything, + Everything } } \ No newline at end of file diff --git a/FireBase/Offline/Internals/MemberAccessVisitor.cs b/FireBase/Offline/Internals/MemberAccessVisitor.cs index 2bc0fc3..89a77da 100644 --- a/FireBase/Offline/Internals/MemberAccessVisitor.cs +++ b/FireBase/Offline/Internals/MemberAccessVisitor.cs @@ -1,10 +1,10 @@ -namespace Firebase.Database.Offline.Internals -{ - using System.Collections.Generic; - using System.Linq.Expressions; - using System.Reflection; - using Newtonsoft.Json; +using System.Collections.Generic; +using System.Linq.Expressions; +using System.Reflection; +using Newtonsoft.Json; +namespace Firebase.Database.Offline.Internals +{ public class MemberAccessVisitor : ExpressionVisitor { private readonly IList propertyNames = new List(); @@ -13,10 +13,6 @@ public IEnumerable PropertyNames => propertyNames; - public MemberAccessVisitor() - { - } - public override Expression Visit(Expression expr) { if (expr?.NodeType == ExpressionType.MemberAccess) diff --git a/FireBase/Offline/OfflineCacheAdapter.cs b/FireBase/Offline/OfflineCacheAdapter.cs index 0918a8c..3153d1b 100644 --- a/FireBase/Offline/OfflineCacheAdapter.cs +++ b/FireBase/Offline/OfflineCacheAdapter.cs @@ -1,10 +1,10 @@ -namespace Firebase.Database.Offline -{ - using System; - using System.Collections; - using System.Collections.Generic; - using System.Linq; +using System; +using System.Collections; +using System.Collections.Generic; +using System.Linq; +namespace Firebase.Database.Offline +{ internal class OfflineCacheAdapter : IDictionary, IDictionary { private readonly IDictionary database; @@ -19,14 +19,10 @@ throw new NotImplementedException(); } - public int Count => database.Count; - public bool IsSynchronized { get; } public object SyncRoot { get; } - public bool IsReadOnly => database.IsReadOnly; - object IDictionary.this[object key] { get => database[key.ToString()].Deserialize(); @@ -42,27 +38,10 @@ } } - public ICollection Keys => database.Keys; - ICollection IDictionary.Values { get; } ICollection IDictionary.Keys { get; } - public ICollection Values => database.Values.Select(o => o.Deserialize()).ToList(); - - public T this[string key] - { - get => database[key].Deserialize(); - - set - { - if (database.ContainsKey(key)) - database[key] = new OfflineEntry(key, value, database[key].Priority, database[key].SyncOptions); - else - database[key] = new OfflineEntry(key, value, 1, SyncOptions.None); - } - } - public bool Contains(object key) { return ContainsKey(key.ToString()); @@ -80,6 +59,32 @@ public bool IsFixedSize => false; + public void Add(object key, object value) + { + Add(key.ToString(), (T) value); + } + + public int Count => database.Count; + + public bool IsReadOnly => database.IsReadOnly; + + public ICollection Keys => database.Keys; + + public ICollection Values => database.Values.Select(o => o.Deserialize()).ToList(); + + public T this[string key] + { + get => database[key].Deserialize(); + + set + { + if (database.ContainsKey(key)) + database[key] = new OfflineEntry(key, value, database[key].Priority, database[key].SyncOptions); + else + database[key] = new OfflineEntry(key, value, 1, SyncOptions.None); + } + } + public IEnumerator> GetEnumerator() { return database.Select(d => new KeyValuePair(d.Key, d.Value.Deserialize())).GetEnumerator(); @@ -95,11 +100,6 @@ Add(item.Key, item.Value); } - public void Add(object key, object value) - { - Add(key.ToString(), (T) value); - } - public void Clear() { database.Clear(); diff --git a/FireBase/Offline/OfflineDatabase.cs b/FireBase/Offline/OfflineDatabase.cs index 3e6e7d8..be0380b 100644 --- a/FireBase/Offline/OfflineDatabase.cs +++ b/FireBase/Offline/OfflineDatabase.cs @@ -1,22 +1,22 @@ -namespace Firebase.Database.Offline +using System; +using System.Collections; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using LiteDB; + +namespace Firebase.Database.Offline { - using System; - using System.Collections; - using System.Collections.Generic; - using System.IO; - using System.Linq; - using LiteDB; - /// - /// The offline database. + /// The offline database. /// public class OfflineDatabase : IDictionary { - private readonly LiteRepository db; private readonly IDictionary cache; + private readonly LiteRepository db; /// - /// Initializes a new instance of the class. + /// Initializes a new instance of the class. /// /// The item type which is used to determine the database file name. /// Custom string which will get appended to the file name. @@ -38,33 +38,41 @@ } /// - /// Gets the number of elements contained in the . + /// Gets the number of elements contained in the . /// - /// The number of elements contained in the . + /// The number of elements contained in the . public int Count => cache.Count; /// - /// Gets a value indicating whether this is a read-only collection. + /// Gets a value indicating whether this is a read-only collection. /// public bool IsReadOnly => cache.IsReadOnly; /// - /// Gets an containing the keys of the . + /// Gets an containing the keys of the + /// . /// - /// An containing the keys of the object that implements . + /// + /// An containing the keys of the object that + /// implements . + /// public ICollection Keys => cache.Keys; /// - /// Gets an containing the values in the . + /// Gets an containing the values in the + /// . /// - /// An containing the values in the object that implements . + /// + /// An containing the values in the object that + /// implements . + /// public ICollection Values => cache.Values; /// - /// Gets or sets the element with the specified key. + /// Gets or sets the element with the specified key. /// /// The key of the element to get or set. - /// The element with the specified key. + /// The element with the specified key. public OfflineEntry this[string key] { get => cache[key]; @@ -77,7 +85,7 @@ } /// - /// Returns an enumerator that iterates through the collection. + /// Returns an enumerator that iterates through the collection. /// /// An enumerator that can be used to iterate through the collection. public IEnumerator> GetEnumerator() @@ -91,65 +99,82 @@ } /// - /// Adds an item to the . + /// Adds an item to the . /// - /// The object to add to the . + /// The object to add to the . public void Add(KeyValuePair item) { Add(item.Key, item.Value); } /// - /// Removes all items from the . - /// + /// Removes all items from the . + /// public void Clear() { cache.Clear(); - db.Delete(Query.All()); + db.Delete(LiteDB.Query.All()); } /// - /// Determines whether the contains a specific value. + /// Determines whether the contains a specific value. /// - /// The object to locate in the . - /// True if is found in the ; otherwise, false. + /// The object to locate in the . + /// + /// True if is found in the ; + /// otherwise, false. + /// public bool Contains(KeyValuePair item) { return ContainsKey(item.Key); } /// - /// Copies the elements of the to an , starting at a particular index. + /// Copies the elements of the to an + /// , starting at a particular index. /// - /// The one-dimensional that is the destination of the elements copied from . The must have zero-based indexing. - /// The zero-based index in at which copying begins. + /// + /// The one-dimensional that is the destination of the elements copied + /// from . The must have + /// zero-based indexing. + /// + /// The zero-based index in at which copying begins. public void CopyTo(KeyValuePair[] array, int arrayIndex) { cache.CopyTo(array, arrayIndex); } /// - /// Removes the first occurrence of a specific object from the . + /// Removes the first occurrence of a specific object from the + /// . /// - /// The object to remove from the . - /// True if was successfully removed from the ; otherwise, false. This method also returns false if is not found in the original . + /// The object to remove from the . + /// + /// True if was successfully removed from the + /// ; otherwise, false. This method also returns false if + /// is not found in the original . + /// public bool Remove(KeyValuePair item) { return Remove(item.Key); } /// - /// Determines whether the contains an element with the specified key. + /// Determines whether the contains an element with the + /// specified key. /// - /// The key to locate in the . - /// True if the contains an element with the key; otherwise, false. + /// The key to locate in the . + /// + /// True if the contains an element with the key; + /// otherwise, false. + /// public bool ContainsKey(string key) { return cache.ContainsKey(key); } /// - /// Adds an element with the provided key and value to the . + /// Adds an element with the provided key and value to the . /// /// The object to use as the key of the element to add. /// The object to use as the value of the element to add. @@ -160,10 +185,13 @@ } /// - /// Removes the element with the specified key from the . + /// Removes the element with the specified key from the . /// /// The key of the element to remove. - /// True if the element is successfully removed; otherwise, false. This method also returns false if was not found in the original . + /// + /// True if the element is successfully removed; otherwise, false. This method also returns false if + /// was not found in the original . + /// public bool Remove(string key) { cache.Remove(key); @@ -171,10 +199,18 @@ } /// - /// Gets the value associated with the specified key. - /// - /// The key whose value to get.When this method returns, the value associated with the specified key, if the key is found; otherwise, the default value for the type of the parameter. This parameter is passed uninitialized. - /// True if the object that implements contains an element with the specified key; otherwise, false. + /// Gets the value associated with the specified key. + /// + /// The key whose value to get. + /// + /// When this method returns, the value associated with the specified key, if the key is found; + /// otherwise, the default value for the type of the parameter. This parameter is passed + /// uninitialized. + /// + /// + /// True if the object that implements contains an + /// element with the specified key; otherwise, false. + /// public bool TryGetValue(string key, out OfflineEntry value) { return cache.TryGetValue(key, out value); diff --git a/FireBase/Offline/OfflineEntry.cs b/FireBase/Offline/OfflineEntry.cs index dfd5910..9feffa3 100644 --- a/FireBase/Offline/OfflineEntry.cs +++ b/FireBase/Offline/OfflineEntry.cs @@ -1,21 +1,24 @@ -namespace Firebase.Database.Offline -{ - using System; - using Newtonsoft.Json; +using System; +using Newtonsoft.Json; +namespace Firebase.Database.Offline +{ /// - /// Represents an object stored in offline storage. + /// Represents an object stored in offline storage. /// public class OfflineEntry { private object dataInstance; /// - /// Initializes a new instance of the class with an already serialized object. + /// Initializes a new instance of the class with an already serialized object. /// /// The key. /// The object. - /// The priority. Objects with higher priority will be synced first. Higher number indicates higher priority. + /// + /// The priority. Objects with higher priority will be synced first. Higher number indicates higher + /// priority. + /// /// The sync options. public OfflineEntry(string key, object obj, string data, int priority, SyncOptions syncOptions, bool isPartial = false) @@ -31,11 +34,14 @@ } /// - /// Initializes a new instance of the class. + /// Initializes a new instance of the class. /// /// The key. /// The object. - /// The priority. Objects with higher priority will be synced first. Higher number indicates higher priority. + /// + /// The priority. Objects with higher priority will be synced first. Higher number indicates higher + /// priority. + /// /// The sync options. public OfflineEntry(string key, object obj, int priority, SyncOptions syncOptions, bool isPartial = false) : this(key, obj, JsonConvert.SerializeObject(obj), priority, syncOptions, isPartial) @@ -43,47 +49,48 @@ } /// - /// Initializes a new instance of the class. + /// Initializes a new instance of the class. /// public OfflineEntry() { } /// - /// Gets or sets the key of this entry. + /// Gets or sets the key of this entry. /// public string Key { get; set; } /// - /// Gets or sets the priority. Objects with higher priority will be synced first. Higher number indicates higher priority. + /// Gets or sets the priority. Objects with higher priority will be synced first. Higher number indicates higher + /// priority. /// public int Priority { get; set; } /// - /// Gets or sets the timestamp when this entry was last touched. + /// Gets or sets the timestamp when this entry was last touched. /// public DateTime Timestamp { get; set; } /// - /// Gets or sets the which define what sync state this entry is in. + /// Gets or sets the which define what sync state this entry is in. /// public SyncOptions SyncOptions { get; set; } /// - /// Gets or sets serialized JSON data. + /// Gets or sets serialized JSON data. /// public string Data { get; set; } /// - /// Specifies whether this is only a partial object. + /// Specifies whether this is only a partial object. /// public bool IsPartial { get; set; } /// - /// Deserializes into . The result is cached. + /// Deserializes into . The result is cached. /// /// Type of object to deserialize into. - /// Instance of . + /// Instance of . public T Deserialize() { return (T) (dataInstance ?? (dataInstance = JsonConvert.DeserializeObject(Data))); diff --git a/FireBase/Offline/RealtimeDatabase.cs b/FireBase/Offline/RealtimeDatabase.cs index 4d61027..973db46 100644 --- a/FireBase/Offline/RealtimeDatabase.cs +++ b/FireBase/Offline/RealtimeDatabase.cs @@ -1,50 +1,57 @@ -namespace Firebase.Database.Offline +using System; +using System.Collections.Generic; +using System.Linq; +using System.Linq.Expressions; +using System.Net; +using System.Reactive.Disposables; +using System.Reactive.Linq; +using System.Reactive.Subjects; +using System.Reactive.Threading.Tasks; +using System.Reflection; +using System.Threading; +using System.Threading.Tasks; +using Firebase.Database.Extensions; +using Firebase.Database.Offline.Internals; +using Firebase.Database.Query; +using Firebase.Database.Streaming; +using Newtonsoft.Json; + +namespace Firebase.Database.Offline { - using System; - using System.Collections.Generic; - using System.Linq; - using System.Reactive.Linq; - using System.Reactive.Subjects; - using System.Threading; - using System.Threading.Tasks; - using Extensions; - using Query; - using Streaming; - using System.Reactive.Threading.Tasks; - using System.Linq.Expressions; - using Internals; - using Newtonsoft.Json; - using System.Reflection; - using System.Reactive.Disposables; - /// - /// The real-time Database which synchronizes online and offline data. + /// The real-time Database which synchronizes online and offline data. /// /// Type of entities. - public partial class RealtimeDatabase : IDisposable where T : class + public class RealtimeDatabase : IDisposable where T : class { private readonly ChildQuery childQuery; private readonly string elementRoot; - private readonly StreamingOptions streamingOptions; - private readonly Subject> subject; + private readonly FirebaseCache firebaseCache; private readonly InitialPullStrategy initialPullStrategy; private readonly bool pushChanges; - private readonly FirebaseCache firebaseCache; + private readonly StreamingOptions streamingOptions; + private readonly Subject> subject; + private FirebaseSubscription firebaseSubscription; private bool isSyncRunning; private IObservable> observable; - private FirebaseSubscription firebaseSubscription; /// - /// Initializes a new instance of the class. + /// Initializes a new instance of the class. /// /// The child query. /// The element Root. /// The offline database factory. /// Custom string which will get appended to the file name. /// Specifies whether changes should be streamed from the server. - /// Specifies if everything should be pull from the online storage on start. It only makes sense when is set to true. - /// Specifies whether changed items should actually be pushed to the server. If this is false, then Put / Post / Delete will not affect server data. + /// + /// Specifies if everything should be pull from the online storage on start. It only + /// makes sense when is set to true. + /// + /// + /// Specifies whether changed items should actually be pushed to the server. If this is false, + /// then Put / Post / Delete will not affect server data. + /// public RealtimeDatabase(ChildQuery childQuery, string elementRoot, Func> offlineDatabaseFactory, string filenameModifier, StreamingOptions streamingOptions, InitialPullStrategy initialPullStrategy, bool pushChanges, @@ -67,24 +74,34 @@ } /// - /// Event raised whenever an exception is thrown in the synchronization thread. Exception thrown in there are swallowed, so this event is the only way to get to them. + /// Gets the backing Database. /// - public event EventHandler SyncExceptionThrown; + public IDictionary Database { get; } + + public ISetHandler PutHandler { private get; set; } + + public void Dispose() + { + subject.OnCompleted(); + firebaseSubscription?.Dispose(); + } /// - /// Gets the backing Database. + /// Event raised whenever an exception is thrown in the synchronization thread. Exception thrown in there are + /// swallowed, so this event is the only way to get to them. /// - public IDictionary Database { get; private set; } - - public ISetHandler PutHandler { private get; set; } + public event EventHandler SyncExceptionThrown; /// - /// Overwrites existing object with given key. + /// Overwrites existing object with given key. /// /// The key. /// The object to set. /// Indicates whether the item should be synced online. - /// The priority. Objects with higher priority will be synced first. Higher number indicates higher priority. + /// + /// The priority. Objects with higher priority will be synced first. Higher number indicates higher + /// priority. + /// public void Set(string key, T obj, SyncOptions syncOptions, int priority = 1) { SetAndRaise(key, new OfflineEntry(key, obj, priority, syncOptions)); @@ -118,10 +135,13 @@ } /// - /// Fetches an object with the given key and adds it to the Database. + /// Fetches an object with the given key and adds it to the Database. /// /// The key. - /// The priority. Objects with higher priority will be synced first. Higher number indicates higher priority. + /// + /// The priority. Objects with higher priority will be synced first. Higher number indicates higher + /// priority. + /// public void Pull(string key, int priority = 1) { if (!Database.ContainsKey(key)) @@ -132,7 +152,7 @@ } /// - /// Fetches everything from the remote database. + /// Fetches everything from the remote database. /// public async Task PullAsync() { @@ -142,7 +162,7 @@ .RetryAfterDelay>, FirebaseException>( childQuery.Client.Options.SyncPeriod, ex => ex.StatusCode == - System.Net.HttpStatusCode + HttpStatusCode .OK) // OK implies the request couldn't complete due to network error. .Select(e => ResetDatabaseFromInitial(e, false)) .SelectMany(e => e) @@ -164,7 +184,7 @@ } /// - /// Retrieves all offline items currently stored in local database. + /// Retrieves all offline items currently stored in local database. /// public IEnumerable> Once() { @@ -174,10 +194,10 @@ .ToList(); } - /// - /// Starts observing the real-time Database. Events will be fired both when change is done locally and remotely. - /// - /// Stream of . + /// + /// Starts observing the real-time Database. Events will be fired both when change is done locally and remotely. + /// + /// Stream of . public IObservable> AsObservable() { if (!isSyncRunning) @@ -212,7 +232,7 @@ .RetryAfterDelay>, FirebaseException>( childQuery.Client.Options.SyncPeriod, ex => ex.StatusCode == - System.Net.HttpStatusCode + HttpStatusCode .OK) // OK implies the request couldn't complete due to network error. .Select(e => ResetDatabaseFromInitial(e)) .SelectMany(e => e) @@ -230,12 +250,6 @@ return observable; } - public void Dispose() - { - subject.OnCompleted(); - firebaseSubscription?.Dispose(); - } - private IReadOnlyCollection> ResetDatabaseFromInitial( IReadOnlyCollection> collection, bool onlyWhenInitialEverything = true) { @@ -308,8 +322,6 @@ firebaseSubscription.ExceptionThrown += StreamingExceptionThrown; return new CompositeDisposable(firebaseSubscription.Run(), completeDisposable); - default: - break; } return completeDisposable; diff --git a/FireBase/Offline/SetHandler.cs b/FireBase/Offline/SetHandler.cs index 18a5131..6314c3c 100644 --- a/FireBase/Offline/SetHandler.cs +++ b/FireBase/Offline/SetHandler.cs @@ -1,8 +1,8 @@ -namespace Firebase.Database.Offline -{ - using Query; - using System.Threading.Tasks; +using System.Threading.Tasks; +using Firebase.Database.Query; +namespace Firebase.Database.Offline +{ public class SetHandler : ISetHandler { public virtual async Task SetAsync(ChildQuery query, string key, OfflineEntry entry) diff --git a/FireBase/Offline/StreamingOptions.cs b/FireBase/Offline/StreamingOptions.cs index 4a5f7b8..a420cbb 100644 --- a/FireBase/Offline/StreamingOptions.cs +++ b/FireBase/Offline/StreamingOptions.cs @@ -3,18 +3,20 @@ public enum StreamingOptions { /// - /// No realtime streaming. + /// No realtime streaming. /// None, /// - /// Streaming of only new items - not the existing ones. + /// Streaming of only new items - not the existing ones. /// LatestOnly, /// - /// Streaming of all items. This will also pull all existing items on start, so be mindful about the number of items in your DB. - /// When used, consider not setting the to because you would pointlessly pull everything twice. + /// Streaming of all items. This will also pull all existing items on start, so be mindful about the number of items in + /// your DB. + /// When used, consider not setting the to + /// because you would pointlessly pull everything twice. /// Everything } diff --git a/FireBase/Offline/SyncOptions.cs b/FireBase/Offline/SyncOptions.cs index aa3e21c..ca68d0a 100644 --- a/FireBase/Offline/SyncOptions.cs +++ b/FireBase/Offline/SyncOptions.cs @@ -1,27 +1,27 @@ namespace Firebase.Database.Offline { /// - /// Specifies type of sync requested for given data. + /// Specifies type of sync requested for given data. /// public enum SyncOptions { /// - /// No sync needed for given data. + /// No sync needed for given data. /// None, /// - /// Data should be pulled from firebase. + /// Data should be pulled from firebase. /// Pull, /// - /// Data should be put to firebase. + /// Data should be put to firebase. /// Put, /// - /// Data should be patched in firebase. + /// Data should be patched in firebase. /// Patch } diff --git a/FireBase/Query/AuthQuery.cs b/FireBase/Query/AuthQuery.cs index 14beb7e..2cfda3c 100644 --- a/FireBase/Query/AuthQuery.cs +++ b/FireBase/Query/AuthQuery.cs @@ -1,18 +1,18 @@ +using System; + namespace Firebase.Database.Query { - using System; - /// - /// Represents an auth parameter in firebase query, e.g. "?auth=xyz". + /// Represents an auth parameter in firebase query, e.g. "?auth=xyz". /// public class AuthQuery : ParameterQuery { private readonly Func tokenFactory; /// - /// Initializes a new instance of the class. + /// Initializes a new instance of the class. /// - /// The parent. + /// The parent. /// The authentication token factory. /// The owner. public AuthQuery(FirebaseQuery parent, Func tokenFactory, FirebaseClient client) : base(parent, @@ -22,10 +22,10 @@ namespace Firebase.Database.Query } /// - /// Build the url parameter value of this child. + /// Build the url parameter value of this child. /// /// The child of this child. - /// The . + /// The . protected override string BuildUrlParameter(FirebaseQuery child) { return tokenFactory(); diff --git a/FireBase/Query/ChildQuery.cs b/FireBase/Query/ChildQuery.cs index 510ae75..014fe09 100644 --- a/FireBase/Query/ChildQuery.cs +++ b/FireBase/Query/ChildQuery.cs @@ -1,16 +1,16 @@ +using System; + namespace Firebase.Database.Query { - using System; - /// - /// Firebase query which references the child of current node. + /// Firebase query which references the child of current node. /// public class ChildQuery : FirebaseQuery { private readonly Func pathFactory; /// - /// Initializes a new instance of the class. + /// Initializes a new instance of the class. /// /// The parent. /// The path to the child node. @@ -22,7 +22,7 @@ namespace Firebase.Database.Query } /// - /// Initializes a new instance of the class. + /// Initializes a new instance of the class. /// /// The client. /// The path to the child node. @@ -32,10 +32,10 @@ namespace Firebase.Database.Query } /// - /// Build the url segment of this child. + /// Build the url segment of this child. /// /// The child of this child. - /// The . + /// The . protected override string BuildUrlSegment(FirebaseQuery child) { var s = pathFactory(); diff --git a/FireBase/Query/FilterQuery.cs b/FireBase/Query/FilterQuery.cs index be544c8..3434d1d 100644 --- a/FireBase/Query/FilterQuery.cs +++ b/FireBase/Query/FilterQuery.cs @@ -1,24 +1,24 @@ +using System; +using System.Globalization; + namespace Firebase.Database.Query { - using System; - using System.Globalization; - /// - /// Represents a firebase filtering query, e.g. "?LimitToLast=10". + /// Represents a firebase filtering query, e.g. "?LimitToLast=10". /// public class FilterQuery : ParameterQuery { - private readonly Func valueFactory; - private readonly Func doubleValueFactory; private readonly Func boolValueFactory; + private readonly Func doubleValueFactory; + private readonly Func valueFactory; /// - /// Initializes a new instance of the class. + /// Initializes a new instance of the class. /// /// The parent. /// The filter. /// The value for filter. - /// The owning client. + /// The owning client. public FilterQuery(FirebaseQuery parent, Func filterFactory, Func valueFactory, FirebaseClient client) : base(parent, filterFactory, client) @@ -27,7 +27,7 @@ namespace Firebase.Database.Query } /// - /// Initializes a new instance of the class. + /// Initializes a new instance of the class. /// /// The parent. /// The filter. @@ -41,7 +41,7 @@ namespace Firebase.Database.Query } /// - /// Initializes a new instance of the class. + /// Initializes a new instance of the class. /// /// The parent. /// The filter. @@ -55,25 +55,21 @@ namespace Firebase.Database.Query } /// - /// The build url parameter. + /// The build url parameter. /// - /// The child. - /// Url parameter part of the resulting path. + /// The child. + /// Url parameter part of the resulting path. protected override string BuildUrlParameter(FirebaseQuery child) { if (valueFactory != null) { - if (valueFactory() == null) return $"null"; + if (valueFactory() == null) return "null"; return $"\"{valueFactory()}\""; } - else if (doubleValueFactory != null) - { + + if (doubleValueFactory != null) return doubleValueFactory().ToString(CultureInfo.InvariantCulture); - } - else if (boolValueFactory != null) - { - return $"{boolValueFactory().ToString().ToLower()}"; - } + if (boolValueFactory != null) return $"{boolValueFactory().ToString().ToLower()}"; return string.Empty; } diff --git a/FireBase/Query/FirebaseQuery.cs b/FireBase/Query/FirebaseQuery.cs index 5e09795..60d0289 100644 --- a/FireBase/Query/FirebaseQuery.cs +++ b/FireBase/Query/FirebaseQuery.cs @@ -1,29 +1,27 @@ +using System; +using System.Collections.Generic; +using System.Net; +using System.Net.Http; +using System.Reactive.Linq; +using System.Threading.Tasks; +using Firebase.Database.Http; +using Firebase.Database.Streaming; +using Newtonsoft.Json; + namespace Firebase.Database.Query { - using System; - using System.Collections.Generic; - using System.Net.Http; - using System.Reactive.Linq; - using System.Threading.Tasks; - using Http; - using Offline; - using Streaming; - using Newtonsoft.Json; - using System.Net; - /// - /// Represents a firebase query. + /// Represents a firebase query. /// public abstract class FirebaseQuery : IFirebaseQuery, IDisposable { - protected TimeSpan DEFAULT_HTTP_CLIENT_TIMEOUT = new TimeSpan(0, 0, 180); - protected readonly FirebaseQuery Parent; private HttpClient client; + protected TimeSpan DEFAULT_HTTP_CLIENT_TIMEOUT = new TimeSpan(0, 0, 180); - /// - /// Initializes a new instance of the class. + /// + /// Initializes a new instance of the class. /// /// The parent of this query. /// The owning client. @@ -34,16 +32,24 @@ namespace Firebase.Database.Query } /// - /// Gets the client. + /// Disposes this instance. + /// + public void Dispose() + { + client?.Dispose(); + } + + /// + /// Gets the client. /// public FirebaseClient Client { get; } /// - /// Queries the firebase server once returning collection of items. + /// Queries the firebase server once returning collection of items. /// /// Optional timeout value. /// Type of elements. - /// Collection of holding the entities returned by server. + /// Collection of holding the entities returned by server. public async Task>> OnceAsync(TimeSpan? timeout = null) { var url = string.Empty; @@ -62,6 +68,39 @@ namespace Firebase.Database.Query .ConfigureAwait(false); } + /// + /// Starts observing this query watching for changes real time sent by the server. + /// + /// Type of elements. + /// Optional custom root element of received json items. + /// Observable stream of . + public IObservable> AsObservable( + EventHandler> exceptionHandler = null, string elementRoot = "") + { + return Observable.Create>(observer => + { + var sub = new FirebaseSubscription(observer, this, elementRoot, new FirebaseCache()); + sub.ExceptionThrown += exceptionHandler; + return sub.Run(); + }); + } + + /// + /// Builds the actual URL of this query. + /// + /// The . + public async Task BuildUrlAsync() + { + // if token factory is present on the parent then use it to generate auth token + if (Client.Options.AuthTokenAsyncFactory != null) + { + var token = await Client.Options.AuthTokenAsyncFactory().ConfigureAwait(false); + return this.WithAuth(token).BuildUrl(null); + } + + return BuildUrl(null); + } + /*public async Task>> OnceAsync(Type dataType, TimeSpan? timeout = null) { var url = string.Empty; @@ -80,11 +119,11 @@ namespace Firebase.Database.Query }*/ /// - /// Assumes given query is pointing to a single object of type and retrieves it. + /// Assumes given query is pointing to a single object of type and retrieves it. /// /// Optional timeout value. /// Type of elements. - /// Single object of type . + /// Single object of type . public async Task OnceSingleAsync(TimeSpan? timeout = null) { var responseData = string.Empty; @@ -118,45 +157,12 @@ namespace Firebase.Database.Query } /// - /// Starts observing this query watching for changes real time sent by the server. - /// - /// Type of elements. - /// Optional custom root element of received json items. - /// Observable stream of . - public IObservable> AsObservable( - EventHandler> exceptionHandler = null, string elementRoot = "") - { - return Observable.Create>(observer => - { - var sub = new FirebaseSubscription(observer, this, elementRoot, new FirebaseCache()); - sub.ExceptionThrown += exceptionHandler; - return sub.Run(); - }); - } - - /// - /// Builds the actual URL of this query. - /// - /// The . - public async Task BuildUrlAsync() - { - // if token factory is present on the parent then use it to generate auth token - if (Client.Options.AuthTokenAsyncFactory != null) - { - var token = await Client.Options.AuthTokenAsyncFactory().ConfigureAwait(false); - return this.WithAuth(token).BuildUrl(null); - } - - return BuildUrl(null); - } - - /// - /// Posts given object to repository. + /// Posts given object to repository. /// /// The object. /// Specifies whether the key should be generated offline instead of online. /// Optional timeout value. - /// Type of + /// Type of /// Resulting firebase object with populated key. public async Task> PostAsync(string data, bool generateKeyOffline = true, TimeSpan? timeout = null) @@ -169,23 +175,21 @@ namespace Firebase.Database.Query return new FirebaseObject(key, data); } - else - { - var c = GetClient(timeout); - var sendData = await SendAsync(c, data, HttpMethod.Post).ConfigureAwait(false); - var result = JsonConvert.DeserializeObject(sendData, Client.Options.JsonSerializerSettings); - return new FirebaseObject(result.Name, data); - } + var c = GetClient(timeout); + var sendData = await SendAsync(c, data, HttpMethod.Post).ConfigureAwait(false); + var result = JsonConvert.DeserializeObject(sendData, Client.Options.JsonSerializerSettings); + + return new FirebaseObject(result.Name, data); } /// - /// Patches data at given location instead of overwriting them. - /// + /// Patches data at given location instead of overwriting them. + /// /// The object. /// Optional timeout value. - /// Type of - /// The . + /// Type of + /// The . public async Task PatchAsync(string data, TimeSpan? timeout = null) { var c = GetClient(timeout); @@ -194,12 +198,12 @@ namespace Firebase.Database.Query } /// - /// Sets or overwrites data at given location. - /// + /// Sets or overwrites data at given location. + /// /// The object. /// Optional timeout value. - /// Type of - /// The . + /// Type of + /// The . public async Task PutAsync(string data, TimeSpan? timeout = null) { var c = GetClient(timeout); @@ -208,10 +212,10 @@ namespace Firebase.Database.Query } /// - /// Deletes data from given location. + /// Deletes data from given location. /// /// Optional timeout value. - /// The . + /// The . public async Task DeleteAsync(TimeSpan? timeout = null) { var c = GetClient(timeout); @@ -243,18 +247,10 @@ namespace Firebase.Database.Query } /// - /// Disposes this instance. - /// - public void Dispose() - { - client?.Dispose(); - } - - /// - /// Build the url segment of this child. + /// Build the url segment of this child. /// /// The child of this query. - /// The . + /// The . protected abstract string BuildUrlSegment(FirebaseQuery child); private string BuildUrl(FirebaseQuery child) diff --git a/FireBase/Query/IFirebaseQuery.cs b/FireBase/Query/IFirebaseQuery.cs index 9f6e36c..0da4b15 100644 --- a/FireBase/Query/IFirebaseQuery.cs +++ b/FireBase/Query/IFirebaseQuery.cs @@ -1,40 +1,40 @@ -namespace Firebase.Database.Query -{ - using System; - using System.Collections.Generic; - using System.Threading.Tasks; - using Streaming; +using System; +using System.Collections.Generic; +using System.Threading.Tasks; +using Firebase.Database.Streaming; +namespace Firebase.Database.Query +{ /// - /// The FirebaseQuery interface. + /// The FirebaseQuery interface. /// public interface IFirebaseQuery { /// - /// Gets the owning client of this query. + /// Gets the owning client of this query. /// FirebaseClient Client { get; } /// - /// Retrieves items which exist on the location specified by this query instance. + /// Retrieves items which exist on the location specified by this query instance. /// /// Optional timeout value. /// Type of the items. - /// Collection of . + /// Collection of . Task>> OnceAsync(TimeSpan? timeout = null); /// - /// Returns current location as an observable which allows to real-time listening to events from the firebase server. + /// Returns current location as an observable which allows to real-time listening to events from the firebase server. /// /// Type of the items. - /// Cold observable of . + /// Cold observable of . IObservable> AsObservable( EventHandler> exceptionHandler, string elementRoot = ""); /// - /// Builds the actual url of this query. + /// Builds the actual url of this query. /// - /// The . + /// The . Task BuildUrlAsync(); } } \ No newline at end of file diff --git a/FireBase/Query/OrderQuery.cs b/FireBase/Query/OrderQuery.cs index 16adba7..302d1a3 100644 --- a/FireBase/Query/OrderQuery.cs +++ b/FireBase/Query/OrderQuery.cs @@ -1,16 +1,16 @@ +using System; + namespace Firebase.Database.Query { - using System; - /// - /// Represents a firebase ordering query, e.g. "?OrderBy=Foo". + /// Represents a firebase ordering query, e.g. "?OrderBy=Foo". /// public class OrderQuery : ParameterQuery { private readonly Func propertyNameFactory; /// - /// Initializes a new instance of the class. + /// Initializes a new instance of the class. /// /// The query parent. /// The property name. @@ -22,10 +22,10 @@ namespace Firebase.Database.Query } /// - /// The build url parameter. + /// The build url parameter. /// /// The child. - /// The . + /// The . protected override string BuildUrlParameter(FirebaseQuery child) { return $"\"{propertyNameFactory()}\""; diff --git a/FireBase/Query/ParameterQuery.cs b/FireBase/Query/ParameterQuery.cs index fb273a3..572224c 100644 --- a/FireBase/Query/ParameterQuery.cs +++ b/FireBase/Query/ParameterQuery.cs @@ -1,9 +1,9 @@ +using System; + namespace Firebase.Database.Query { - using System; - /// - /// Represents a parameter in firebase query, e.g. "?data=foo". + /// Represents a parameter in firebase query, e.g. "?data=foo". /// public abstract class ParameterQuery : FirebaseQuery { @@ -11,7 +11,7 @@ namespace Firebase.Database.Query private readonly string separator; /// - /// Initializes a new instance of the class. + /// Initializes a new instance of the class. /// /// The parent of this query. /// The parameter. @@ -24,20 +24,20 @@ namespace Firebase.Database.Query } /// - /// Build the url segment represented by this query. - /// + /// Build the url segment represented by this query. + /// /// The child. - /// The . + /// The . protected override string BuildUrlSegment(FirebaseQuery child) { return $"{separator}{parameterFactory()}={BuildUrlParameter(child)}"; } /// - /// The build url parameter. + /// The build url parameter. /// /// The child. - /// The . + /// The . protected abstract string BuildUrlParameter(FirebaseQuery child); } } \ No newline at end of file diff --git a/FireBase/Query/QueryExtensions.cs b/FireBase/Query/QueryExtensions.cs index 735fe0a..df2edfc 100644 --- a/FireBase/Query/QueryExtensions.cs +++ b/FireBase/Query/QueryExtensions.cs @@ -6,158 +6,163 @@ using Newtonsoft.Json; namespace Firebase.Database.Query { /// - /// Query extensions providing linq like syntax for firebase server methods. + /// Query extensions providing linq like syntax for firebase server methods. /// public static class QueryExtensions { /// - /// Adds an auth parameter to the query. + /// Adds an auth parameter to the query. /// /// The child. /// The auth token. - /// The . + /// The . internal static AuthQuery WithAuth(this FirebaseQuery node, string token) { return node.WithAuth(() => token); } /// - /// Appends print=silent to save bandwidth. + /// Appends print=silent to save bandwidth. /// /// The child. - /// The . + /// The . internal static SilentQuery Silent(this FirebaseQuery node) { return new SilentQuery(node, node.Client); } /// - /// References a sub child of the existing node. + /// References a sub child of the existing node. /// /// The child. /// The path of sub child. - /// The . + /// The . public static ChildQuery Child(this ChildQuery node, string path) { return node.Child(() => path); } /// - /// Order data by given . Note that this is used mainly for following filtering queries and due to firebase implementation - /// the data may actually not be ordered. + /// Order data by given . Note that this is used mainly for following filtering queries and + /// due to firebase implementation + /// the data may actually not be ordered. /// /// The child. /// The property name. - /// The . + /// The . public static OrderQuery OrderBy(this ChildQuery child, string propertyName) { return child.OrderBy(() => propertyName); } /// - /// Instructs firebase to send data greater or equal to the . This must be preceded by an OrderBy query. + /// Instructs firebase to send data greater or equal to the . This must be preceded by an OrderBy + /// query. /// /// Current node. /// Value to start at. - /// The . + /// The . public static FilterQuery StartAt(this ParameterQuery child, string value) { return child.StartAt(() => value); } /// - /// Instructs firebase to send data lower or equal to the . This must be preceded by an OrderBy query. + /// Instructs firebase to send data lower or equal to the . This must be preceded by an OrderBy + /// query. /// /// Current node. /// Value to start at. - /// The . + /// The . public static FilterQuery EndAt(this ParameterQuery child, string value) { return child.EndAt(() => value); } /// - /// Instructs firebase to send data equal to the . This must be preceded by an OrderBy query. + /// Instructs firebase to send data equal to the . This must be preceded by an OrderBy query. /// /// Current node. /// Value to start at. - /// The . + /// The . public static FilterQuery EqualTo(this ParameterQuery child, string value) { return child.EqualTo(() => value); } /// - /// Instructs firebase to send data greater or equal to the . This must be preceded by an OrderBy query. + /// Instructs firebase to send data greater or equal to the . This must be preceded by an OrderBy + /// query. /// /// Current node. /// Value to start at. - /// The . + /// The . public static FilterQuery StartAt(this ParameterQuery child, double value) { return child.StartAt(() => value); } /// - /// Instructs firebase to send data lower or equal to the . This must be preceded by an OrderBy query. + /// Instructs firebase to send data lower or equal to the . This must be preceded by an OrderBy + /// query. /// /// Current node. /// Value to start at. - /// The . + /// The . public static FilterQuery EndAt(this ParameterQuery child, double value) { return child.EndAt(() => value); } /// - /// Instructs firebase to send data equal to the . This must be preceded by an OrderBy query. + /// Instructs firebase to send data equal to the . This must be preceded by an OrderBy query. /// /// Current node. /// Value to start at. - /// The . + /// The . public static FilterQuery EqualTo(this ParameterQuery child, double value) { return child.EqualTo(() => value); } /// - /// Instructs firebase to send data equal to the . This must be preceded by an OrderBy query. + /// Instructs firebase to send data equal to the . This must be preceded by an OrderBy query. /// /// Current node. /// Value to start at. - /// The . + /// The . public static FilterQuery EqualTo(this ParameterQuery child, bool value) { return child.EqualTo(() => value); } /// - /// Instructs firebase to send data equal to null. This must be preceded by an OrderBy query. + /// Instructs firebase to send data equal to null. This must be preceded by an OrderBy query. /// /// Current node. - /// The . + /// The . public static FilterQuery EqualTo(this ParameterQuery child) { return child.EqualTo(() => null); } /// - /// Limits the result to first items. + /// Limits the result to first items. /// /// Current node. /// Number of elements. - /// The . + /// The . public static FilterQuery LimitToFirst(this ParameterQuery child, int count) { return child.LimitToFirst(() => count); } /// - /// Limits the result to last items. + /// Limits the result to last items. /// /// Current node. /// Number of elements. - /// The . + /// The . public static FilterQuery LimitToLast(this ParameterQuery child, int count) { return child.LimitToLast(() => count); @@ -184,7 +189,8 @@ namespace Firebase.Database.Query } /// - /// Fan out given item to multiple locations at once. See https://firebase.googleblog.com/2015/10/client-side-fan-out-for-data-consistency_73.html for details. + /// Fan out given item to multiple locations at once. See + /// https://firebase.googleblog.com/2015/10/client-side-fan-out-for-data-consistency_73.html for details. /// /// Type of object to fan out. /// Current node. diff --git a/FireBase/Query/QueryFactoryExtensions.cs b/FireBase/Query/QueryFactoryExtensions.cs index b54c315..71dae5c 100644 --- a/FireBase/Query/QueryFactoryExtensions.cs +++ b/FireBase/Query/QueryFactoryExtensions.cs @@ -1,173 +1,184 @@ +using System; + namespace Firebase.Database.Query { - using System; - /// - /// Query extensions providing linq like syntax for firebase server methods. + /// Query extensions providing linq like syntax for firebase server methods. /// public static class QueryFactoryExtensions { /// - /// Adds an auth parameter to the query. + /// Adds an auth parameter to the query. /// /// The child. /// The auth token. - /// The . + /// The . internal static AuthQuery WithAuth(this FirebaseQuery node, Func tokenFactory) { return new AuthQuery(node, tokenFactory, node.Client); } /// - /// References a sub child of the existing node. + /// References a sub child of the existing node. /// /// The child. /// The path of sub child. - /// The . + /// The . public static ChildQuery Child(this ChildQuery node, Func pathFactory) { return new ChildQuery(node, pathFactory, node.Client); } /// - /// Order data by given . Note that this is used mainly for following filtering queries and due to firebase implementation - /// the data may actually not be ordered. + /// Order data by given . Note that this is used mainly for following filtering + /// queries and due to firebase implementation + /// the data may actually not be ordered. /// /// The child. /// The property name. - /// The . + /// The . public static OrderQuery OrderBy(this ChildQuery child, Func propertyNameFactory) { return new OrderQuery(child, propertyNameFactory, child.Client); } /// - /// Order data by $key. Note that this is used mainly for following filtering queries and due to firebase implementation - /// the data may actually not be ordered. + /// Order data by $key. Note that this is used mainly for following filtering queries and due to firebase + /// implementation + /// the data may actually not be ordered. /// /// The child. - /// The . + /// The . public static OrderQuery OrderByKey(this ChildQuery child) { return child.OrderBy("$key"); } /// - /// Order data by $value. Note that this is used mainly for following filtering queries and due to firebase implementation - /// the data may actually not be ordered. + /// Order data by $value. Note that this is used mainly for following filtering queries and due to firebase + /// implementation + /// the data may actually not be ordered. /// /// The child. - /// The . + /// The . public static OrderQuery OrderByValue(this ChildQuery child) { return child.OrderBy("$value"); } /// - /// Order data by $priority. Note that this is used mainly for following filtering queries and due to firebase implementation - /// the data may actually not be ordered. + /// Order data by $priority. Note that this is used mainly for following filtering queries and due to firebase + /// implementation + /// the data may actually not be ordered. /// /// The child. - /// The . + /// The . public static OrderQuery OrderByPriority(this ChildQuery child) { return child.OrderBy("$priority"); } /// - /// Instructs firebase to send data greater or equal to the . This must be preceded by an OrderBy query. + /// Instructs firebase to send data greater or equal to the . This must be preceded by an + /// OrderBy query. /// /// Current node. /// Value to start at. - /// The . + /// The . public static FilterQuery StartAt(this ParameterQuery child, Func valueFactory) { return new FilterQuery(child, () => "startAt", valueFactory, child.Client); } /// - /// Instructs firebase to send data lower or equal to the . This must be preceded by an OrderBy query. + /// Instructs firebase to send data lower or equal to the . This must be preceded by an + /// OrderBy query. /// /// Current node. /// Value to start at. - /// The . + /// The . public static FilterQuery EndAt(this ParameterQuery child, Func valueFactory) { return new FilterQuery(child, () => "endAt", valueFactory, child.Client); } /// - /// Instructs firebase to send data equal to the . This must be preceded by an OrderBy query. + /// Instructs firebase to send data equal to the . This must be preceded by an OrderBy + /// query. /// /// Current node. /// Value to start at. - /// The . + /// The . public static FilterQuery EqualTo(this ParameterQuery child, Func valueFactory) { return new FilterQuery(child, () => "equalTo", valueFactory, child.Client); } /// - /// Instructs firebase to send data greater or equal to the . This must be preceded by an OrderBy query. + /// Instructs firebase to send data greater or equal to the . This must be preceded by an + /// OrderBy query. /// /// Current node. /// Value to start at. - /// The . + /// The . public static FilterQuery StartAt(this ParameterQuery child, Func valueFactory) { return new FilterQuery(child, () => "startAt", valueFactory, child.Client); } /// - /// Instructs firebase to send data lower or equal to the . This must be preceded by an OrderBy query. + /// Instructs firebase to send data lower or equal to the . This must be preceded by an + /// OrderBy query. /// /// Current node. /// Value to start at. - /// The . + /// The . public static FilterQuery EndAt(this ParameterQuery child, Func valueFactory) { return new FilterQuery(child, () => "endAt", valueFactory, child.Client); } /// - /// Instructs firebase to send data equal to the . This must be preceded by an OrderBy query. + /// Instructs firebase to send data equal to the . This must be preceded by an OrderBy + /// query. /// /// Current node. /// Value to start at. - /// The . + /// The . public static FilterQuery EqualTo(this ParameterQuery child, Func valueFactory) { return new FilterQuery(child, () => "equalTo", valueFactory, child.Client); } /// - /// Instructs firebase to send data equal to the . This must be preceded by an OrderBy query. + /// Instructs firebase to send data equal to the . This must be preceded by an OrderBy + /// query. /// /// Current node. /// Value to start at. - /// The . + /// The . public static FilterQuery EqualTo(this ParameterQuery child, Func valueFactory) { return new FilterQuery(child, () => "equalTo", valueFactory, child.Client); } /// - /// Limits the result to first items. + /// Limits the result to first items. /// /// Current node. /// Number of elements. - /// The . + /// The . public static FilterQuery LimitToFirst(this ParameterQuery child, Func countFactory) { return new FilterQuery(child, () => "limitToFirst", () => countFactory(), child.Client); } /// - /// Limits the result to last items. + /// Limits the result to last items. /// /// Current node. /// Number of elements. - /// The . + /// The . public static FilterQuery LimitToLast(this ParameterQuery child, Func countFactory) { return new FilterQuery(child, () => "limitToLast", () => countFactory(), child.Client); diff --git a/FireBase/Query/SilentQuery.cs b/FireBase/Query/SilentQuery.cs index 1960426..d09d38b 100644 --- a/FireBase/Query/SilentQuery.cs +++ b/FireBase/Query/SilentQuery.cs @@ -1,7 +1,7 @@ namespace Firebase.Database.Query { /// - /// Appends print=silent to the url. + /// Appends print=silent to the url. /// public class SilentQuery : ParameterQuery { diff --git a/FireBase/Streaming/FirebaseCache.cs b/FireBase/Streaming/FirebaseCache.cs index 77fc622..66241e0 100644 --- a/FireBase/Streaming/FirebaseCache.cs +++ b/FireBase/Streaming/FirebaseCache.cs @@ -1,15 +1,15 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using System.Linq; +using System.Reflection; +using Firebase.Database.Http; +using Newtonsoft.Json; + namespace Firebase.Database.Streaming { - using System; - using System.Collections; - using System.Collections.Generic; - using System.Linq; - using System.Reflection; - using Http; - using Newtonsoft.Json; - /// - /// The firebase cache. + /// The firebase cache. /// /// Type of top-level entities in the cache. public class FirebaseCache : IEnumerable> @@ -17,13 +17,13 @@ namespace Firebase.Database.Streaming private readonly IDictionary dictionary; private readonly bool isDictionaryType; - private readonly JsonSerializerSettings serializerSettings = new JsonSerializerSettings() + private readonly JsonSerializerSettings serializerSettings = new JsonSerializerSettings { ObjectCreationHandling = ObjectCreationHandling.Replace }; /// - /// Initializes a new instance of the class. + /// Initializes a new instance of the class. /// public FirebaseCache() : this(new Dictionary()) @@ -31,7 +31,7 @@ namespace Firebase.Database.Streaming } /// - /// Initializes a new instance of the class and populates it with existing data. + /// Initializes a new instance of the class and populates it with existing data. /// /// The existing items. public FirebaseCache(IDictionary existingItems) @@ -41,10 +41,10 @@ namespace Firebase.Database.Streaming } /// - /// The push data. + /// The push data. /// - /// The path of incoming data, separated by slash. - /// The data in json format as returned by firebase. + /// The path of incoming data, separated by slash. + /// The data in json format as returned by firebase. /// Collection of top-level entities which were affected by the push. public IEnumerable> PushData(string path, string data, bool removeEmptyEntries = true) { @@ -63,7 +63,7 @@ namespace Firebase.Database.Streaming var dictionary = obj as IDictionary; var valueType = obj.GetType().GenericTypeArguments[1]; - primitiveObjSetter = (d) => dictionary[element] = d; + primitiveObjSetter = d => dictionary[element] = d; objDeleter = () => dictionary.Remove(element); if (dictionary.Contains(element)) @@ -87,7 +87,7 @@ namespace Firebase.Database.Streaming element == p.GetCustomAttribute()?.PropertyName); objDeleter = () => property.SetValue(objParent, null); - primitiveObjSetter = (d) => property.SetValue(objParent, d); + primitiveObjSetter = d => property.SetValue(objParent, d); obj = property.GetValue(obj); if (obj == null) { @@ -138,7 +138,7 @@ namespace Firebase.Database.Streaming // firebase sends strings without double quotes var targetObject = valueType == typeof(string) - ? data.ToString() + ? data : JsonConvert.DeserializeObject(data, valueType); if ((valueType.GetTypeInfo().IsPrimitive || valueType == typeof(string)) && primitiveObjSetter != null) @@ -161,8 +161,7 @@ namespace Firebase.Database.Streaming { if (type == typeof(string)) return string.Empty; - else - return Activator.CreateInstance(type); + return Activator.CreateInstance(type); } #region IEnumerable diff --git a/FireBase/Streaming/FirebaseEvent.cs b/FireBase/Streaming/FirebaseEvent.cs index e4fd238..1761a72 100644 --- a/FireBase/Streaming/FirebaseEvent.cs +++ b/FireBase/Streaming/FirebaseEvent.cs @@ -1,13 +1,13 @@ namespace Firebase.Database.Streaming { /// - /// Firebase event which hold and the object affected by the event. + /// Firebase event which hold and the object affected by the event. /// /// Type of object affected by the event. public class FirebaseEvent : FirebaseObject { /// - /// Initializes a new instance of the class. + /// Initializes a new instance of the class. /// /// The key of the object. /// The object. @@ -20,12 +20,12 @@ namespace Firebase.Database.Streaming } /// - /// Gets the source of the event. + /// Gets the source of the event. /// public FirebaseEventSource EventSource { get; } /// - /// Gets the event type. + /// Gets the event type. /// public FirebaseEventType EventType { get; } diff --git a/FireBase/Streaming/FirebaseEventSource.cs b/FireBase/Streaming/FirebaseEventSource.cs index 0a397ad..b1385ca 100644 --- a/FireBase/Streaming/FirebaseEventSource.cs +++ b/FireBase/Streaming/FirebaseEventSource.cs @@ -1,37 +1,37 @@ namespace Firebase.Database.Streaming { /// - /// Specifies the origin of given + /// Specifies the origin of given /// public enum FirebaseEventSource { /// - /// Event comes from an offline source. + /// Event comes from an offline source. /// Offline, /// - /// Event comes from online source fetched during initial pull (valid only for RealtimeDatabase). + /// Event comes from online source fetched during initial pull (valid only for RealtimeDatabase). /// OnlineInitial, /// - /// Event comes from online source received thru active stream. + /// Event comes from online source received thru active stream. /// OnlineStream, /// - /// Event comes from online source being fetched manually. + /// Event comes from online source being fetched manually. /// OnlinePull, /// - /// Event raised after successful online push (valid only for RealtimeDatabase which isn't streaming). + /// Event raised after successful online push (valid only for RealtimeDatabase which isn't streaming). /// OnlinePush, /// - /// Event comes from an online source. + /// Event comes from an online source. /// Online = OnlineInitial | OnlinePull | OnlinePush | OnlineStream } diff --git a/FireBase/Streaming/FirebaseEventType.cs b/FireBase/Streaming/FirebaseEventType.cs index d8c65b3..7606331 100644 --- a/FireBase/Streaming/FirebaseEventType.cs +++ b/FireBase/Streaming/FirebaseEventType.cs @@ -1,17 +1,17 @@ namespace Firebase.Database.Streaming { /// - /// The type of event. + /// The type of event. /// public enum FirebaseEventType { /// - /// Item was inserted or updated. + /// Item was inserted or updated. /// InsertOrUpdate, /// - /// Item was deleted. + /// Item was deleted. /// Delete } diff --git a/FireBase/Streaming/FirebaseSubscription.cs b/FireBase/Streaming/FirebaseSubscription.cs index acdc76c..fb0f403 100644 --- a/FireBase/Streaming/FirebaseSubscription.cs +++ b/FireBase/Streaming/FirebaseSubscription.cs @@ -1,30 +1,28 @@ +using System; +using System.Linq; +using System.Net; +using System.Net.Http; +using System.Net.Http.Headers; +using System.Threading; +using System.Threading.Tasks; +using Firebase.Database.Query; +using Newtonsoft.Json.Linq; + namespace Firebase.Database.Streaming { - using System; - using System.Diagnostics; - using System.Linq; - using System.Net.Http; - using System.Net.Http.Headers; - using System.Threading; - using System.Threading.Tasks; - using Query; - using Newtonsoft.Json.Linq; - using System.Net; - /// - /// The firebase subscription. + /// The firebase subscription. /// /// Type of object to be streaming back to the called. internal class FirebaseSubscription : IDisposable { + private static readonly HttpClient http; + private readonly FirebaseCache cache; private readonly CancellationTokenSource cancel; + private readonly FirebaseClient client; + private readonly string elementRoot; private readonly IObserver> observer; private readonly IFirebaseQuery query; - private readonly FirebaseCache cache; - private readonly string elementRoot; - private readonly FirebaseClient client; - - private static HttpClient http; static FirebaseSubscription() { @@ -43,7 +41,7 @@ namespace Firebase.Database.Streaming } /// - /// Initializes a new instance of the class. + /// Initializes a new instance of the class. /// /// The observer. /// The query. @@ -59,13 +57,13 @@ namespace Firebase.Database.Streaming client = query.Client; } - public event EventHandler> ExceptionThrown; - public void Dispose() { cancel.Cancel(); } + public event EventHandler> ExceptionThrown; + public IDisposable Run() { Task.Run(() => ReceiveThread()); diff --git a/FireBase/Streaming/NonBlockingStreamReader.cs b/FireBase/Streaming/NonBlockingStreamReader.cs index ab01510..8228e32 100644 --- a/FireBase/Streaming/NonBlockingStreamReader.cs +++ b/FireBase/Streaming/NonBlockingStreamReader.cs @@ -1,21 +1,24 @@ -namespace Firebase.Database.Streaming -{ - using System.IO; - using System.Text; +using System.IO; +using System.Text; +namespace Firebase.Database.Streaming +{ /// - /// When a regular is used in a UWP app its method tends to take a long - /// time for data larger then 2 KB. This extremly simple implementation of can be used instead to boost performance - /// in your UWP app. Use to inject an instance of this class into your . + /// When a regular is used in a UWP app its method + /// tends to take a long + /// time for data larger then 2 KB. This extremly simple implementation of can be used + /// instead to boost performance + /// in your UWP app. Use to inject an instance of this class into your + /// . /// public class NonBlockingStreamReader : TextReader { private const int DefaultBufferSize = 16000; - - private readonly Stream stream; private readonly byte[] buffer; private readonly int bufferSize; + private readonly Stream stream; + private string cachedData; public NonBlockingStreamReader(Stream stream, int bufferSize = DefaultBufferSize) diff --git a/ZooBOTanica/CritCreate.cs b/ZooBOTanica/CritCreate.cs index c26f323..e79cff4 100644 --- a/ZooBOTanica/CritCreate.cs +++ b/ZooBOTanica/CritCreate.cs @@ -1,18 +1,11 @@ using System; using System.Collections.Generic; -using System.ComponentModel; -using System.Data; -using System.Drawing; -using System.Linq; -using System.Text; -using System.Threading.Tasks; using System.Windows.Forms; +using DSALib; +using DSALib.Characters; namespace ZooBOTanica { - using DSALib; - using DSALib.Characters; - public partial class CritCreateForm : Form { public Critter critter; diff --git a/ZooBOTanica/Program.cs b/ZooBOTanica/Program.cs index 0c1123e..59c7434 100644 --- a/ZooBOTanica/Program.cs +++ b/ZooBOTanica/Program.cs @@ -1,7 +1,4 @@ using System; -using System.Collections.Generic; -using System.Linq; -using System.Threading.Tasks; using System.Windows.Forms; namespace ZooBOTanica @@ -9,7 +6,7 @@ namespace ZooBOTanica internal static class Program { /// - /// Der Haupteinstiegspunkt für die Anwendung. + /// Der Haupteinstiegspunkt für die Anwendung. /// [STAThread] private static void Main() diff --git a/ZooBOTanica/Properties/AssemblyInfo.cs b/ZooBOTanica/Properties/AssemblyInfo.cs index 8bba4bc..b2b516e 100644 --- a/ZooBOTanica/Properties/AssemblyInfo.cs +++ b/ZooBOTanica/Properties/AssemblyInfo.cs @@ -1,5 +1,4 @@ using System.Reflection; -using System.Runtime.CompilerServices; using System.Runtime.InteropServices; // Allgemeine Informationen über eine Assembly werden über die folgenden -- cgit v1.2.3-54-g00ecf From e6181c24124d97f2fbc932b8a68311e625463156 Mon Sep 17 00:00:00 2001 From: uzvkl Date: Tue, 11 Jun 2019 23:05:52 +0200 Subject: Move dsa related stuff to subfolder --- DSACore/Controllers/CommandsController.cs | 56 --- DSACore/Controllers/LobbyController.cs | 32 -- DSACore/Controllers/TokensController.cs | 25 -- DSACore/Controllers/ValuesController.cs | 45 -- DSACore/DSACore.csproj | 28 -- DSACore/Hubs/Login.cs | 205 --------- DSACore/Models/Network/Group.cs | 43 -- DSACore/Models/Network/Token.cs | 21 - DSACore/Models/Network/User.cs | 9 - DSACore/Program.cs | 24 -- .../Properties/DSALib-Auxiliary-CommandInfo.json | 101 ----- .../DSALib-DSA_Game-Characters-Character.json | 290 ------------- .../PublishProfiles/FolderProfile.pubxml | 23 - .../PublishProfiles/FolderProfile1.pubxml | 23 - DSACore/Properties/launchSettings.json | 30 -- DSACore/Startup.cs | 47 -- DSACore/appsettings.Development.json | 9 - DSACore/appsettings.json | 10 - DSALib/Auxiliary/Calculator/Argument.cs | 35 -- DSALib/Auxiliary/Calculator/ISolvable.cs | 10 - DSALib/Auxiliary/Calculator/Operator.cs | 51 --- DSALib/Auxiliary/Calculator/Ops.cs | 13 - DSALib/Auxiliary/Calculator/StringSolver.cs | 183 -------- DSALib/Auxiliary/CommandInfo.cs | 28 -- DSALib/Auxiliary/Dice.cs | 45 -- DSALib/Auxiliary/Extensions.cs | 25 -- DSALib/Auxiliary/IDataObjectEnumerableExtension.cs | 25 -- DSALib/Auxiliary/RandomMisc.cs | 52 --- DSALib/Auxiliary/SpellCorrect.cs | 61 --- DSALib/Auxiliary/TalentEnumerableExtension.cs | 74 ---- DSALib/Auxiliary/WeaponImporter.cs | 175 -------- DSALib/Characters/Being.cs | 17 - DSALib/Characters/Critter.cs | 88 ---- DSALib/Characters/Entity.cs | 12 - DSALib/Characters/ICharacter.cs | 15 - DSALib/Characters/ICombatant.cs | 20 - DSALib/Commands/CommandHandler.cs | 135 ------ DSALib/Commands/CommandTypes.cs | 13 - DSALib/Commands/FileHandler.cs | 32 -- DSALib/Commands/Gm.cs | 176 -------- DSALib/Commands/HeldList.cs | 174 -------- DSALib/Commands/Help.cs | 54 --- DSALib/Commands/LebenUndAstral.cs | 172 -------- DSALib/Commands/List.cs | 39 -- DSALib/Commands/MiscCommands.cs | 219 ---------- DSALib/Commands/NpcCommands.cs | 35 -- DSALib/Commands/ProbenTest.cs | 85 ---- DSALib/DSALib.csproj | 11 - DSALib/DSA_Game/Characters/Character.cs | 269 ------------ DSALib/DSA_Game/Characters/NPC.cs | 83 ---- DSALib/DSA_Game/Characters/SaveChar.cs | 38 -- DSALib/DSA_Game/Dsa.cs | 95 ---- DSALib/DSA_Game/Save/Properties.cs | 74 ---- DSALib/DSA_Game/Save/SaveCommand.cs | 66 --- DSALib/DSA_Game/Save/Session.cs | 51 --- DSALib/FireBase/Database.cs | 270 ------------ DSALib/Models/Database/DSA/Advantage.cs | 16 - DSALib/Models/Database/DSA/CharSpell.cs | 16 - DSALib/Models/Database/DSA/DatabaseChar.cs | 63 --- DSALib/Models/Database/DSA/Field.cs | 16 - DSALib/Models/Database/DSA/GeneralSpell.cs | 20 - DSALib/Models/Database/DSA/GroupChar.cs | 13 - DSALib/Models/Database/DSA/Inventory.cs | 12 - DSALib/Models/Database/DSA/Talent.cs | 24 -- DSALib/Models/Database/DSA/Weapon.cs | 52 --- DSALib/Models/Database/DSA/WeaponTalent.cs | 18 - DSALib/Models/Database/DataObject.cs | 13 - DSALib/Models/Database/Groups/DSAGroup.cs | 10 - DSALib/Models/Database/Groups/Group.cs | 9 - DSALib/Models/Database/IDataObject.cs | 7 - DSALib/Models/Dsa/CritterAttack.cs | 19 - DSALib/Models/Dsa/KampfTalent.cs | 16 - DSALib/Models/Dsa/Talent.cs | 43 -- DSALib/Models/Dsa/Vorteil.cs | 16 - DSALib/Models/Dsa/Zauber.cs | 16 - DSALib/Models/Network/Command.cs | 18 - DSALib/Models/Network/CommandResponse.cs | 28 -- .../Properties-DSACore-Auxiliary-CommandInfo.json | 101 ----- ...ties-DSACore-DSA_Game-Characters-Character.json | 290 ------------- .../PropertiesNewtonsoft-Json-Linq-JProperty.json | 30 -- DiscoBot.sln | 23 +- DiscoBot/App.config | 42 -- DiscoBot/Auxiliary/CommandExtension.cs | 98 ----- DiscoBot/Auxiliary/Dice.cs | 31 -- DiscoBot/Auxiliary/Permissions.cs | 32 -- DiscoBot/Auxiliary/RandomMisc.cs | 36 -- DiscoBot/Auxiliary/SpellCorrect.cs | 105 ----- DiscoBot/Commands/CommandExtension.cs | 119 ----- DiscoBot/Commands/FileHandler.cs | 25 -- DiscoBot/Commands/MiscCommands.cs | 189 -------- DiscoBot/DiscoBot.csproj | 149 ------- DiscoBot/Help.json | 120 ------ DiscoBot/Program.cs | 113 ----- DiscoBot/Properties.json | 129 ------ DiscoBot/Properties/AssemblyInfo.cs | 35 -- DiscoBot/Properties/DiscoBot-Audio-Sound.json | 7 - .../Properties/DiscoBot-Auxiliary-CommandInfo.json | 101 ----- .../DiscoBot-DSA_Game-Characters-Character.json | 290 ------------- DiscoBot/Properties/Settings.Designer.cs | 38 -- DiscoBot/Properties/Settings.settings | 9 - DiscoBot/Rework/Permissions.cs | 43 -- DiscoBot/Token | 1 - DiscoBot/packages.config | 63 --- DiscoBot/session.json | 6 - DiscoBot/sessions/TheCrew/TheCrew-0.json | 83 ---- DiscoBot/sessions/copy/copy-0.json | 79 ---- DiscoBot/sessions/test/test-0.json | 79 ---- DiscoBot/sessions/test/test-1.json | 79 ---- DiscoBot/sessions/test/test-2.json | 81 ---- DiscoBot/sessions/test/test-3.json | 81 ---- DiscoBot/sessions/test/test-4.json | 81 ---- FireBase/ExceptionEventArgs.cs | 28 -- FireBase/Extensions/ObservableExtensions.cs | 41 -- FireBase/Extensions/TaskExtensions.cs | 23 - FireBase/FireBase.csproj | 13 - FireBase/FirebaseClient.cs | 49 --- FireBase/FirebaseException.cs | 53 --- FireBase/FirebaseKeyGenerator.cs | 79 ---- FireBase/FirebaseObject.cs | 27 -- FireBase/FirebaseOptions.cs | 52 --- FireBase/Http/HttpClientExtensions.cs | 123 ------ FireBase/Http/PostResult.cs | 13 - FireBase/ObservableExtensions.cs | 40 -- FireBase/Offline/ConcurrentOfflineDatabase.cs | 233 ---------- FireBase/Offline/DatabaseExtensions.cs | 257 ----------- FireBase/Offline/ISetHandler.cs | 10 - FireBase/Offline/InitialPullStrategy.cs | 23 - FireBase/Offline/Internals/MemberAccessVisitor.cs | 46 -- FireBase/Offline/OfflineCacheAdapter.cs | 152 ------- FireBase/Offline/OfflineDatabase.cs | 228 ---------- FireBase/Offline/OfflineEntry.cs | 99 ----- FireBase/Offline/RealtimeDatabase.cs | 479 --------------------- FireBase/Offline/SetHandler.cs | 19 - FireBase/Offline/StreamingOptions.cs | 23 - FireBase/Offline/SyncOptions.cs | 28 -- FireBase/Query/AuthQuery.cs | 34 -- FireBase/Query/ChildQuery.cs | 50 --- FireBase/Query/FilterQuery.cs | 77 ---- FireBase/Query/FirebaseQuery.cs | 314 -------------- FireBase/Query/IFirebaseQuery.cs | 40 -- FireBase/Query/OrderQuery.cs | 34 -- FireBase/Query/ParameterQuery.cs | 43 -- FireBase/Query/QueryExtensions.cs | 210 --------- FireBase/Query/QueryFactoryExtensions.cs | 187 -------- FireBase/Query/SilentQuery.cs | 18 - FireBase/Settings.StyleCop | 77 ---- FireBase/Streaming/FirebaseCache.cs | 181 -------- FireBase/Streaming/FirebaseEvent.cs | 37 -- FireBase/Streaming/FirebaseEventSource.cs | 38 -- FireBase/Streaming/FirebaseEventType.cs | 18 - FireBase/Streaming/FirebaseServerEventType.cs | 15 - FireBase/Streaming/FirebaseSubscription.cs | 217 ---------- FireBase/Streaming/NonBlockingStreamReader.cs | 63 --- .../Auxiliary/Calculator/ArgumentTests.cs | 59 --- .../Auxiliary/Calculator/StringSolverTests.cs | 105 ----- NUnitTestProject1/Auxiliary/DiceTests.cs | 71 --- NUnitTestProject1/NUnitTest.csproj | 20 - dsa/DSACore/Controllers/CommandsController.cs | 56 +++ dsa/DSACore/Controllers/LobbyController.cs | 32 ++ dsa/DSACore/Controllers/TokensController.cs | 25 ++ dsa/DSACore/Controllers/ValuesController.cs | 45 ++ dsa/DSACore/DSACore.csproj | 28 ++ dsa/DSACore/Hubs/Login.cs | 205 +++++++++ dsa/DSACore/Models/Network/Group.cs | 43 ++ dsa/DSACore/Models/Network/Token.cs | 21 + dsa/DSACore/Models/Network/User.cs | 9 + dsa/DSACore/Program.cs | 24 ++ .../Properties/DSALib-Auxiliary-CommandInfo.json | 101 +++++ .../DSALib-DSA_Game-Characters-Character.json | 290 +++++++++++++ .../PublishProfiles/FolderProfile.pubxml | 23 + .../PublishProfiles/FolderProfile1.pubxml | 23 + dsa/DSACore/Properties/launchSettings.json | 30 ++ .../PropertiesDSALib-Auxiliary-CommandInfo.json | 101 +++++ ...ertiesDSALib-DSA_Game-Characters-Character.json | 290 +++++++++++++ .../PropertiesNewtonsoft-Json-Linq-JProperty.json | 30 ++ dsa/DSACore/Startup.cs | 47 ++ dsa/DSACore/Token | 1 + dsa/DSACore/appsettings.Development.json | 9 + dsa/DSACore/appsettings.json | 10 + dsa/DSALib/Auxiliary/Calculator/Argument.cs | 35 ++ dsa/DSALib/Auxiliary/Calculator/ISolvable.cs | 10 + dsa/DSALib/Auxiliary/Calculator/Operator.cs | 51 +++ dsa/DSALib/Auxiliary/Calculator/Ops.cs | 13 + dsa/DSALib/Auxiliary/Calculator/StringSolver.cs | 183 ++++++++ dsa/DSALib/Auxiliary/CommandInfo.cs | 28 ++ dsa/DSALib/Auxiliary/Dice.cs | 45 ++ dsa/DSALib/Auxiliary/Extensions.cs | 25 ++ .../Auxiliary/IDataObjectEnumerableExtension.cs | 25 ++ dsa/DSALib/Auxiliary/RandomMisc.cs | 52 +++ dsa/DSALib/Auxiliary/SpellCorrect.cs | 61 +++ dsa/DSALib/Auxiliary/TalentEnumerableExtension.cs | 74 ++++ dsa/DSALib/Auxiliary/WeaponImporter.cs | 175 ++++++++ dsa/DSALib/Characters/Being.cs | 17 + dsa/DSALib/Characters/Critter.cs | 88 ++++ dsa/DSALib/Characters/Entity.cs | 12 + dsa/DSALib/Characters/ICharacter.cs | 15 + dsa/DSALib/Characters/ICombatant.cs | 20 + dsa/DSALib/Commands/CommandHandler.cs | 135 ++++++ dsa/DSALib/Commands/CommandTypes.cs | 13 + dsa/DSALib/Commands/FileHandler.cs | 32 ++ dsa/DSALib/Commands/Gm.cs | 176 ++++++++ dsa/DSALib/Commands/HeldList.cs | 174 ++++++++ dsa/DSALib/Commands/Help.cs | 54 +++ dsa/DSALib/Commands/LebenUndAstral.cs | 172 ++++++++ dsa/DSALib/Commands/List.cs | 39 ++ dsa/DSALib/Commands/MiscCommands.cs | 219 ++++++++++ dsa/DSALib/Commands/NpcCommands.cs | 35 ++ dsa/DSALib/Commands/ProbenTest.cs | 85 ++++ dsa/DSALib/DSALib.csproj | 11 + dsa/DSALib/DSA_Game/Characters/Character.cs | 269 ++++++++++++ dsa/DSALib/DSA_Game/Characters/NPC.cs | 83 ++++ dsa/DSALib/DSA_Game/Characters/SaveChar.cs | 38 ++ dsa/DSALib/DSA_Game/Dsa.cs | 95 ++++ dsa/DSALib/DSA_Game/Save/Properties.cs | 74 ++++ dsa/DSALib/DSA_Game/Save/SaveCommand.cs | 66 +++ dsa/DSALib/DSA_Game/Save/Session.cs | 51 +++ dsa/DSALib/FireBase/Database.cs | 270 ++++++++++++ dsa/DSALib/Models/Database/DataObject.cs | 13 + dsa/DSALib/Models/Database/Dsa/Advantage.cs | 16 + dsa/DSALib/Models/Database/Dsa/CharSpell.cs | 16 + dsa/DSALib/Models/Database/Dsa/DatabaseChar.cs | 63 +++ dsa/DSALib/Models/Database/Dsa/Field.cs | 16 + dsa/DSALib/Models/Database/Dsa/GeneralSpell.cs | 20 + dsa/DSALib/Models/Database/Dsa/GroupChar.cs | 13 + dsa/DSALib/Models/Database/Dsa/Inventory.cs | 12 + dsa/DSALib/Models/Database/Dsa/Talent.cs | 24 ++ dsa/DSALib/Models/Database/Dsa/Weapon.cs | 52 +++ dsa/DSALib/Models/Database/Dsa/WeaponTalent.cs | 18 + dsa/DSALib/Models/Database/Groups/DSAGroup.cs | 10 + dsa/DSALib/Models/Database/Groups/Group.cs | 9 + dsa/DSALib/Models/Database/IDataObject.cs | 7 + dsa/DSALib/Models/Dsa/CritterAttack.cs | 19 + dsa/DSALib/Models/Dsa/KampfTalent.cs | 16 + dsa/DSALib/Models/Dsa/Talent.cs | 43 ++ dsa/DSALib/Models/Dsa/Vorteil.cs | 16 + dsa/DSALib/Models/Dsa/Zauber.cs | 16 + dsa/DSALib/Models/Network/Command.cs | 18 + dsa/DSALib/Models/Network/CommandResponse.cs | 28 ++ .../Properties-DSACore-Auxiliary-CommandInfo.json | 101 +++++ ...ties-DSACore-DSA_Game-Characters-Character.json | 290 +++++++++++++ .../PropertiesNewtonsoft-Json-Linq-JProperty.json | 30 ++ dsa/DiscoBot/App.config | 42 ++ dsa/DiscoBot/Auxiliary/CommandExtension.cs | 98 +++++ dsa/DiscoBot/Auxiliary/Dice.cs | 31 ++ dsa/DiscoBot/Auxiliary/Permissions.cs | 32 ++ dsa/DiscoBot/Auxiliary/RandomMisc.cs | 36 ++ dsa/DiscoBot/Auxiliary/SpellCorrect.cs | 105 +++++ dsa/DiscoBot/Commands/CommandExtension.cs | 119 +++++ dsa/DiscoBot/Commands/FileHandler.cs | 25 ++ dsa/DiscoBot/Commands/MiscCommands.cs | 189 ++++++++ dsa/DiscoBot/DiscoBot.csproj | 149 +++++++ dsa/DiscoBot/Help.json | 120 ++++++ dsa/DiscoBot/Program.cs | 113 +++++ dsa/DiscoBot/Properties.json | 129 ++++++ dsa/DiscoBot/Properties/AssemblyInfo.cs | 35 ++ dsa/DiscoBot/Properties/DiscoBot-Audio-Sound.json | 7 + .../Properties/DiscoBot-Auxiliary-CommandInfo.json | 101 +++++ .../DiscoBot-DSA_Game-Characters-Character.json | 290 +++++++++++++ dsa/DiscoBot/Properties/Settings.Designer.cs | 38 ++ dsa/DiscoBot/Properties/Settings.settings | 9 + dsa/DiscoBot/Rework/Permissions.cs | 43 ++ dsa/DiscoBot/Token | 1 + dsa/DiscoBot/packages.config | 63 +++ dsa/DiscoBot/session.json | 6 + dsa/DiscoBot/sessions/TheCrew/TheCrew-0.json | 83 ++++ dsa/DiscoBot/sessions/copy/copy-0.json | 79 ++++ dsa/DiscoBot/sessions/test/test-0.json | 79 ++++ dsa/DiscoBot/sessions/test/test-1.json | 79 ++++ dsa/DiscoBot/sessions/test/test-2.json | 81 ++++ dsa/DiscoBot/sessions/test/test-3.json | 81 ++++ dsa/DiscoBot/sessions/test/test-4.json | 81 ++++ dsa/FireBase/ExceptionEventArgs.cs | 28 ++ dsa/FireBase/Extensions/ObservableExtensions.cs | 41 ++ dsa/FireBase/Extensions/TaskExtensions.cs | 23 + dsa/FireBase/FireBase.csproj | 13 + dsa/FireBase/FirebaseClient.cs | 49 +++ dsa/FireBase/FirebaseException.cs | 53 +++ dsa/FireBase/FirebaseKeyGenerator.cs | 79 ++++ dsa/FireBase/FirebaseObject.cs | 27 ++ dsa/FireBase/FirebaseOptions.cs | 52 +++ dsa/FireBase/Http/HttpClientExtensions.cs | 123 ++++++ dsa/FireBase/Http/PostResult.cs | 13 + dsa/FireBase/ObservableExtensions.cs | 40 ++ dsa/FireBase/Offline/ConcurrentOfflineDatabase.cs | 233 ++++++++++ dsa/FireBase/Offline/DatabaseExtensions.cs | 257 +++++++++++ dsa/FireBase/Offline/ISetHandler.cs | 10 + dsa/FireBase/Offline/InitialPullStrategy.cs | 23 + .../Offline/Internals/MemberAccessVisitor.cs | 46 ++ dsa/FireBase/Offline/OfflineCacheAdapter.cs | 152 +++++++ dsa/FireBase/Offline/OfflineDatabase.cs | 228 ++++++++++ dsa/FireBase/Offline/OfflineEntry.cs | 99 +++++ dsa/FireBase/Offline/RealtimeDatabase.cs | 479 +++++++++++++++++++++ dsa/FireBase/Offline/SetHandler.cs | 19 + dsa/FireBase/Offline/StreamingOptions.cs | 23 + dsa/FireBase/Offline/SyncOptions.cs | 28 ++ dsa/FireBase/Query/AuthQuery.cs | 34 ++ dsa/FireBase/Query/ChildQuery.cs | 50 +++ dsa/FireBase/Query/FilterQuery.cs | 77 ++++ dsa/FireBase/Query/FirebaseQuery.cs | 314 ++++++++++++++ dsa/FireBase/Query/IFirebaseQuery.cs | 40 ++ dsa/FireBase/Query/OrderQuery.cs | 34 ++ dsa/FireBase/Query/ParameterQuery.cs | 43 ++ dsa/FireBase/Query/QueryExtensions.cs | 210 +++++++++ dsa/FireBase/Query/QueryFactoryExtensions.cs | 187 ++++++++ dsa/FireBase/Query/SilentQuery.cs | 18 + dsa/FireBase/Settings.StyleCop | 77 ++++ dsa/FireBase/Streaming/FirebaseCache.cs | 181 ++++++++ dsa/FireBase/Streaming/FirebaseEvent.cs | 37 ++ dsa/FireBase/Streaming/FirebaseEventSource.cs | 38 ++ dsa/FireBase/Streaming/FirebaseEventType.cs | 18 + dsa/FireBase/Streaming/FirebaseServerEventType.cs | 15 + dsa/FireBase/Streaming/FirebaseSubscription.cs | 217 ++++++++++ dsa/FireBase/Streaming/NonBlockingStreamReader.cs | 63 +++ .../Auxiliary/Calculator/ArgumentTests.cs | 59 +++ .../Auxiliary/Calculator/StringSolverTests.cs | 105 +++++ dsa/NUnitTestProject1/Auxiliary/DiceTests.cs | 71 +++ dsa/NUnitTestProject1/NUnitTest.csproj | 20 + 317 files changed, 11723 insertions(+), 11316 deletions(-) delete mode 100644 DSACore/Controllers/CommandsController.cs delete mode 100644 DSACore/Controllers/LobbyController.cs delete mode 100644 DSACore/Controllers/TokensController.cs delete mode 100644 DSACore/Controllers/ValuesController.cs delete mode 100644 DSACore/DSACore.csproj delete mode 100644 DSACore/Hubs/Login.cs delete mode 100644 DSACore/Models/Network/Group.cs delete mode 100644 DSACore/Models/Network/Token.cs delete mode 100644 DSACore/Models/Network/User.cs delete mode 100644 DSACore/Program.cs delete mode 100644 DSACore/Properties/DSALib-Auxiliary-CommandInfo.json delete mode 100644 DSACore/Properties/DSALib-DSA_Game-Characters-Character.json delete mode 100644 DSACore/Properties/PublishProfiles/FolderProfile.pubxml delete mode 100644 DSACore/Properties/PublishProfiles/FolderProfile1.pubxml delete mode 100644 DSACore/Properties/launchSettings.json delete mode 100644 DSACore/Startup.cs delete mode 100644 DSACore/appsettings.Development.json delete mode 100644 DSACore/appsettings.json delete mode 100644 DSALib/Auxiliary/Calculator/Argument.cs delete mode 100644 DSALib/Auxiliary/Calculator/ISolvable.cs delete mode 100644 DSALib/Auxiliary/Calculator/Operator.cs delete mode 100644 DSALib/Auxiliary/Calculator/Ops.cs delete mode 100644 DSALib/Auxiliary/Calculator/StringSolver.cs delete mode 100644 DSALib/Auxiliary/CommandInfo.cs delete mode 100644 DSALib/Auxiliary/Dice.cs delete mode 100644 DSALib/Auxiliary/Extensions.cs delete mode 100644 DSALib/Auxiliary/IDataObjectEnumerableExtension.cs delete mode 100644 DSALib/Auxiliary/RandomMisc.cs delete mode 100644 DSALib/Auxiliary/SpellCorrect.cs delete mode 100644 DSALib/Auxiliary/TalentEnumerableExtension.cs delete mode 100644 DSALib/Auxiliary/WeaponImporter.cs delete mode 100644 DSALib/Characters/Being.cs delete mode 100644 DSALib/Characters/Critter.cs delete mode 100644 DSALib/Characters/Entity.cs delete mode 100644 DSALib/Characters/ICharacter.cs delete mode 100644 DSALib/Characters/ICombatant.cs delete mode 100644 DSALib/Commands/CommandHandler.cs delete mode 100644 DSALib/Commands/CommandTypes.cs delete mode 100644 DSALib/Commands/FileHandler.cs delete mode 100644 DSALib/Commands/Gm.cs delete mode 100644 DSALib/Commands/HeldList.cs delete mode 100644 DSALib/Commands/Help.cs delete mode 100644 DSALib/Commands/LebenUndAstral.cs delete mode 100644 DSALib/Commands/List.cs delete mode 100644 DSALib/Commands/MiscCommands.cs delete mode 100644 DSALib/Commands/NpcCommands.cs delete mode 100644 DSALib/Commands/ProbenTest.cs delete mode 100644 DSALib/DSALib.csproj delete mode 100644 DSALib/DSA_Game/Characters/Character.cs delete mode 100644 DSALib/DSA_Game/Characters/NPC.cs delete mode 100644 DSALib/DSA_Game/Characters/SaveChar.cs delete mode 100644 DSALib/DSA_Game/Dsa.cs delete mode 100644 DSALib/DSA_Game/Save/Properties.cs delete mode 100644 DSALib/DSA_Game/Save/SaveCommand.cs delete mode 100644 DSALib/DSA_Game/Save/Session.cs delete mode 100644 DSALib/FireBase/Database.cs delete mode 100644 DSALib/Models/Database/DSA/Advantage.cs delete mode 100644 DSALib/Models/Database/DSA/CharSpell.cs delete mode 100644 DSALib/Models/Database/DSA/DatabaseChar.cs delete mode 100644 DSALib/Models/Database/DSA/Field.cs delete mode 100644 DSALib/Models/Database/DSA/GeneralSpell.cs delete mode 100644 DSALib/Models/Database/DSA/GroupChar.cs delete mode 100644 DSALib/Models/Database/DSA/Inventory.cs delete mode 100644 DSALib/Models/Database/DSA/Talent.cs delete mode 100644 DSALib/Models/Database/DSA/Weapon.cs delete mode 100644 DSALib/Models/Database/DSA/WeaponTalent.cs delete mode 100644 DSALib/Models/Database/DataObject.cs delete mode 100644 DSALib/Models/Database/Groups/DSAGroup.cs delete mode 100644 DSALib/Models/Database/Groups/Group.cs delete mode 100644 DSALib/Models/Database/IDataObject.cs delete mode 100644 DSALib/Models/Dsa/CritterAttack.cs delete mode 100644 DSALib/Models/Dsa/KampfTalent.cs delete mode 100644 DSALib/Models/Dsa/Talent.cs delete mode 100644 DSALib/Models/Dsa/Vorteil.cs delete mode 100644 DSALib/Models/Dsa/Zauber.cs delete mode 100644 DSALib/Models/Network/Command.cs delete mode 100644 DSALib/Models/Network/CommandResponse.cs delete mode 100644 DSALib/Properties-DSACore-Auxiliary-CommandInfo.json delete mode 100644 DSALib/Properties-DSACore-DSA_Game-Characters-Character.json delete mode 100644 DSALib/PropertiesNewtonsoft-Json-Linq-JProperty.json delete mode 100644 DiscoBot/App.config delete mode 100644 DiscoBot/Auxiliary/CommandExtension.cs delete mode 100644 DiscoBot/Auxiliary/Dice.cs delete mode 100644 DiscoBot/Auxiliary/Permissions.cs delete mode 100644 DiscoBot/Auxiliary/RandomMisc.cs delete mode 100644 DiscoBot/Auxiliary/SpellCorrect.cs delete mode 100644 DiscoBot/Commands/CommandExtension.cs delete mode 100644 DiscoBot/Commands/FileHandler.cs delete mode 100644 DiscoBot/Commands/MiscCommands.cs delete mode 100644 DiscoBot/DiscoBot.csproj delete mode 100644 DiscoBot/Help.json delete mode 100644 DiscoBot/Program.cs delete mode 100644 DiscoBot/Properties.json delete mode 100644 DiscoBot/Properties/AssemblyInfo.cs delete mode 100644 DiscoBot/Properties/DiscoBot-Audio-Sound.json delete mode 100644 DiscoBot/Properties/DiscoBot-Auxiliary-CommandInfo.json delete mode 100644 DiscoBot/Properties/DiscoBot-DSA_Game-Characters-Character.json delete mode 100644 DiscoBot/Properties/Settings.Designer.cs delete mode 100644 DiscoBot/Properties/Settings.settings delete mode 100644 DiscoBot/Rework/Permissions.cs delete mode 100644 DiscoBot/Token delete mode 100644 DiscoBot/packages.config delete mode 100644 DiscoBot/session.json delete mode 100644 DiscoBot/sessions/TheCrew/TheCrew-0.json delete mode 100644 DiscoBot/sessions/copy/copy-0.json delete mode 100644 DiscoBot/sessions/test/test-0.json delete mode 100644 DiscoBot/sessions/test/test-1.json delete mode 100644 DiscoBot/sessions/test/test-2.json delete mode 100644 DiscoBot/sessions/test/test-3.json delete mode 100644 DiscoBot/sessions/test/test-4.json delete mode 100644 FireBase/ExceptionEventArgs.cs delete mode 100644 FireBase/Extensions/ObservableExtensions.cs delete mode 100644 FireBase/Extensions/TaskExtensions.cs delete mode 100644 FireBase/FireBase.csproj delete mode 100644 FireBase/FirebaseClient.cs delete mode 100644 FireBase/FirebaseException.cs delete mode 100644 FireBase/FirebaseKeyGenerator.cs delete mode 100644 FireBase/FirebaseObject.cs delete mode 100644 FireBase/FirebaseOptions.cs delete mode 100644 FireBase/Http/HttpClientExtensions.cs delete mode 100644 FireBase/Http/PostResult.cs delete mode 100644 FireBase/ObservableExtensions.cs delete mode 100644 FireBase/Offline/ConcurrentOfflineDatabase.cs delete mode 100644 FireBase/Offline/DatabaseExtensions.cs delete mode 100644 FireBase/Offline/ISetHandler.cs delete mode 100644 FireBase/Offline/InitialPullStrategy.cs delete mode 100644 FireBase/Offline/Internals/MemberAccessVisitor.cs delete mode 100644 FireBase/Offline/OfflineCacheAdapter.cs delete mode 100644 FireBase/Offline/OfflineDatabase.cs delete mode 100644 FireBase/Offline/OfflineEntry.cs delete mode 100644 FireBase/Offline/RealtimeDatabase.cs delete mode 100644 FireBase/Offline/SetHandler.cs delete mode 100644 FireBase/Offline/StreamingOptions.cs delete mode 100644 FireBase/Offline/SyncOptions.cs delete mode 100644 FireBase/Query/AuthQuery.cs delete mode 100644 FireBase/Query/ChildQuery.cs delete mode 100644 FireBase/Query/FilterQuery.cs delete mode 100644 FireBase/Query/FirebaseQuery.cs delete mode 100644 FireBase/Query/IFirebaseQuery.cs delete mode 100644 FireBase/Query/OrderQuery.cs delete mode 100644 FireBase/Query/ParameterQuery.cs delete mode 100644 FireBase/Query/QueryExtensions.cs delete mode 100644 FireBase/Query/QueryFactoryExtensions.cs delete mode 100644 FireBase/Query/SilentQuery.cs delete mode 100644 FireBase/Settings.StyleCop delete mode 100644 FireBase/Streaming/FirebaseCache.cs delete mode 100644 FireBase/Streaming/FirebaseEvent.cs delete mode 100644 FireBase/Streaming/FirebaseEventSource.cs delete mode 100644 FireBase/Streaming/FirebaseEventType.cs delete mode 100644 FireBase/Streaming/FirebaseServerEventType.cs delete mode 100644 FireBase/Streaming/FirebaseSubscription.cs delete mode 100644 FireBase/Streaming/NonBlockingStreamReader.cs delete mode 100644 NUnitTestProject1/Auxiliary/Calculator/ArgumentTests.cs delete mode 100644 NUnitTestProject1/Auxiliary/Calculator/StringSolverTests.cs delete mode 100644 NUnitTestProject1/Auxiliary/DiceTests.cs delete mode 100644 NUnitTestProject1/NUnitTest.csproj create mode 100644 dsa/DSACore/Controllers/CommandsController.cs create mode 100644 dsa/DSACore/Controllers/LobbyController.cs create mode 100644 dsa/DSACore/Controllers/TokensController.cs create mode 100644 dsa/DSACore/Controllers/ValuesController.cs create mode 100644 dsa/DSACore/DSACore.csproj create mode 100644 dsa/DSACore/Hubs/Login.cs create mode 100644 dsa/DSACore/Models/Network/Group.cs create mode 100644 dsa/DSACore/Models/Network/Token.cs create mode 100644 dsa/DSACore/Models/Network/User.cs create mode 100644 dsa/DSACore/Program.cs create mode 100644 dsa/DSACore/Properties/DSALib-Auxiliary-CommandInfo.json create mode 100644 dsa/DSACore/Properties/DSALib-DSA_Game-Characters-Character.json create mode 100644 dsa/DSACore/Properties/PublishProfiles/FolderProfile.pubxml create mode 100644 dsa/DSACore/Properties/PublishProfiles/FolderProfile1.pubxml create mode 100644 dsa/DSACore/Properties/launchSettings.json create mode 100644 dsa/DSACore/PropertiesDSALib-Auxiliary-CommandInfo.json create mode 100644 dsa/DSACore/PropertiesDSALib-DSA_Game-Characters-Character.json create mode 100644 dsa/DSACore/PropertiesNewtonsoft-Json-Linq-JProperty.json create mode 100644 dsa/DSACore/Startup.cs create mode 100644 dsa/DSACore/Token create mode 100644 dsa/DSACore/appsettings.Development.json create mode 100644 dsa/DSACore/appsettings.json create mode 100644 dsa/DSALib/Auxiliary/Calculator/Argument.cs create mode 100644 dsa/DSALib/Auxiliary/Calculator/ISolvable.cs create mode 100644 dsa/DSALib/Auxiliary/Calculator/Operator.cs create mode 100644 dsa/DSALib/Auxiliary/Calculator/Ops.cs create mode 100644 dsa/DSALib/Auxiliary/Calculator/StringSolver.cs create mode 100644 dsa/DSALib/Auxiliary/CommandInfo.cs create mode 100644 dsa/DSALib/Auxiliary/Dice.cs create mode 100644 dsa/DSALib/Auxiliary/Extensions.cs create mode 100644 dsa/DSALib/Auxiliary/IDataObjectEnumerableExtension.cs create mode 100644 dsa/DSALib/Auxiliary/RandomMisc.cs create mode 100644 dsa/DSALib/Auxiliary/SpellCorrect.cs create mode 100644 dsa/DSALib/Auxiliary/TalentEnumerableExtension.cs create mode 100644 dsa/DSALib/Auxiliary/WeaponImporter.cs create mode 100644 dsa/DSALib/Characters/Being.cs create mode 100644 dsa/DSALib/Characters/Critter.cs create mode 100644 dsa/DSALib/Characters/Entity.cs create mode 100644 dsa/DSALib/Characters/ICharacter.cs create mode 100644 dsa/DSALib/Characters/ICombatant.cs create mode 100644 dsa/DSALib/Commands/CommandHandler.cs create mode 100644 dsa/DSALib/Commands/CommandTypes.cs create mode 100644 dsa/DSALib/Commands/FileHandler.cs create mode 100644 dsa/DSALib/Commands/Gm.cs create mode 100644 dsa/DSALib/Commands/HeldList.cs create mode 100644 dsa/DSALib/Commands/Help.cs create mode 100644 dsa/DSALib/Commands/LebenUndAstral.cs create mode 100644 dsa/DSALib/Commands/List.cs create mode 100644 dsa/DSALib/Commands/MiscCommands.cs create mode 100644 dsa/DSALib/Commands/NpcCommands.cs create mode 100644 dsa/DSALib/Commands/ProbenTest.cs create mode 100644 dsa/DSALib/DSALib.csproj create mode 100644 dsa/DSALib/DSA_Game/Characters/Character.cs create mode 100644 dsa/DSALib/DSA_Game/Characters/NPC.cs create mode 100644 dsa/DSALib/DSA_Game/Characters/SaveChar.cs create mode 100644 dsa/DSALib/DSA_Game/Dsa.cs create mode 100644 dsa/DSALib/DSA_Game/Save/Properties.cs create mode 100644 dsa/DSALib/DSA_Game/Save/SaveCommand.cs create mode 100644 dsa/DSALib/DSA_Game/Save/Session.cs create mode 100644 dsa/DSALib/FireBase/Database.cs create mode 100644 dsa/DSALib/Models/Database/DataObject.cs create mode 100644 dsa/DSALib/Models/Database/Dsa/Advantage.cs create mode 100644 dsa/DSALib/Models/Database/Dsa/CharSpell.cs create mode 100644 dsa/DSALib/Models/Database/Dsa/DatabaseChar.cs create mode 100644 dsa/DSALib/Models/Database/Dsa/Field.cs create mode 100644 dsa/DSALib/Models/Database/Dsa/GeneralSpell.cs create mode 100644 dsa/DSALib/Models/Database/Dsa/GroupChar.cs create mode 100644 dsa/DSALib/Models/Database/Dsa/Inventory.cs create mode 100644 dsa/DSALib/Models/Database/Dsa/Talent.cs create mode 100644 dsa/DSALib/Models/Database/Dsa/Weapon.cs create mode 100644 dsa/DSALib/Models/Database/Dsa/WeaponTalent.cs create mode 100644 dsa/DSALib/Models/Database/Groups/DSAGroup.cs create mode 100644 dsa/DSALib/Models/Database/Groups/Group.cs create mode 100644 dsa/DSALib/Models/Database/IDataObject.cs create mode 100644 dsa/DSALib/Models/Dsa/CritterAttack.cs create mode 100644 dsa/DSALib/Models/Dsa/KampfTalent.cs create mode 100644 dsa/DSALib/Models/Dsa/Talent.cs create mode 100644 dsa/DSALib/Models/Dsa/Vorteil.cs create mode 100644 dsa/DSALib/Models/Dsa/Zauber.cs create mode 100644 dsa/DSALib/Models/Network/Command.cs create mode 100644 dsa/DSALib/Models/Network/CommandResponse.cs create mode 100644 dsa/DSALib/Properties-DSACore-Auxiliary-CommandInfo.json create mode 100644 dsa/DSALib/Properties-DSACore-DSA_Game-Characters-Character.json create mode 100644 dsa/DSALib/PropertiesNewtonsoft-Json-Linq-JProperty.json create mode 100644 dsa/DiscoBot/App.config create mode 100644 dsa/DiscoBot/Auxiliary/CommandExtension.cs create mode 100644 dsa/DiscoBot/Auxiliary/Dice.cs create mode 100644 dsa/DiscoBot/Auxiliary/Permissions.cs create mode 100644 dsa/DiscoBot/Auxiliary/RandomMisc.cs create mode 100644 dsa/DiscoBot/Auxiliary/SpellCorrect.cs create mode 100644 dsa/DiscoBot/Commands/CommandExtension.cs create mode 100644 dsa/DiscoBot/Commands/FileHandler.cs create mode 100644 dsa/DiscoBot/Commands/MiscCommands.cs create mode 100644 dsa/DiscoBot/DiscoBot.csproj create mode 100644 dsa/DiscoBot/Help.json create mode 100644 dsa/DiscoBot/Program.cs create mode 100644 dsa/DiscoBot/Properties.json create mode 100644 dsa/DiscoBot/Properties/AssemblyInfo.cs create mode 100644 dsa/DiscoBot/Properties/DiscoBot-Audio-Sound.json create mode 100644 dsa/DiscoBot/Properties/DiscoBot-Auxiliary-CommandInfo.json create mode 100644 dsa/DiscoBot/Properties/DiscoBot-DSA_Game-Characters-Character.json create mode 100644 dsa/DiscoBot/Properties/Settings.Designer.cs create mode 100644 dsa/DiscoBot/Properties/Settings.settings create mode 100644 dsa/DiscoBot/Rework/Permissions.cs create mode 100644 dsa/DiscoBot/Token create mode 100644 dsa/DiscoBot/packages.config create mode 100644 dsa/DiscoBot/session.json create mode 100644 dsa/DiscoBot/sessions/TheCrew/TheCrew-0.json create mode 100644 dsa/DiscoBot/sessions/copy/copy-0.json create mode 100644 dsa/DiscoBot/sessions/test/test-0.json create mode 100644 dsa/DiscoBot/sessions/test/test-1.json create mode 100644 dsa/DiscoBot/sessions/test/test-2.json create mode 100644 dsa/DiscoBot/sessions/test/test-3.json create mode 100644 dsa/DiscoBot/sessions/test/test-4.json create mode 100644 dsa/FireBase/ExceptionEventArgs.cs create mode 100644 dsa/FireBase/Extensions/ObservableExtensions.cs create mode 100644 dsa/FireBase/Extensions/TaskExtensions.cs create mode 100644 dsa/FireBase/FireBase.csproj create mode 100644 dsa/FireBase/FirebaseClient.cs create mode 100644 dsa/FireBase/FirebaseException.cs create mode 100644 dsa/FireBase/FirebaseKeyGenerator.cs create mode 100644 dsa/FireBase/FirebaseObject.cs create mode 100644 dsa/FireBase/FirebaseOptions.cs create mode 100644 dsa/FireBase/Http/HttpClientExtensions.cs create mode 100644 dsa/FireBase/Http/PostResult.cs create mode 100644 dsa/FireBase/ObservableExtensions.cs create mode 100644 dsa/FireBase/Offline/ConcurrentOfflineDatabase.cs create mode 100644 dsa/FireBase/Offline/DatabaseExtensions.cs create mode 100644 dsa/FireBase/Offline/ISetHandler.cs create mode 100644 dsa/FireBase/Offline/InitialPullStrategy.cs create mode 100644 dsa/FireBase/Offline/Internals/MemberAccessVisitor.cs create mode 100644 dsa/FireBase/Offline/OfflineCacheAdapter.cs create mode 100644 dsa/FireBase/Offline/OfflineDatabase.cs create mode 100644 dsa/FireBase/Offline/OfflineEntry.cs create mode 100644 dsa/FireBase/Offline/RealtimeDatabase.cs create mode 100644 dsa/FireBase/Offline/SetHandler.cs create mode 100644 dsa/FireBase/Offline/StreamingOptions.cs create mode 100644 dsa/FireBase/Offline/SyncOptions.cs create mode 100644 dsa/FireBase/Query/AuthQuery.cs create mode 100644 dsa/FireBase/Query/ChildQuery.cs create mode 100644 dsa/FireBase/Query/FilterQuery.cs create mode 100644 dsa/FireBase/Query/FirebaseQuery.cs create mode 100644 dsa/FireBase/Query/IFirebaseQuery.cs create mode 100644 dsa/FireBase/Query/OrderQuery.cs create mode 100644 dsa/FireBase/Query/ParameterQuery.cs create mode 100644 dsa/FireBase/Query/QueryExtensions.cs create mode 100644 dsa/FireBase/Query/QueryFactoryExtensions.cs create mode 100644 dsa/FireBase/Query/SilentQuery.cs create mode 100644 dsa/FireBase/Settings.StyleCop create mode 100644 dsa/FireBase/Streaming/FirebaseCache.cs create mode 100644 dsa/FireBase/Streaming/FirebaseEvent.cs create mode 100644 dsa/FireBase/Streaming/FirebaseEventSource.cs create mode 100644 dsa/FireBase/Streaming/FirebaseEventType.cs create mode 100644 dsa/FireBase/Streaming/FirebaseServerEventType.cs create mode 100644 dsa/FireBase/Streaming/FirebaseSubscription.cs create mode 100644 dsa/FireBase/Streaming/NonBlockingStreamReader.cs create mode 100644 dsa/NUnitTestProject1/Auxiliary/Calculator/ArgumentTests.cs create mode 100644 dsa/NUnitTestProject1/Auxiliary/Calculator/StringSolverTests.cs create mode 100644 dsa/NUnitTestProject1/Auxiliary/DiceTests.cs create mode 100644 dsa/NUnitTestProject1/NUnitTest.csproj (limited to 'FireBase/Offline/OfflineDatabase.cs') diff --git a/DSACore/Controllers/CommandsController.cs b/DSACore/Controllers/CommandsController.cs deleted file mode 100644 index b6e0be2..0000000 --- a/DSACore/Controllers/CommandsController.cs +++ /dev/null @@ -1,56 +0,0 @@ -using System; -using DSACore.Models.Network; -using DSALib.Commands; -using DSALib.Models.Network; -using Microsoft.AspNetCore.Mvc; - -// For more information on enabling Web API for empty projects, visit https://go.microsoft.com/fwlink/?LinkID=397860 - -namespace DSACore.Controllers -{ - [Route("dsa/[controller]")] - public class CommandsController : Controller - { - // GET: api/ - [HttpGet] - public string Get() - { - return "Usage: post the command to execute"; - } - - // GET api//5 - /*[HttpGet("{id}")] - public string Get(int id) - { - return "value"; - }*/ - - // POST api//Felis - [HttpPost] - public string Post([FromBody] Command cmd) - { - try - { - return CommandHandler.ExecuteCommand(cmd).message; - } - catch (Exception e) - { - return $"Ein Fehler ist aufgetreten: \n {e.Message}"; - } - } - -/* - - // PUT api//5 - [HttpPut("{id}")] - public void Put(int id, [FromBody]string value) - { - } - - // DELETE api//5 - [HttpDelete("{id}")] - public void Delete(int id) - { - }*/ - } -} \ No newline at end of file diff --git a/DSACore/Controllers/LobbyController.cs b/DSACore/Controllers/LobbyController.cs deleted file mode 100644 index 7890b4f..0000000 --- a/DSACore/Controllers/LobbyController.cs +++ /dev/null @@ -1,32 +0,0 @@ -using System; -using DSACore.Models.Network; -using DSALib.Commands; -using DSALib.Models.Network; -using Microsoft.AspNetCore.Mvc; - -namespace DSACore.Controllers -{ - public class ScribbleController : Controller - { - [Route("[controller]")] - // GET: api/ - [HttpGet] - public string Get() - { - return "Usage: get /tokens/{Token}"; - } - - [HttpPost] - public string Post([FromBody] Command cmd) - { - try - { - return CommandHandler.ExecuteCommand(cmd).message; - } - catch (Exception e) - { - return $"Ein Fehler ist aufgetreten: \n {e.Message}"; - } - } - } -} \ No newline at end of file diff --git a/DSACore/Controllers/TokensController.cs b/DSACore/Controllers/TokensController.cs deleted file mode 100644 index a85cabe..0000000 --- a/DSACore/Controllers/TokensController.cs +++ /dev/null @@ -1,25 +0,0 @@ -using DSACore.Hubs; -using Microsoft.AspNetCore.Mvc; - -namespace DSACore.Controllers -{ - [Route("lobby/[controller]")] - [ApiController] - public class TokensController : Controller - { - // GET - [HttpGet("{token}")] - public ActionResult Get(string token) - { - if (!int.TryParse(token, out var intToken)) - return BadRequest("The token has to be a 32 bit unsigned integer"); - - if (intToken == 42) return Ok("Scribble"); - - if (!Users.Tokens.Exists(x => x.GetHashCode() == intToken)) return NotFound(); - - var group = Users.Tokens.Find(x => x.GetHashCode() == intToken); - return Ok(group.Group); - } - } -} \ No newline at end of file diff --git a/DSACore/Controllers/ValuesController.cs b/DSACore/Controllers/ValuesController.cs deleted file mode 100644 index eb08898..0000000 --- a/DSACore/Controllers/ValuesController.cs +++ /dev/null @@ -1,45 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Threading.Tasks; -using Microsoft.AspNetCore.Mvc; - -namespace DSACore.Controllers -{ - [Route("api/[controller]")] - [ApiController] - public class ValuesController : ControllerBase - { - // GET api/values - [HttpGet] - public ActionResult> Get() - { - return new string[] { "value1", "value2" }; - } - - // GET api/values/5 - [HttpGet("{id}")] - public ActionResult Get(int id) - { - return "value"; - } - - // POST api/values - [HttpPost] - public void Post([FromBody] string value) - { - } - - // PUT api/values/5 - [HttpPut("{id}")] - public void Put(int id, [FromBody] string value) - { - } - - // DELETE api/values/5 - [HttpDelete("{id}")] - public void Delete(int id) - { - } - } -} diff --git a/DSACore/DSACore.csproj b/DSACore/DSACore.csproj deleted file mode 100644 index f7def31..0000000 --- a/DSACore/DSACore.csproj +++ /dev/null @@ -1,28 +0,0 @@ - - - - netcoreapp2.2 - DSACore.Program - - - - - - - - - - - - - - - - - - - - - - - diff --git a/DSACore/Hubs/Login.cs b/DSACore/Hubs/Login.cs deleted file mode 100644 index f08c24a..0000000 --- a/DSACore/Hubs/Login.cs +++ /dev/null @@ -1,205 +0,0 @@ -using System; -using System.Collections.Generic; -using System.IO; -using System.Linq; -using System.Text; -using System.Threading.Tasks; -using DSACore.Models.Network; -using DSALib.Commands; -using DSALib.DSA_Game.Characters; -using DSALib.FireBase; -using DSALib.Models.Network; -using Microsoft.AspNetCore.SignalR; -using Group = DSACore.Models.Network.Group; - -namespace DSACore.Hubs -{ - public class Users : Hub - { - //private static Dictionary UserGroup = new Dictionary(); - - private const string ReceiveMethod = "ReceiveMessage"; //receiveMethod; - - static Users() { - DsaGroups = Database.GetGroups().Result.Select(x=>new Group(x.Item1, x.Item2)).ToList(); - DsaGroups.Add(new Group("login", "")); - DsaGroups.Add(new Group("online", "")); - //AddGroups(); - } - - private static List DsaGroups { get; } - public static List Tokens { get; } = new List(); - - - public async Task SendMessage(string user, string message) - { - try - { - var group = getGroup(Context.ConnectionId).Name; - } - catch (InvalidOperationException) - { - await Clients.Caller.SendCoreAsync(ReceiveMethod, - new object[] { "Nutzer ist in keiner Gruppe. Erst joinen!" }); - } - - if (message[0] == '/') - { - var args = message.Split(' ', StringSplitOptions.RemoveEmptyEntries).ToList(); - - var Timon = args.Any(x => x == "hallo"); - - var ident = args.First().Replace("/", ""); - if (args.Count > 0) args.RemoveAt(0); - - var ret = CommandHandler.ExecuteCommand(new Command - { - CharId = 0, - CmdIdentifier = ident, - CmdTexts = args, - Name = user - }); - - switch (ret.ResponseType) - { - case ResponseType.Caller: - case ResponseType.Error: - await Clients.Caller.SendAsync(ReceiveMethod, ret.message); - break; - case ResponseType.Broadcast: - await SendToGroup(ret.message); - break; - } - } - else - { - await SendToGroup(message); - } - } - - private Task SendToGroup(string message) - { - try - { - var group = getGroup(Context.ConnectionId).Name; - return Clients.Group(group).SendCoreAsync(ReceiveMethod, - new object[] {getUser(Context.ConnectionId).Name, message}); - } - catch (InvalidOperationException) - { - return Clients.Caller.SendCoreAsync(ReceiveMethod, - new object[] {"Nutzer ist in keiner Gruppe. Erst joinen!"}); - } - } - - private Group getGroup(string id) - { - return DsaGroups.First(x => x.Users.Exists(y => y.ConnectionId.Equals(id))); - } - - private User getUser(string id) - { - return DsaGroups.First(x => x.Users.Exists(y => y.ConnectionId.Equals(id))).Users - .First(z => z.ConnectionId.Equals(id)); - } - - public async Task GetGroups() { - var test = await Database.GetGroups(); - foreach (var group in test.Select(x => new Group(x.Item1, x.Item2)).ToList()) - if (!DsaGroups.Exists(x => x.Name.Equals(group.Name))) - DsaGroups.Add(group); - - await Clients.Caller.SendCoreAsync("ListGroups", new object[] {DsaGroups.Select(x => x.SendGroup())}); - //throw new NotImplementedException("add database call to get groups"); - } - - public async Task AddGroup(string group, string password) - { - DsaGroups.Add(new Group(group, password)); - var Dgroup = new DSALib.Models.Database.Groups.Group {Name = group, Id = DsaGroups.Count - 1}; - //Database.AddGroup(Dgroup); - await Clients.Caller.SendCoreAsync(ReceiveMethod, new[] {$"group {group} sucessfully added"}); - //throw new NotImplementedException("add database call to add groups"); - } - - public async Task UploadChar(string xml) - { - var group = getGroup(Context.ConnectionId); - - await Database.AddChar(new Character(new MemoryStream(Encoding.UTF8.GetBytes(xml))), group.Name); - //throw new NotImplementedException("add database call to add groups"); - } - - public async Task Login(string group, string user, string hash) - { - //string password = System.Text.Encoding.UTF8.GetString(hash); - if (hash == DsaGroups.First(x => x.Name == group).Password) - { - var gGroup = DsaGroups.First(x => x.Name.Equals(group)); - if (!gGroup.Users.Exists(x => x.Name.Equals(user))) - { - await Groups.RemoveFromGroupAsync(Context.ConnectionId, "login"); - await Groups.AddToGroupAsync(Context.ConnectionId, group); - gGroup.Users.Add(new User {ConnectionId = Context.ConnectionId, Name = user}); - await SendToGroup("Ein neuer Nutzer hat die Gruppe betreten"); - await Clients.Caller.SendAsync("LoginResponse", 0); - await Clients.Caller.SendAsync("PlayerStatusChanged", new[] {user, "online"}); - - Tokens.Add(new Token(group)); - await Clients.Caller.SendAsync("Token", Tokens.Last().GetHashCode()); - purgeTokens(); - } - else - { - await Clients.Caller.SendAsync("LoginResponse", 1); - } - } - else - { - await Clients.Caller.SendAsync("LoginResponse", 2); - //await Clients.Caller.SendAsync(receiveMethod, "Falsches Passwort!"); - } - } - - private void purgeTokens() - { - Tokens.RemoveAll(x => !x.IsValid()); - } - - public override Task OnDisconnectedAsync(Exception exception) - { - Disconnect().Wait(); - return base.OnDisconnectedAsync(exception); - } - - public override Task OnConnectedAsync() - { - Groups.AddToGroupAsync(Context.ConnectionId, "login").Wait(); - Groups.AddToGroupAsync(Context.ConnectionId, "online").Wait(); - return base.OnConnectedAsync(); - } - - public async Task Disconnect() - { - await Groups.RemoveFromGroupAsync(Context.ConnectionId, "online"); - if (DsaGroups.Exists(x => x.Users.Exists(y => y.ConnectionId == Context.ConnectionId))) - try - { - var group = getGroup(Context.ConnectionId); - - - var user = getUser(Context.ConnectionId); - - await Clients.Caller.SendAsync("PlayerStatusChanged", new[] {user.Name, "offline"}); - //await SendToGroup(user.Name + " disconnected from the Server"); - group.Users.Remove(user); - await Groups.RemoveFromGroupAsync(Context.ConnectionId, group.Name); - } - catch (Exception e) - { - Console.WriteLine(e); - //throw; - } - } - } -} \ No newline at end of file diff --git a/DSACore/Models/Network/Group.cs b/DSACore/Models/Network/Group.cs deleted file mode 100644 index efe12ee..0000000 --- a/DSACore/Models/Network/Group.cs +++ /dev/null @@ -1,43 +0,0 @@ -using System; -using System.Collections.Generic; - -namespace DSACore.Models.Network -{ - public class Group - { - public Group(string name, string password) - { - Name = name; - Password = password; - } - - public Group(string name, int userOnline) - { - Name = name ?? throw new ArgumentNullException(nameof(name)); - } - - public string Name { get; set; } - public string Password { get; set; } - public List Users { get; set; } = new List(); - - public int UserCount => Users.Count; - - public SendGroup SendGroup() - { - return new SendGroup(Name, UserCount); - } - } - - public class SendGroup - { - public SendGroup(string name, int userCount) - { - Name = name ?? throw new ArgumentNullException(nameof(name)); - UserCount = userCount; - } - - public string Name { get; set; } - - public int UserCount { get; set; } - } -} \ No newline at end of file diff --git a/DSACore/Models/Network/Token.cs b/DSACore/Models/Network/Token.cs deleted file mode 100644 index 451cafc..0000000 --- a/DSACore/Models/Network/Token.cs +++ /dev/null @@ -1,21 +0,0 @@ -using System; - -namespace DSACore.Models.Network -{ - public class Token - { - private readonly DateTime creation = DateTime.Now; - - public Token(string group) - { - Group = group; - } - - public string Group { get; set; } - - public bool IsValid() - { - return DateTime.Now - creation < TimeSpan.FromMinutes(1); - } - } -} \ No newline at end of file diff --git a/DSACore/Models/Network/User.cs b/DSACore/Models/Network/User.cs deleted file mode 100644 index 8b8008c..0000000 --- a/DSACore/Models/Network/User.cs +++ /dev/null @@ -1,9 +0,0 @@ -namespace DSACore.Models.Network -{ - public class User - { - public string Name { get; set; } - public string ConnectionId { get; set; } - public int Char { get; set; } - } -} \ No newline at end of file diff --git a/DSACore/Program.cs b/DSACore/Program.cs deleted file mode 100644 index 8af0a74..0000000 --- a/DSACore/Program.cs +++ /dev/null @@ -1,24 +0,0 @@ -using DSALib.DSA_Game; -using DSALib.FireBase; -using Microsoft.AspNetCore; -using Microsoft.AspNetCore.Hosting; - -namespace DSACore -{ - public class Program - { - public static void Main(string[] args) - { - Database.GetGroup(0).Wait(); - Dsa.Startup(); - CreateWebHostBuilder(args).Build().Run(); - } - - public static IWebHostBuilder CreateWebHostBuilder(string[] args) - { - return WebHost.CreateDefaultBuilder(args) - .UseStartup() - .UseUrls("http://0.0.0.0:5000"); - } - } -} \ No newline at end of file diff --git a/DSACore/Properties/DSALib-Auxiliary-CommandInfo.json b/DSACore/Properties/DSALib-Auxiliary-CommandInfo.json deleted file mode 100644 index b9941f2..0000000 --- a/DSACore/Properties/DSALib-Auxiliary-CommandInfo.json +++ /dev/null @@ -1,101 +0,0 @@ -[ - { - "Name": "ich bin", - "Scope": "All", - "Brief": "Setzt den gespielten Charakter fest", - "Description": [ - "Mit \"!Ich bin\" kann der gespielte Charakter definiert, bzw. gewechselt werden.\n", - " Die Charaktere müssen als *.xml Dateien hinterlegt sein.\n\n", - " !ich Zeigt an welcher Charakter zur Zeit gespielt wird\n", - " !ich bin Zalibius Wechsel zum Helden Zalibius\n", - " !ich Rhoktar Orkische Variante von !ich bin.\n", - " Wechselt zu Rhoktar.\n\n", - " !list chars Zeigt die Liste verfügbarer Charaktere.\n", - " \n" - ] - }, - { - "Name": "List", - "Scope": "All", - "Brief": "Anzeige vonSpielrelevanten Listen", - "Description": [ - "Mit \"!list\" lassen sich spielrelevante Listen ausgeben. Die Angezeigte Liste wird nach einiger Zeit wieder gelöscht.\n", - "\n", - " !list chars Liste aller verfügbaren Helden (eingelesen per *.xml)\n", - " und NSCs.\n", - " (Mit \"!ich bin\" kann der Held ausgewählt werden.)\n", - " !list commands Liste aller verwendbaren Bot-Kommandos.\n", - " !list sounds Liste der Soundeffekte." - ] - }, - { - "Name": "Held", - "Scope": "All", - "Brief": "Anzeige von Heldenwerten", - "Description": [ - "Mit \"!Held\" lassen sich Heldenwerte ausgeben. Mehrere Werte können gleichzeitig angefordert werde. \"!Held LE Waffen\" liefert so z.B. Informationen zur Lebensenergie und den Kampfwerten.\n Bis auf wenige Ausnahmen wird die Angezeigte Liste nach einiger Zeit wieder gelöscht.\n", - "\n", - " !Held Zeigt den Heldenbrief an.\n", - " (Diese Liste wird nicht automatisch gelöscht)\n", - " !Held Eigenschaften Zeigt die Eigenschaften MU/KL/CH/IN/KK/GE/FF/KO.\n", - " !Held e Kurzform von \"!Held Eigenschaften\".\n", - " !Held LE Zeigt LE an.\n", - " !Held AE Zeigt AE an.\n", - " !Held stats Zeigt Eigenschaften und zusätzlich SO/LE/AE.\n", - " !Held Kampfwerte Zeigt AT/PA für aktivierte Waffentalente.\n", - " !Held Waffe/!list w Kurzformen von \"!Held Kampfwerte\".\n", - " !Held Vorteile Zeigt Vor- und Nachteile an.\n", - " !Held v Kurzform von \"!Held Vorteile\".\n", - " !Held Talente Zeigt die Liste aller aktivierten Talente, deren TaW,\n", - " sowie die Probe.\n", - " !Held t Kurzform von \"!Held Talente\".\n", - " !Held Zauber Zeigt die Liste aller aktivierten Zauber, deren ZaW,\n", - " sowie die Probe.\n", - " !Held z Kurzform von \"!Held Zauber\".\n" - ] - }, - { - "Name": "LE", - "Scope": "All", - "Brief": "Ändert dein Leben - im wahrsten Sinne des Wortes", - "Description": [ - "Mit !LE zeigt man die Lebensenergie an, ändert sie, oder setzt sie auf einen neuen Wert\n\n", - " !LE Zeigt Lebensenergie an\n", - " !LE 30 Setzt LE auf 30\n", - " !LE +5 Erhöht LE um 5 (bis zum Maximum)\n", - " !LE ++5 Erhöht LE um 5 (ignoriert Maximum)\n", - " !LE -5 Verringert LE um 5\n \n" - ] - }, - { - "Name": "AE", - "Scope": "All", - "Brief": "Ändert Astralenergie", - "Description": [ - "Mit !AE (oder !Asp) zeigt man die Astralenergie an, ändert sie, oder setzt sie auf einen neuen Wert\n\n", - " !AE Zeigt Astralenergie an\n", - " !AE 30 Setzt Asp auf 30\n", - " !AE +5 Erhöht Asp um 5 (bis zum Maximum)\n", - " !AE ++5 Erhöht Asp um 5 (ignoriert Maximum)\n", - " !AE -5 Verringert Asp um 5 (Minimum 0)\n" - ] - }, - { - "Name": "Gm", - "Scope": "Meister", - "Brief": "Kontrolliere andere Charaktere", - "Description": [ - "Mit !GM fürhrt man commands als eine andere Person aus.", - " !GM [charaktername] [command] [commandattribut] [mofifier]", - " Unterstützte [commands]'s:", - " !GM [name] LE", - " !GM [name] AE", - " !GM [name] Talent", - " !GM [name] Fernkampf", - " !GM [name] Eigenschaft", - " !GM [name] Zauber", - " !GM [name] Angriff", - " !GM [name] Parade" - ] - } -] \ No newline at end of file diff --git a/DSACore/Properties/DSALib-DSA_Game-Characters-Character.json b/DSACore/Properties/DSALib-DSA_Game-Characters-Character.json deleted file mode 100644 index fd387f5..0000000 --- a/DSACore/Properties/DSALib-DSA_Game-Characters-Character.json +++ /dev/null @@ -1,290 +0,0 @@ -[ - { - "Eigenschaften": {}, - "Talente": [], - "Zauber": [], - "Kampftalente": [], - "Vorteile": [], - "PropTable": { - "MU": "Mut", - "KL": "Klugheit", - "IN": "Intuition", - "CH": "Charisma", - "FF": "Fingerfertigkeit", - "GE": "Gewandtheit", - "KO": "Konstitution", - "KK": "Körperkraft" - }, - "Lebenspunkte_Basis": 30, - "Lebenspunkte_Aktuell": 30, - "Ausdauer_Basis": 0, - "Ausdauer_Aktuell": 0, - "Astralpunkte_Basis": 20, - "Astralpunkte_Aktuell": 20, - "Name": "Felis Exodus Schattenwald" - }, - { - "Eigenschaften": {}, - "Talente": [], - "Zauber": [], - "Kampftalente": [], - "Vorteile": [], - "PropTable": { - "MU": "Mut", - "KL": "Klugheit", - "IN": "Intuition", - "CH": "Charisma", - "FF": "Fingerfertigkeit", - "GE": "Gewandtheit", - "KO": "Konstitution", - "KK": "Körperkraft" - }, - "Lebenspunkte_Basis": 29, - "Lebenspunkte_Aktuell": 29, - "Ausdauer_Basis": 0, - "Ausdauer_Aktuell": 0, - "Astralpunkte_Basis": 0, - "Astralpunkte_Aktuell": 0, - "Name": "Gardist" - }, - { - "Eigenschaften": {}, - "Talente": [], - "Zauber": [], - "Kampftalente": [], - "Vorteile": [], - "PropTable": { - "MU": "Mut", - "KL": "Klugheit", - "IN": "Intuition", - "CH": "Charisma", - "FF": "Fingerfertigkeit", - "GE": "Gewandtheit", - "KO": "Konstitution", - "KK": "Körperkraft" - }, - "Lebenspunkte_Basis": 31, - "Lebenspunkte_Aktuell": 31, - "Ausdauer_Basis": 0, - "Ausdauer_Aktuell": 0, - "Astralpunkte_Basis": 0, - "Astralpunkte_Aktuell": 0, - "Name": "Hartmut Reiher" - }, - { - "Eigenschaften": {}, - "Talente": [], - "Zauber": [], - "Kampftalente": [], - "Vorteile": [], - "PropTable": { - "MU": "Mut", - "KL": "Klugheit", - "IN": "Intuition", - "CH": "Charisma", - "FF": "Fingerfertigkeit", - "GE": "Gewandtheit", - "KO": "Konstitution", - "KK": "Körperkraft" - }, - "Lebenspunkte_Basis": 21, - "Lebenspunkte_Aktuell": 21, - "Ausdauer_Basis": 0, - "Ausdauer_Aktuell": 0, - "Astralpunkte_Basis": 35, - "Astralpunkte_Aktuell": 35, - "Name": "Helga vom Drachenei, Tausendsasserin" - }, - { - "Eigenschaften": {}, - "Talente": [], - "Zauber": [], - "Kampftalente": [], - "Vorteile": [], - "PropTable": { - "MU": "Mut", - "KL": "Klugheit", - "IN": "Intuition", - "CH": "Charisma", - "FF": "Fingerfertigkeit", - "GE": "Gewandtheit", - "KO": "Konstitution", - "KK": "Körperkraft" - }, - "Lebenspunkte_Basis": 25, - "Lebenspunkte_Aktuell": 25, - "Ausdauer_Basis": 0, - "Ausdauer_Aktuell": 0, - "Astralpunkte_Basis": 0, - "Astralpunkte_Aktuell": 0, - "Name": "Krenko" - }, - { - "Eigenschaften": {}, - "Talente": [], - "Zauber": [], - "Kampftalente": [], - "Vorteile": [], - "PropTable": { - "MU": "Mut", - "KL": "Klugheit", - "IN": "Intuition", - "CH": "Charisma", - "FF": "Fingerfertigkeit", - "GE": "Gewandtheit", - "KO": "Konstitution", - "KK": "Körperkraft" - }, - "Lebenspunkte_Basis": 39, - "Lebenspunkte_Aktuell": 39, - "Ausdauer_Basis": 0, - "Ausdauer_Aktuell": 0, - "Astralpunkte_Basis": 0, - "Astralpunkte_Aktuell": 0, - "Name": "Ledur Torfinson" - }, - { - "Eigenschaften": {}, - "Talente": [], - "Zauber": [], - "Kampftalente": [], - "Vorteile": [], - "PropTable": { - "MU": "Mut", - "KL": "Klugheit", - "IN": "Intuition", - "CH": "Charisma", - "FF": "Fingerfertigkeit", - "GE": "Gewandtheit", - "KO": "Konstitution", - "KK": "Körperkraft" - }, - "Lebenspunkte_Basis": 26, - "Lebenspunkte_Aktuell": 26, - "Ausdauer_Basis": 0, - "Ausdauer_Aktuell": 0, - "Astralpunkte_Basis": 13, - "Astralpunkte_Aktuell": 13, - "Name": "Morla" - }, - { - "Eigenschaften": {}, - "Talente": [], - "Zauber": [], - "Kampftalente": [], - "Vorteile": [], - "PropTable": { - "MU": "Mut", - "KL": "Klugheit", - "IN": "Intuition", - "CH": "Charisma", - "FF": "Fingerfertigkeit", - "GE": "Gewandtheit", - "KO": "Konstitution", - "KK": "Körperkraft" - }, - "Lebenspunkte_Basis": 28, - "Lebenspunkte_Aktuell": 28, - "Ausdauer_Basis": 0, - "Ausdauer_Aktuell": 0, - "Astralpunkte_Basis": 40, - "Astralpunkte_Aktuell": 40, - "Name": "Numeri Illuminus" - }, - { - "Eigenschaften": {}, - "Talente": [], - "Zauber": [], - "Kampftalente": [], - "Vorteile": [], - "PropTable": { - "MU": "Mut", - "KL": "Klugheit", - "IN": "Intuition", - "CH": "Charisma", - "FF": "Fingerfertigkeit", - "GE": "Gewandtheit", - "KO": "Konstitution", - "KK": "Körperkraft" - }, - "Lebenspunkte_Basis": 39, - "Lebenspunkte_Aktuell": 39, - "Ausdauer_Basis": 0, - "Ausdauer_Aktuell": 0, - "Astralpunkte_Basis": 16, - "Astralpunkte_Aktuell": 16, - "Name": "Potus" - }, - { - "Eigenschaften": {}, - "Talente": [], - "Zauber": [], - "Kampftalente": [], - "Vorteile": [], - "PropTable": { - "MU": "Mut", - "KL": "Klugheit", - "IN": "Intuition", - "CH": "Charisma", - "FF": "Fingerfertigkeit", - "GE": "Gewandtheit", - "KO": "Konstitution", - "KK": "Körperkraft" - }, - "Lebenspunkte_Basis": 18, - "Lebenspunkte_Aktuell": 18, - "Ausdauer_Basis": 0, - "Ausdauer_Aktuell": 0, - "Astralpunkte_Basis": 13, - "Astralpunkte_Aktuell": 13, - "Name": "Pump aus der Gosse" - }, - { - "Eigenschaften": {}, - "Talente": [], - "Zauber": [], - "Kampftalente": [], - "Vorteile": [], - "PropTable": { - "MU": "Mut", - "KL": "Klugheit", - "IN": "Intuition", - "CH": "Charisma", - "FF": "Fingerfertigkeit", - "GE": "Gewandtheit", - "KO": "Konstitution", - "KK": "Körperkraft" - }, - "Lebenspunkte_Basis": 34, - "Lebenspunkte_Aktuell": 34, - "Ausdauer_Basis": 0, - "Ausdauer_Aktuell": 0, - "Astralpunkte_Basis": 17, - "Astralpunkte_Aktuell": 17, - "Name": "Rhoktar4" - }, - { - "Eigenschaften": {}, - "Talente": [], - "Zauber": [], - "Kampftalente": [], - "Vorteile": [], - "PropTable": { - "MU": "Mut", - "KL": "Klugheit", - "IN": "Intuition", - "CH": "Charisma", - "FF": "Fingerfertigkeit", - "GE": "Gewandtheit", - "KO": "Konstitution", - "KK": "Körperkraft" - }, - "Lebenspunkte_Basis": 28, - "Lebenspunkte_Aktuell": 28, - "Ausdauer_Basis": 0, - "Ausdauer_Aktuell": 0, - "Astralpunkte_Basis": 43, - "Astralpunkte_Aktuell": 43, - "Name": "Volant" - } -] \ No newline at end of file diff --git a/DSACore/Properties/PublishProfiles/FolderProfile.pubxml b/DSACore/Properties/PublishProfiles/FolderProfile.pubxml deleted file mode 100644 index 2fd07c5..0000000 --- a/DSACore/Properties/PublishProfiles/FolderProfile.pubxml +++ /dev/null @@ -1,23 +0,0 @@ - - - - - FileSystem - FileSystem - Release - Any CPU - - True - False - netcoreapp2.1 - 35a5e2cc-0fd4-4bc0-acbf-38599caed1c4 - false - <_IsPortable>true - bin\Release\netcoreapp2.1\publish\ - False - win-x64 - - \ No newline at end of file diff --git a/DSACore/Properties/PublishProfiles/FolderProfile1.pubxml b/DSACore/Properties/PublishProfiles/FolderProfile1.pubxml deleted file mode 100644 index e03b55a..0000000 --- a/DSACore/Properties/PublishProfiles/FolderProfile1.pubxml +++ /dev/null @@ -1,23 +0,0 @@ - - - - - FileSystem - FileSystem - Release - Any CPU - - True - False - netcoreapp2.1 - linux-x64 - 35a5e2cc-0fd4-4bc0-acbf-38599caed1c4 - false - <_IsPortable>true - bin\Release\netcoreapp2.1\publish\ - False - - \ No newline at end of file diff --git a/DSACore/Properties/launchSettings.json b/DSACore/Properties/launchSettings.json deleted file mode 100644 index 2da5fec..0000000 --- a/DSACore/Properties/launchSettings.json +++ /dev/null @@ -1,30 +0,0 @@ -{ - "$schema": "http://json.schemastore.org/launchsettings.json", - "iisSettings": { - "windowsAuthentication": false, - "anonymousAuthentication": true, - "iisExpress": { - "applicationUrl": "http://localhost:2170", - "sslPort": 44365 - } - }, - "profiles": { - "IIS Express": { - "commandName": "IISExpress", - "launchBrowser": true, - "launchUrl": "api/commands", - "environmentVariables": { - "ASPNETCORE_ENVIRONMENT": "Development" - } - }, - "DSACore": { - "commandName": "Project", - "launchBrowser": true, - "launchUrl": "api/commands", - "applicationUrl": "https://0.0.0.0:5001;http://0.0.0.0:5000", - "environmentVariables": { - "ASPNETCORE_ENVIRONMENT": "Development" - } - } - } -} \ No newline at end of file diff --git a/DSACore/Startup.cs b/DSACore/Startup.cs deleted file mode 100644 index ef22802..0000000 --- a/DSACore/Startup.cs +++ /dev/null @@ -1,47 +0,0 @@ -using DSACore.Hubs; -using Microsoft.AspNetCore.Builder; -using Microsoft.AspNetCore.Hosting; -using Microsoft.AspNetCore.Mvc; -using Microsoft.Extensions.Configuration; -using Microsoft.Extensions.DependencyInjection; - -namespace DSACore -{ - public class Startup - { - public Startup(IConfiguration configuration) - { - Configuration = configuration; - } - - public IConfiguration Configuration { get; } - - // This method gets called by the runtime. Use this method to add services to the container. - public void ConfigureServices(IServiceCollection services) - { - - services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_1); - - services.AddSignalR(); - } - - // This method gets called by the runtime. Use this method to configure the HTTP request pipeline. - public void Configure(IApplicationBuilder app, IHostingEnvironment env) - { - if (env.IsDevelopment()) - app.UseDeveloperExceptionPage(); - else - app.UseHsts(); - - app.UseCors("CorsPolicy"); - - app.UseSignalR(routes => { routes.MapHub("/login"); }); - - app.UseWebSockets(); - - //app.UseCors("AllowSpecificOrigin"); - app.UseHttpsRedirection(); - app.UseMvc(); - } - } -} \ No newline at end of file diff --git a/DSACore/appsettings.Development.json b/DSACore/appsettings.Development.json deleted file mode 100644 index e203e94..0000000 --- a/DSACore/appsettings.Development.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "Logging": { - "LogLevel": { - "Default": "Debug", - "System": "Information", - "Microsoft": "Information" - } - } -} diff --git a/DSACore/appsettings.json b/DSACore/appsettings.json deleted file mode 100644 index dee968c..0000000 --- a/DSACore/appsettings.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "Logging": { - "LogLevel": { - "Microsoft.AspNetCore.SignalR": "Debug", - "Microsoft.AspNetCore.Http.Connections": "Debug", - "Default": "Debug" - } - }, - "AllowedHosts": "*" -} diff --git a/DSALib/Auxiliary/Calculator/Argument.cs b/DSALib/Auxiliary/Calculator/Argument.cs deleted file mode 100644 index e681377..0000000 --- a/DSALib/Auxiliary/Calculator/Argument.cs +++ /dev/null @@ -1,35 +0,0 @@ -using System; - -namespace DSALib.Auxiliary.Calculator -{ - /// - /// Provides an ISolvable class to save numbers. The class handles Argument checking and conversion from string to int. - /// - public class Argument : ISolvable - { - private readonly int value; - - public Argument(string value) - { - // check whether the value given is an empty string - if (string.IsNullOrEmpty(value)) - throw new ArgumentException("Argument kann nicht mit einem leeren string instanziert werden. ", - nameof(value)); - - if (!int.TryParse(value, out var result)) - throw new ArgumentException($"Kann {value} nicht in Integer konvertieren"); - - this.value = result; - } - - public int Solve() - { - return value; - } - - public override string ToString() - { - return value.ToString(); - } - } -} \ No newline at end of file diff --git a/DSALib/Auxiliary/Calculator/ISolvable.cs b/DSALib/Auxiliary/Calculator/ISolvable.cs deleted file mode 100644 index 844e9b3..0000000 --- a/DSALib/Auxiliary/Calculator/ISolvable.cs +++ /dev/null @@ -1,10 +0,0 @@ -namespace DSALib.Auxiliary.Calculator -{ - /// - /// Object has to be able to return an integer as it's value - /// - public interface ISolvable - { - int Solve(); - } -} \ No newline at end of file diff --git a/DSALib/Auxiliary/Calculator/Operator.cs b/DSALib/Auxiliary/Calculator/Operator.cs deleted file mode 100644 index e6aeec6..0000000 --- a/DSALib/Auxiliary/Calculator/Operator.cs +++ /dev/null @@ -1,51 +0,0 @@ -using System; -using DSALibv.Auxiliary.Calculator; - -namespace DSALib.Auxiliary.Calculator -{ - /// - /// The Operator Class represents a binary operator with tow Arguments and an Operation type - /// - public class Operator : ISolvable - { - private readonly ISolvable arg1, arg2; - - public Operator(ISolvable arg1, ISolvable arg2, Ops operatorType) - { - this.arg1 = arg1; - this.arg2 = arg2; - OperatorType = operatorType; - } - - public Ops OperatorType { get; set; } - - public int Solve() - { - int result; - switch (OperatorType) - { - case Ops.Dice: - result = Dice.Roll(arg1.Solve(), arg2.Solve()); - break; - case Ops.Multiply: - result = arg1.Solve() * arg2.Solve(); - break; - case Ops.Add: - result = arg1.Solve() + arg2.Solve(); - break; - case Ops.Subtract: - result = arg1.Solve() - arg2.Solve(); - break; - default: - throw new ArgumentOutOfRangeException(); - } - - return result; - } - - public override string ToString() - { - return $"({arg1} {OperatorType} {arg2})"; - } - } -} \ No newline at end of file diff --git a/DSALib/Auxiliary/Calculator/Ops.cs b/DSALib/Auxiliary/Calculator/Ops.cs deleted file mode 100644 index 93046d0..0000000 --- a/DSALib/Auxiliary/Calculator/Ops.cs +++ /dev/null @@ -1,13 +0,0 @@ -namespace DSALibv.Auxiliary.Calculator -{ - /// - /// The Different Operations, witch can be performed in execution-order - /// - public enum Ops - { - Dice, - Multiply, - Subtract, - Add - } -} \ No newline at end of file diff --git a/DSALib/Auxiliary/Calculator/StringSolver.cs b/DSALib/Auxiliary/Calculator/StringSolver.cs deleted file mode 100644 index 45d6a54..0000000 --- a/DSALib/Auxiliary/Calculator/StringSolver.cs +++ /dev/null @@ -1,183 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using DSALibv.Auxiliary.Calculator; - -namespace DSALib.Auxiliary.Calculator -{ - /// - /// The StringSolver divides the calculation string into operations and SubStringSolvers if the string contains - /// parentheses - /// - public class StringSolver : ISolvable - { - private readonly List arguments = new List(); - private readonly string input; - - public StringSolver(string input) - { - this.input = input; - } - - public int Solve() - { - var workInput = "0+" + input.Replace(" ", string.Empty).ToLower(); - workInput = ExpandParentheses(workInput); - - // Create a List of the different parts of the calculation, e.g.:{"0", "+", "(5+6)", "d", "3"}. - AtomizeOperations(workInput); - - // traverse the List in order of Operation to Create the binary operation tree . - NestOperations(); - - // the List now contains only the top operation node, witch can be solved recursively, - return ((ISolvable) arguments.First()).Solve(); - } - - public override string ToString() - { - return "(0+" + input.Replace(" ", string.Empty).ToLower() + ")"; - } - - private static string - GetInner(ref string input) // extract the inner bracket an remove the section from the input string - { - var depth = 0; - for (var index = 1; index < input.Length; index++) - { - var c = input[index]; - switch (c) - { - case '(': - depth++; - break; - case ')': - if (depth == 0) - { - var split = input.Substring(1, index - 1); - input = input.Substring(index + 1); - return split.Equals(string.Empty) ? "0" : split; - } - else - { - depth--; - } - - break; - } - } - - throw new ArgumentException("Invalid brace sequence"); - } - - private static Ops GetOps(char c) - { - switch (c) - { - case 'd': - case 'w': - return Ops.Dice; - case '+': - return Ops.Add; - case '-': - return Ops.Subtract; - case '*': - return Ops.Multiply; - default: - return Ops.Multiply; - } - } - - private static string ExpandParentheses(string input) // insert * between Parentheses and digits - { - for (var i = 0; i < input.Length - 1; i++) - if (input[i + 1] == '(' && char.IsNumber(input[i])) - input = input.Insert(i + 1, "*"); - - for (var i = 1; i < input.Length; i++) - if (input[i - 1] == ')' && char.IsNumber(input[i])) - input = input.Insert(i, "*"); - - return input; - } - - private void AtomizeOperations(string workInput) - { - for (var index = 0; index < workInput.Length; index++) - { - var c = workInput[index]; - - if (char.IsNumber(c)) - { - // if char number, check if at end of string, else continue looping - if (index == workInput.Length - 1) - // if at end of string; add remaining number to arguments - arguments.Add(new Argument(workInput.Substring(0, index + 1))); - - continue; - } - - switch (c) - { - case ')': - throw new ArgumentException("Invalid brace sequence"); - case '(': - arguments.Add(new StringSolver(GetInner(ref workInput))); - index = -1; - break; - default: - if (index > 0) arguments.Add(new Argument(workInput.Substring(0, index))); - - arguments.Add(GetOps(c)); - workInput = workInput.Remove(0, index + 1); - index = -1; - break; - } - } - } - - private void NestOperations() - { - foreach (Ops currentOp in Enum.GetValues(typeof(Ops))) - // cycle through operators in operational order - for (var index = 0; index < arguments.Count; index++) - { - var arg = arguments[index]; - - if (arg.GetType() != typeof(Ops)) continue; - - // arg is of type Ops - var op = (Ops) arg; - - if (op != currentOp) continue; - - // arg describes the current operation - HandleSpecialFormatting(ref index, op); // Deal with special needs... - - // replace the previous current and next Element in the List with one Operation object - var temp = new Operator((ISolvable) arguments[index - 1], (ISolvable) arguments[index + 1], op); - arguments[index - 1] = temp; - arguments.RemoveRange(index, 2); - index--; - } - } - - private void HandleSpecialFormatting(ref int index, Ops op) - { - var arg1 = arguments[index - 1]; - if (arg1.GetType() == typeof(Ops)) - { - if (op == Ops.Dice) arguments.Insert(index++, new Argument("1")); // w6 -> 1w6 - - if (op == Ops.Subtract) arguments.Insert(index++, new Argument("0")); // +-3 -> +0-3 - } - - var arg2 = arguments[index + 1]; // 3+-5 -> 3+(0-5) - if (arg2.GetType() == typeof(Ops)) - { - arguments[index + 1] = new Operator(new Argument("0"), (ISolvable) arguments[index + 2], (Ops) arg2); - arguments.RemoveAt(index + 2); - } - } - } -} \ No newline at end of file diff --git a/DSALib/Auxiliary/CommandInfo.cs b/DSALib/Auxiliary/CommandInfo.cs deleted file mode 100644 index d8e2188..0000000 --- a/DSALib/Auxiliary/CommandInfo.cs +++ /dev/null @@ -1,28 +0,0 @@ -using System.Linq; - -namespace DSALib.Auxiliary -{ - public struct CommandInfo - { - public CommandInfo(string name, string brief, string[] description, string scope) - { - Name = name; - Scope = scope; - Brief = brief; - Description = description; - } - - public string Name { get; } - - public string Scope { get; } - - public string Brief { get; } - - public string[] Description { get; } - - public string GetDescription() - { - return Description.Aggregate((s, c) => s + c); - } - } -} \ No newline at end of file diff --git a/DSALib/Auxiliary/Dice.cs b/DSALib/Auxiliary/Dice.cs deleted file mode 100644 index 0bfabeb..0000000 --- a/DSALib/Auxiliary/Dice.cs +++ /dev/null @@ -1,45 +0,0 @@ -using System; -using System.Linq; - -namespace DSALib.Auxiliary -{ - public static class Dice // roll it! - { - private static readonly Random Rnd = new Random(); - - public static int Roll(int d = 20) - { - return Rnd.Next(d) + 1; - } - - public static int Roll(string input) - { - var strings = input.ToLower().Split(new[] {'w', 'd'}, 2, StringSplitOptions.RemoveEmptyEntries).ToList(); - - - if (strings.Count != 2) - throw new ArgumentException($"{input}: does not satisfy the format requirements( dice count (d|w) die size)"); - - var count = Convert.ToInt32(strings[0]); - var d = Convert.ToInt32(strings[0]); - - return Roll(count, d); - } - - public static int Roll(int count, int d) - { - if (d <= 0 || count <= 0) return 0; - - var sum = 0; - for (var i = 0; i < Math.Abs(count); i++) - { - var roll = Roll(d); - sum += roll; - } - - sum *= Math.Abs(count) / count; - - return sum; - } - } -} \ No newline at end of file diff --git a/DSALib/Auxiliary/Extensions.cs b/DSALib/Auxiliary/Extensions.cs deleted file mode 100644 index 7d367a5..0000000 --- a/DSALib/Auxiliary/Extensions.cs +++ /dev/null @@ -1,25 +0,0 @@ -namespace DSALib.Auxiliary -{ - public static class StringExtension - { - //This mehod extends string. It adds spaces until a fixed length is reached. - //If the original string is already longer, it is returner unmodified. - public static string AddSpaces(this string str, int length) - { - var temp = str; - for (var i = str.Length; i < length; i++) temp += " "; - return temp; - } - - - //This mehod extends string. - //It adds spaces at the HEAD of a string until a fixed length is reached. - //If the original string is already longer, it is returner unmodified. - public static string AddSpacesAtHead(this string str, int length) - { - var temp = ""; - for (var i = str.Length; i < length; i++) temp += " "; - return temp + str; - } - } -} \ No newline at end of file diff --git a/DSALib/Auxiliary/IDataObjectEnumerableExtension.cs b/DSALib/Auxiliary/IDataObjectEnumerableExtension.cs deleted file mode 100644 index b8a6067..0000000 --- a/DSALib/Auxiliary/IDataObjectEnumerableExtension.cs +++ /dev/null @@ -1,25 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text.RegularExpressions; -using System.Threading.Tasks; -using DSALib.Auxiliary; -using DSALib.Models.Database; - -namespace DSACore.Auxiliary -{ - public static class DataObjectEnumerableExtension - { - public static IDataObject Match(this IEnumerable dataObjects, string name) - { - return (dataObjects as IOrderedEnumerable ?? throw new InvalidOperationException()).OrderBy(x => SpellCorrect.Compare(name,x.Name)).Last(); - } - - public static bool TryMatch(this IEnumerable dataObjects,out IDataObject data, string name) - { - data = (dataObjects as IOrderedEnumerable ?? throw new InvalidOperationException()).OrderBy(x => SpellCorrect.Compare(name,x.Name)).Last(); - - return SpellCorrect.IsMatch(name, data.Name); - } - } -} diff --git a/DSALib/Auxiliary/RandomMisc.cs b/DSALib/Auxiliary/RandomMisc.cs deleted file mode 100644 index 2723930..0000000 --- a/DSALib/Auxiliary/RandomMisc.cs +++ /dev/null @@ -1,52 +0,0 @@ -using System; -using System.Linq; -using System.Text; - -namespace DSALib.Auxiliary -{ - public static class RandomMisc - { - private static readonly Random Rand = new Random(); - - // use: 4w6 +4 - public static string Roll(string input) - { - var output = new StringBuilder(); - var strings = input.Split('w', 'd').ToList(); - var count = Convert.ToInt32(strings[0]); - strings = strings[1].Split(' ').ToList(); - var d = Convert.ToInt32(strings[0]); - - if (strings.Count > 0) - { - } - - var sum = 0; - for (var i = 0; i < count; i++) - { - var roll = Dice.Roll(d); - sum += roll; - output.Append("[" + roll + "] "); - } - - if (strings.Count > 1) - { - sum += Convert.ToInt32(strings[1]); - output.Append("sum: " + sum); - } - - return output.ToString(); - } - - public static double Random(double stdDev = 1, double mean = 0) - { - var u1 = Rand.NextDouble(); // uniform(0,1) random doubles - var u2 = Rand.NextDouble(); - var randStdNormal = Math.Sqrt(-2.0 * Math.Log(u1)) * - Math.Sin(2.0 * Math.PI * u2); // random normal(0,1) - var randNormal = - mean + stdDev * randStdNormal; // random normal(mean,stdDev^2) - return randNormal; - } - } -} \ No newline at end of file diff --git a/DSALib/Auxiliary/SpellCorrect.cs b/DSALib/Auxiliary/SpellCorrect.cs deleted file mode 100644 index 79908c4..0000000 --- a/DSALib/Auxiliary/SpellCorrect.cs +++ /dev/null @@ -1,61 +0,0 @@ -using System; - -namespace DSALib.Auxiliary -{ - public class SpellCorrect - { - public const double ErrorThreshold = 1 / 3.0; - private const double Match = 3.0; - private const double Gap = -1.5; - private const double Mismatch = -2.0; - - public static double Compare(string s, string q) - { - s = s.ToLower(); - q = q.ToLower(); - - int i, j; - - var matrix = new double[s.Length + 1, q.Length + 1]; - var max = 0.0; - matrix[0, 0] = 0.0; - - for (i = 1; i < s.Length; i++) - matrix[i, 0] = i * Gap; - - for (i = 1; i < q.Length; i++) matrix[0, i] = 0.0; - - - for (i = 1; i <= s.Length; i++) - for (j = 1; j <= q.Length; j++) - { - double decay = j / (s.Length * 1000.0); - var add = s[i - 1] == q[j - 1] ? Match - decay : Mismatch; - var score = matrix[i - 1, j - 1] + add; - - if (score < matrix[i - 1, j] + Gap) score = matrix[i - 1, j] + Gap; - - if (score < matrix[i, j - 1] + Gap) score = matrix[i, j - 1] + Gap; - - if (i > 1 && j > 1) - if (s[i - 1] == q[j - 2] && s[i - 2] == q[j - 1]) - { - add = 3 / 2.0 * Match - decay; - if (score < matrix[i - 2, j - 2] + add) score = matrix[i - 2, j - 2] + add; - } - - if (max < score && i == s.Length) max = score; - - matrix[i, j] = score; - } - - return max; - } - - public static bool IsMatch(string s1, string s2) - { - var score = Compare(s1, s2); - return score > ErrorThreshold * s1.Length; - } - } -} \ No newline at end of file diff --git a/DSALib/Auxiliary/TalentEnumerableExtension.cs b/DSALib/Auxiliary/TalentEnumerableExtension.cs deleted file mode 100644 index 6ec7fcc..0000000 --- a/DSALib/Auxiliary/TalentEnumerableExtension.cs +++ /dev/null @@ -1,74 +0,0 @@ -using System.Collections.Generic; -using System.Linq; -using System.Text; -using DSACore.Auxiliary; -using DSALib.DSA_Game.Characters; -using DSALib.Models.Dsa; - -namespace DSALib.Auxiliary -{ - public static class TalentEnumerableExtension - { - public static string ProbenTest(this IEnumerable List, Character c, string talentName, int erschwernis = 0) - { - var output = new StringBuilder(); - var sc = new SpellCorrect(); - - if (!List.TryMatch(out var iTalent, talentName)) - return $"{c.Name} kann nicht {talentName}..."; - - var talent = (Talent) iTalent; - var props = talent.GetEigenschaften(); // get the required properties - var tap = talent.Value; // get taw - var werte = props.Select(p => c.Eigenschaften[c.PropTable[p]]).ToArray(); - - output.AppendFormat( - "{0} würfelt: {1} \n{2} - {3} taw:{4} {5} \n", - c.Name, - talent.Name, - talent.Probe, - string.Join("/", werte), - talent.Value, - erschwernis.Equals(0) ? string.Empty : "Erschwernis: " + erschwernis); - - output.Append(" "); - tap -= erschwernis; - var gesamtErschwernis = tap; - if (gesamtErschwernis < 0) - { - tap = 0; - for (var i = 0; i <= 2; i++) - { - // foreach property, dice and tap - var temp = Dice.Roll(); - var eigenschaft = c.Eigenschaften[c.PropTable[props[i]]]; - - if (eigenschaft + gesamtErschwernis < temp) tap -= temp - (eigenschaft + gesamtErschwernis); - - output.Append($"[{temp}]"); // add to string - } - - if (tap >= 0) tap = 1; - } - else - { - for (var i = 0; i <= 2; i++) - { - // foreach property, dice and tap - var temp = Dice.Roll(); - var eigenschaft = c.Eigenschaften[c.PropTable[props[i]]]; - - if (eigenschaft < temp) tap -= temp - eigenschaft; - - output.Append($"[{temp}]"); // add to string - } - } - - tap = tap == 0 ? 1 : tap; - - output.AppendFormat(" tap: {0,2}", tap); - - return output.ToString(); // return output - } - } -} \ No newline at end of file diff --git a/DSALib/Auxiliary/WeaponImporter.cs b/DSALib/Auxiliary/WeaponImporter.cs deleted file mode 100644 index 61eb33e..0000000 --- a/DSALib/Auxiliary/WeaponImporter.cs +++ /dev/null @@ -1,175 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Net.Http; -using System.Text.RegularExpressions; -using System.Threading.Tasks; -using DSALib.FireBase; -using DSALib.Models.Database.Dsa; - -namespace DSALib.Auxiliary -{ - public class WeaponImporter - { - private readonly List Range = new List(); - private readonly List Weapons = new List(); - - public async Task DownloadWeapons() - { - var client = new HttpClient(); - - - for (var i = 1; i <= 25; i++) - { - var responseString = - await client.GetStringAsync("http://diarium.eu/dsa4-forge/ajax/categoryChanged/" + i); - - var talentRegex = new Regex(@"(?<=