summaryrefslogtreecommitdiff
path: root/DSACore
diff options
context:
space:
mode:
authorTrueDoctor <d-kobert@web.de>2018-09-30 02:06:02 +0200
committerTrueDoctor <d-kobert@web.de>2018-09-30 02:06:02 +0200
commit560f454c9beb2f691730b126fc6b3e23d68d6681 (patch)
tree944ac498da2d3d231ef928769c55bf29a39070d0 /DSACore
parent7db0e121521733273a8ca3977e91e6f88756f38a (diff)
added mot of the database infrastructure
Diffstat (limited to 'DSACore')
-rw-r--r--DSACore/DSA_Game/Characters/Character.cs15
-rw-r--r--DSACore/DSA_Game/Dsa.cs18
-rw-r--r--DSACore/FireBase/Database.cs16
-rw-r--r--DSACore/Hubs/ChatHub.cs57
-rw-r--r--DSACore/Models/Database/GeneralSpell.cs11
-rw-r--r--DSACore/Models/Database/Roll.cs12
-rw-r--r--DSACore/Models/Database/Talent.cs8
-rw-r--r--DSACore/Models/Network/User.cs1
8 files changed, 100 insertions, 38 deletions
diff --git a/DSACore/DSA_Game/Characters/Character.cs b/DSACore/DSA_Game/Characters/Character.cs
index 8fad2ef..247fc58 100644
--- a/DSACore/DSA_Game/Characters/Character.cs
+++ b/DSACore/DSA_Game/Characters/Character.cs
@@ -1,4 +1,5 @@
-using DSACore.Auxiliary;
+using System.IO;
+using DSACore.Auxiliary;
using DSALib;
using DSALib.Characters;
@@ -28,7 +29,12 @@ namespace DSACore.DSA_Game.Characters
public Character(string path) : this()
{
- this.Load(path); // load
+ this.Load(new MemoryStream(File.ReadAllBytes(path))); // load
+ this.Post_process(); // calculate derived values
+ }
+ public Character(MemoryStream stream) : this()
+ {
+ this.Load(stream); // load
this.Post_process(); // calculate derived values
}
@@ -198,10 +204,11 @@ namespace DSACore.DSA_Game.Characters
}
+
- private void Load(string path)
+ private void Load(MemoryStream stream)
{
- var reader = new XmlTextReader(path);
+ var reader = new XmlTextReader(stream);
while (reader.Read())
{
// read until he hits keywords
diff --git a/DSACore/DSA_Game/Dsa.cs b/DSACore/DSA_Game/Dsa.cs
index d47c5b6..824872c 100644
--- a/DSACore/DSA_Game/Dsa.cs
+++ b/DSACore/DSA_Game/Dsa.cs
@@ -1,4 +1,5 @@
using System;
+using DSACore.FireBase;
using DSALib;
using DSALib.Characters;
using Microsoft.EntityFrameworkCore.Design;
@@ -21,6 +22,8 @@ namespace DSACore.DSA_Game
public static List<Talent> Talente { get; set; } = new List<Talent>();
+ public static List<Zauber> Zauber { get; set; } = new List<Zauber>();
+
public static Session Session
{
get
@@ -51,12 +54,27 @@ namespace DSACore.DSA_Game
Chars.Add(new Character(filename));
(Chars.Last() as Character)?.Talente.Select(x => new Talent(x.Name, x.Probe, 0))
.Where(c => !Talente.Exists(v => v.Name.Equals(c.Name))).ToList().ForEach(v => Talente.Add(v));
+ (Chars.Last() as Character)?.Zauber.Select(x => new Zauber(x.Name, x.Probe, 0, x.Complexity))
+ .Where(c => !Zauber.Exists(v => v.Name.Equals(c.Name))).ToList().ForEach(v => Zauber.Add(v));
}
Properties.Deserialize(rootPath+"Properties");
Properties.Serialize(rootPath + "Properties");
Talente = Talente.OrderBy(x => x.Name).ToList();
+ Zauber = Zauber.OrderBy(x => x.Name).ToList();
+
+ /*foreach (var talent in Talente)
+ {
+ Database.AddTalent(new Models.Database.Talent(talent.Name, talent.Probe));
+ }
+
+ foreach (var talent in Zauber)
+ {
+ Database.AddSpell(new Models.Database.GeneralSpell(talent.Name, talent.Probe, talent.Complexity));
+ }*/
+
+
Session = new Session
{
Chars = Chars.Select(x => SaveChar.FromICharacter(x)).ToList()
diff --git a/DSACore/FireBase/Database.cs b/DSACore/FireBase/Database.cs
index de7d540..02a4741 100644
--- a/DSACore/FireBase/Database.cs
+++ b/DSACore/FireBase/Database.cs
@@ -34,10 +34,10 @@ namespace DSACore.FireBase
var lastChar = await firebase
.Child("Chars")
- .OrderBy("id")
+ .OrderByKey()
.LimitToLast(1)
- .OnceSingleAsync<DatabaseChar>();
- int id = groupChar.Id = data.Id = lastChar.Id + 1;
+ .OnceAsync<DatabaseChar>();
+ int id = groupChar.Id = data.Id = lastChar.First().Object.Id + 1;
await firebase
.Child("Groups")
@@ -180,7 +180,7 @@ namespace DSACore.FireBase
{
var groups = await firebase
.Child("Groups")
- .OrderBy("id")
+ .OrderByKey()
.OnceAsync<Group>();
var ret = new List<Models.Network.Group>();
@@ -201,14 +201,14 @@ namespace DSACore.FireBase
return group;
}
- public static async void AddGroup(Group group)
+ public static async Task AddGroup(Group group)
{
var lastChar = await firebase
.Child("Groups")
- .OrderBy("id")
+ .OrderByKey()
.LimitToLast(1)
- .OnceSingleAsync<DatabaseChar>();
- int id = group.Id = lastChar.Id + 1;
+ .OnceAsync<Group>();
+ int id = group.Id = lastChar.First().Object.Id + 1;
await firebase
.Child("Groups")
diff --git a/DSACore/Hubs/ChatHub.cs b/DSACore/Hubs/ChatHub.cs
index e489b2e..46fde08 100644
--- a/DSACore/Hubs/ChatHub.cs
+++ b/DSACore/Hubs/ChatHub.cs
@@ -1,7 +1,10 @@
using System;
using System.Collections.Generic;
+using System.IO;
using System.Linq;
+using System.Text;
using System.Threading.Tasks;
+using DSACore.DSA_Game.Characters;
using DSACore.FireBase;
using DSACore.Models;
using DSACore.Models.Network;
@@ -18,11 +21,15 @@ namespace DSACore.Hubs
static ChatHub()
{
DSAGroups = Database.GetGroups().Result;
- DSAGroups.Add(new Group("TheCrew", "valid"));
- DSAGroups.Add(new Group("HalloWelt", "valid"));
- DSAGroups.Add(new Group("DieKrassenGamer", "valid"));
- DSAGroups.Add(new Group("DSA", "valid"));
- DSAGroups.Add(new Group("DieÜberhelden", "valid"));
+ //AddGroups();
+ }
+
+ private static async void AddGroups()
+ {
+ await Database.AddGroup(new Models.Database.Group { Name = "HalloWelt", Password = "valid" });
+ await Database.AddGroup(new Models.Database.Group { Name = "Die Krassen Gamer", Password = "valid" });
+ await Database.AddGroup(new Models.Database.Group { Name = "DSA", Password = "valid" });
+ await Database.AddGroup(new Models.Database.Group { Name = "Die Überhelden", Password = "valid" });
}
public async Task SendMessage(string user, string message)
@@ -34,7 +41,7 @@ namespace DSACore.Hubs
try
{
string group = getGroup(Context.ConnectionId).Name;
- await SendToGroup(group, user, Commands.CommandHandler.ExecuteCommand(new Command { CharId = 0, CmdIdentifier = ident, CmdTexts = args, Name = user }));
+ await SendToGroup(Commands.CommandHandler.ExecuteCommand(new Command { CharId = 0, CmdIdentifier = ident, CmdTexts = args, Name = user }));
}
catch(InvalidOperationException e)
{
@@ -43,9 +50,10 @@ namespace DSACore.Hubs
}
- private Task SendToGroup(string group, string user, string message)
+ private Task SendToGroup(string message)
{
- return Clients.Group(group).SendCoreAsync("ReceiveMessage", new object[] { user, message });
+ string group = getGroup(Context.ConnectionId).Name;
+ return Clients.Group(group).SendCoreAsync("ReceiveMessage", new object[] { getUser(Context.ConnectionId), message });
}
private Models.Network.Group getGroup(string id)
@@ -53,8 +61,23 @@ namespace DSACore.Hubs
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 = Database.GetGroups();
+ test.Wait();
+ foreach (var group in test.Result)
+ {
+ if (!DSAGroups.Exists(x => x.Name.Equals(group.Name)))
+ {
+ DSAGroups.Add(group);
+ }
+ }
+
await Clients.Caller.SendCoreAsync("ListGroups", new object[] { DSAGroups });
//throw new NotImplementedException("add database call to get groups");
}
@@ -63,11 +86,19 @@ namespace DSACore.Hubs
{
DSAGroups.Add(new Group(group, password));
var Dgroup = new DSACore.Models.Database.Group{Name = group, Id = DSAGroups.Count-1};
- Database.CreateGroup(Dgroup);
+ //Database.AddGroup(Dgroup);
await Clients.Caller.SendCoreAsync("ReceiveMessage", 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);
+
+ Database.AddChar(new Character(new MemoryStream(Encoding.UTF8.GetBytes(xml))), group);
+ //throw new NotImplementedException("add database call to add groups");
+ }
+
public async Task Login(string group, string user, string password)
{
if (password == DSAGroups.First(x=>x.Name == group).Password)
@@ -76,17 +107,19 @@ namespace DSACore.Hubs
await Groups.AddToGroupAsync(Context.ConnectionId, group);
}
- await SendToGroup(group, user, "Ein neuer Nutzer hat die Gruppe betreten");
+ await SendToGroup("Ein neuer Nutzer hat die Gruppe betreten");
}
public async Task Disconnect()
{
var group = getGroup(Context.ConnectionId);
- var user = group.Users.First(x => x.ConnectionId.Equals(Context.ConnectionId));
+
+ await SendToGroup("Connection lost");
+
+ var user = getUser(Context.ConnectionId);
group.Users.Remove(user);
await Groups.RemoveFromGroupAsync(Context.ConnectionId, group.Name);
- await SendToGroup(group.Name, user.Name, "Connection lost");
}
}
diff --git a/DSACore/Models/Database/GeneralSpell.cs b/DSACore/Models/Database/GeneralSpell.cs
index 807a09b..6a6e94c 100644
--- a/DSACore/Models/Database/GeneralSpell.cs
+++ b/DSACore/Models/Database/GeneralSpell.cs
@@ -7,6 +7,15 @@ namespace DSACore.Models.Database
{
public class GeneralSpell : Talent
{
- public string Comlexity = "A";
+ public char Comlexity = 'A';
+
+ public GeneralSpell(string name, string roll, char comlexity = 'A') :base(name, roll)
+ {
+ Comlexity = comlexity;
+ }
+
+ public GeneralSpell(string name, string roll) : base(name, roll)
+ {
+ }
}
}
diff --git a/DSACore/Models/Database/Roll.cs b/DSACore/Models/Database/Roll.cs
deleted file mode 100644
index 547fde4..0000000
--- a/DSACore/Models/Database/Roll.cs
+++ /dev/null
@@ -1,12 +0,0 @@
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Threading.Tasks;
-
-namespace DSACore.Models.Database
-{
- public class Roll
- {
- public string[] Skills { get; set; } = new string[3];
- }
-}
diff --git a/DSACore/Models/Database/Talent.cs b/DSACore/Models/Database/Talent.cs
index 6bd8cba..117d0f7 100644
--- a/DSACore/Models/Database/Talent.cs
+++ b/DSACore/Models/Database/Talent.cs
@@ -7,8 +7,14 @@ namespace DSACore.Models.Database
{
public class Talent
{
+ public Talent(string name, String roll)
+ {
+ Name = name ?? throw new ArgumentNullException(nameof(name));
+ Roll = roll.Split('/');
+ }
+
public string Name { get; set; }
- public Roll Roll { get; set; } = new Roll();
+ public string[] Roll { get; set; } = new string[3];
}
}
diff --git a/DSACore/Models/Network/User.cs b/DSACore/Models/Network/User.cs
index b207a19..04ef0a9 100644
--- a/DSACore/Models/Network/User.cs
+++ b/DSACore/Models/Network/User.cs
@@ -9,5 +9,6 @@ namespace DSACore.Models.Network
{
public string Name { get; set; }
public string ConnectionId { get; set; }
+ public int Char { get; set; }
}
}