diff options
author | Dennis Kobert <d-kobert@web.de> | 2019-06-11 23:38:13 +0200 |
---|---|---|
committer | Dennis Kobert <d-kobert@web.de> | 2019-06-11 23:38:13 +0200 |
commit | 2fa4a0e50ebfc97059c8b84dbd17e79f9afc8a8d (patch) | |
tree | c3b34ccb2737e347a73768536895cbbaab13cc01 /DSACore/Hubs | |
parent | ec991104f56e90d7bb2878da2fe6ed4e585dfc46 (diff) | |
parent | af74efccf8d21e6151022b71f3cacd3fa83024ee (diff) |
Merge branch 'rework-backend'
Diffstat (limited to 'DSACore/Hubs')
-rw-r--r-- | DSACore/Hubs/Login.cs (renamed from DSACore/Hubs/ChatHub.cs) | 129 |
1 files changed, 59 insertions, 70 deletions
diff --git a/DSACore/Hubs/ChatHub.cs b/DSACore/Hubs/Login.cs index 1994164..f08c24a 100644 --- a/DSACore/Hubs/ChatHub.cs +++ b/DSACore/Hubs/Login.cs @@ -1,66 +1,58 @@ -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.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 ChatHub : Hub + public class Users : Hub { //private static Dictionary<string, User> UserGroup = new Dictionary<string, User>(); - - private const string receiveMethod = "ReceiveMessage";//receiveMethod; - private static List<Group> DSAGroups = new List<Group>(); + private const string ReceiveMethod = "ReceiveMessage"; //receiveMethod; - static ChatHub() - { - DSAGroups = Database.GetGroups().Result; - DSAGroups.Add(new Group("login", "")); - DSAGroups.Add(new Group("online", "")); + 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 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" }); - } + private static List<Group> DsaGroups { get; } + public static List<Token> Tokens { get; } = new List<Token>(); + public async Task SendMessage(string user, string message) { try { - string group = getGroup(Context.ConnectionId).Name; + var group = getGroup(Context.ConnectionId).Name; } - catch (InvalidOperationException e) + catch (InvalidOperationException) { - //await Clients.Caller.SendCoreAsync(receiveMethod, - // new object[] { "Nutzer ist in keiner Gruppe. Erst joinen!" }); + await Clients.Caller.SendCoreAsync(ReceiveMethod, + new object[] { "Nutzer ist in keiner Gruppe. Erst joinen!" }); } if (message[0] == '/') { var args = message.Split(' ', StringSplitOptions.RemoveEmptyEntries).ToList(); - bool Timon = args.Any(x => x == "hallo"); + var Timon = args.Any(x => x == "hallo"); var ident = args.First().Replace("/", ""); - if (args.Count > 0) - { - args.RemoveAt(0); - } + if (args.Count > 0) args.RemoveAt(0); - var ret = Commands.CommandHandler.ExecuteCommand(new Command + var ret = CommandHandler.ExecuteCommand(new Command { CharId = 0, CmdIdentifier = ident, @@ -72,69 +64,61 @@ namespace DSACore.Hubs { case ResponseType.Caller: case ResponseType.Error: - await Clients.Caller.SendAsync(receiveMethod, ret.message); + 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 { - string group = getGroup(Context.ConnectionId).Name; - return Clients.Group(group).SendCoreAsync(receiveMethod, + var group = getGroup(Context.ConnectionId).Name; + return Clients.Group(group).SendCoreAsync(ReceiveMethod, new object[] {getUser(Context.ConnectionId).Name, message}); } - catch (InvalidOperationException e) + catch (InvalidOperationException) { - return Clients.Caller.SendCoreAsync(receiveMethod, - new object[] { "Nutzer ist in keiner Gruppe. Erst joinen!" }); + return Clients.Caller.SendCoreAsync(ReceiveMethod, + new object[] {"Nutzer ist in keiner Gruppe. Erst joinen!"}); } } - private Models.Network.Group getGroup(string id) + private Group getGroup(string id) { - return DSAGroups.First(x => x.Users.Exists(y => y.ConnectionId.Equals(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)); + 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); - } - } + 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()) }); + 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 DSACore.Models.Database.Group { Name = group, Id = DSAGroups.Count - 1 }; + 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" }); + await Clients.Caller.SendCoreAsync(ReceiveMethod, new[] {$"group {group} sucessfully added"}); //throw new NotImplementedException("add database call to add groups"); } @@ -142,24 +126,28 @@ namespace DSACore.Hubs { var group = getGroup(Context.ConnectionId); - await Database.AddChar(new Character(new MemoryStream(Encoding.UTF8.GetBytes(xml))), group); + 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) + if (hash == DsaGroups.First(x => x.Name == group).Password) { - var gGroup = DSAGroups.First(x => x.Name.Equals(group)); + 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 }); + 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 { @@ -173,6 +161,11 @@ namespace DSACore.Hubs } } + private void purgeTokens() + { + Tokens.RemoveAll(x => !x.IsValid()); + } + public override Task OnDisconnectedAsync(Exception exception) { Disconnect().Wait(); @@ -189,8 +182,7 @@ namespace DSACore.Hubs public async Task Disconnect() { await Groups.RemoveFromGroupAsync(Context.ConnectionId, "online"); - if (DSAGroups.Exists(x => x.Users.Exists(y => y.ConnectionId == Context.ConnectionId))) - { + if (DsaGroups.Exists(x => x.Users.Exists(y => y.ConnectionId == Context.ConnectionId))) try { var group = getGroup(Context.ConnectionId); @@ -198,7 +190,7 @@ namespace DSACore.Hubs var user = getUser(Context.ConnectionId); - await Clients.Caller.SendAsync("PlayerStatusChanged", new[] { user.Name, "offline" }); + 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); @@ -208,9 +200,6 @@ namespace DSACore.Hubs Console.WriteLine(e); //throw; } - } - } - } -} +}
\ No newline at end of file |