summaryrefslogtreecommitdiff
path: root/DSACore/Hubs
diff options
context:
space:
mode:
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