summaryrefslogtreecommitdiff
path: root/DSACore/Hubs
diff options
context:
space:
mode:
Diffstat (limited to 'DSACore/Hubs')
-rw-r--r--DSACore/Hubs/ChatHub.cs126
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;
+ }
}
}