diff options
author | TrueKuehli <rctcoaster2000@hotmail.de> | 2018-10-07 12:05:11 +0200 |
---|---|---|
committer | TrueKuehli <rctcoaster2000@hotmail.de> | 2018-10-07 12:05:11 +0200 |
commit | 97f19926ac2b02e976c1abf993525b519d68ffac (patch) | |
tree | 60fb48ecf30b70530d6132711b331d66e33b3893 /DSACore/Hubs | |
parent | 3de6fb5d7bd28318d90975f016c9722a99ba2455 (diff) | |
parent | 373af0a9c563dcd6bfb5e136f75f23e48bfb961c (diff) |
Merge branch 'WebApi' of https://github.com/TrueDoctor/DiscoBot into WebApi
Diffstat (limited to 'DSACore/Hubs')
-rw-r--r-- | DSACore/Hubs/ChatHub.cs | 126 |
1 files changed, 93 insertions, 33 deletions
diff --git a/DSACore/Hubs/ChatHub.cs b/DSACore/Hubs/ChatHub.cs index 25f34d7..42e6d91 100644 --- a/DSACore/Hubs/ChatHub.cs +++ b/DSACore/Hubs/ChatHub.cs @@ -1,14 +1,14 @@ -using System; +using DSACore.DSA_Game.Characters; +using DSACore.FireBase; +using DSACore.Models.Network; +using Microsoft.AspNetCore.SignalR; +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; -using Microsoft.AspNetCore.SignalR; +using Microsoft.CodeAnalysis.CSharp.Syntax; namespace DSACore.Hubs { @@ -21,6 +21,8 @@ namespace DSACore.Hubs static ChatHub() { DSAGroups = Database.GetGroups().Result; + DSAGroups.Add(new Group("login", "")); + DSAGroups.Add(new Group("online", "")); //AddGroups(); } @@ -34,26 +36,68 @@ namespace DSACore.Hubs public async Task SendMessage(string user, string message) { - var args = message.Split(' ', StringSplitOptions.RemoveEmptyEntries).ToList(); - var ident = args.First().Replace("!", ""); - if(args.Count>0){args.RemoveAt(0);} - try { string group = getGroup(Context.ConnectionId).Name; - await SendToGroup(Commands.CommandHandler.ExecuteCommand(new Command { CharId = 0, CmdIdentifier = ident, CmdTexts = args, Name = user })); } - catch(InvalidOperationException e) + catch (InvalidOperationException e) { - await Clients.Caller.SendCoreAsync("ReceiveMessage", new object[] {"Nutzer ist in keiner Gruppe. Erst joinen!"}); + //await Clients.Caller.SendCoreAsync("RecieveMessage", + // new object[] { "Nutzer ist in keiner Gruppe. Erst joinen!" }); } - + + if (message[0] == '/') + { + var args = message.Split(' ', StringSplitOptions.RemoveEmptyEntries).ToList(); + + + var ident = args.First().Replace("/", ""); + if (args.Count > 0) + { + args.RemoveAt(0); + } + + var ret = Commands.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("RecieveMessage", ret.message); + break; + case ResponseType.Broadcast: + await SendToGroup(ret.message); + break; + } + + + } + else + { + await SendToGroup(message); + } + } private Task SendToGroup(string message) { - string group = getGroup(Context.ConnectionId).Name; - return Clients.Group(group).SendCoreAsync("ReceiveMessage", new object[] { getUser(Context.ConnectionId).Name, message }); + try + { + string group = getGroup(Context.ConnectionId).Name; + return Clients.Group(group).SendCoreAsync("RecieveMessage", + new object[] {getUser(Context.ConnectionId).Name, message}); + } + catch (InvalidOperationException e) + { + return Clients.Caller.SendCoreAsync("RecieveMessage", + new object[] { "Nutzer ist in keiner Gruppe. Erst joinen!" }); + } } private Models.Network.Group getGroup(string id) @@ -78,16 +122,16 @@ namespace DSACore.Hubs } } - 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}; + var Dgroup = new DSACore.Models.Database.Group { Name = group, Id = DSAGroups.Count - 1 }; //Database.AddGroup(Dgroup); - await Clients.Caller.SendCoreAsync("ReceiveMessage", new[] {$"group {@group} sucessfully added"}); + await Clients.Caller.SendCoreAsync("RecieveMessage", new[] { $"group {@group} sucessfully added" }); //throw new NotImplementedException("add database call to add groups"); } @@ -102,14 +146,17 @@ namespace DSACore.Hubs 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)); 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("LoginResponse", 0); + await Clients.Caller.SendAsync("PlayerStatusChanged", new[] {user, "online"}); } else { @@ -119,7 +166,7 @@ namespace DSACore.Hubs else { await Clients.Caller.SendAsync("LoginResponse", 2); - await Clients.Caller.SendAsync("ReceiveMessage", "Falsches Passwort!"); + //await Clients.Caller.SendAsync("RecieveMessage", "Falsches Passwort!"); } } @@ -129,22 +176,35 @@ namespace DSACore.Hubs 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() { - try + await Groups.RemoveFromGroupAsync(Context.ConnectionId, "online"); + if (DSAGroups.Exists(x => x.Users.Exists(y => y.ConnectionId == Context.ConnectionId))) { - var group = getGroup(Context.ConnectionId); + try + { + var group = getGroup(Context.ConnectionId); - var user = getUser(Context.ConnectionId); - 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; + 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; + } } } |