From 6fed61be4a31f71d314dfb71a763865abb6c37c3 Mon Sep 17 00:00:00 2001 From: ziomus5555 Date: Sat, 2 Nov 2019 20:36:31 +0100 Subject: [PATCH] stream hub manager prepare Interface for future hub development --- Squirrowse.Core/Models/Groups.cs | 13 +++++ Squirrowse.Service/Hubs/IStreamHub.cs | 11 ++++- Squirrowse.Service/Hubs/StreamHub.cs | 51 +++++++++++++++++++- Squirrowse.Service/IUserProvider.cs | 12 +++++ Squirrowse.Service/Squirrowse.Service.csproj | 4 ++ Squirrowse.Service/UserProvider.cs | 15 ++++++ 6 files changed, 103 insertions(+), 3 deletions(-) create mode 100644 Squirrowse.Core/Models/Groups.cs create mode 100644 Squirrowse.Service/IUserProvider.cs create mode 100644 Squirrowse.Service/UserProvider.cs diff --git a/Squirrowse.Core/Models/Groups.cs b/Squirrowse.Core/Models/Groups.cs new file mode 100644 index 0000000..8285440 --- /dev/null +++ b/Squirrowse.Core/Models/Groups.cs @@ -0,0 +1,13 @@ +using System; +using System.Collections.Generic; +using System.Text; + +namespace Squirrowse.Core.Models +{ + public enum Groups + { + debug=-1, + normal, + superUser + } +} diff --git a/Squirrowse.Service/Hubs/IStreamHub.cs b/Squirrowse.Service/Hubs/IStreamHub.cs index b73fa0b..81fb63c 100644 --- a/Squirrowse.Service/Hubs/IStreamHub.cs +++ b/Squirrowse.Service/Hubs/IStreamHub.cs @@ -1,10 +1,19 @@ -using System.Collections.Generic; +using Squirrowse.Core.Models; +using System; +using System.Collections.Generic; using System.Threading.Tasks; namespace Squirrowse.Service.Hubs { public interface IStreamHub { + Task AddClient(); Task UploadByteStream(IAsyncEnumerable stream); + Task Startstream(string userId); + Task StopStream(string userId); + Task ExecCommandOnAll(string command,object[] act);//gni + Task AddToGroup(Groups group,string user=""); + Task RemoveFromGroup(Groups group,string user=""); + } } \ No newline at end of file diff --git a/Squirrowse.Service/Hubs/StreamHub.cs b/Squirrowse.Service/Hubs/StreamHub.cs index 0db5054..fab0661 100644 --- a/Squirrowse.Service/Hubs/StreamHub.cs +++ b/Squirrowse.Service/Hubs/StreamHub.cs @@ -6,17 +6,63 @@ using System.Threading.Tasks; using Microsoft.AspNetCore.SignalR; using Microsoft.Extensions.Logging; using NLog; +using Squirrowse.Core.Models; namespace Squirrowse.Service.Hubs { - public class StreamHub : Hub, IStreamHub + public class StreamHub : Hub, IStreamHub //fujka { private readonly ILogger logger; - + public StreamHub(ILogger logger) { this.logger = logger; } + + public async Task AddClient() + { + throw new NotImplementedException(); + } + + public async Task AddToGroup(Groups group, string user = "") + { + string connectionId = string.IsNullOrWhiteSpace(user) ? Context.ConnectionId : user; + await Groups.AddToGroupAsync(connectionId, group.ToString()); + logger.LogInformation($"{nameof(AddToGroup)}: {connectionId} joined to {group}"); + } + /// + /// USE ONLY FOR DEBUG + /// + /// + /// DESTRUCTION + public async Task ExecCommandOnAll(string command,object[] act) + { + await Clients.All.SendCoreAsync(command,act); + } + + public async Task RemoveFromGroup(Groups group, string user = "") + { + + string connectionId = string.IsNullOrWhiteSpace(user) ? Context.ConnectionId : user; + await Groups.RemoveFromGroupAsync(connectionId, group.ToString()); + logger.LogInformation($"{nameof(AddToGroup)}: {connectionId} joined to {group}"); + } + + public async Task Startstream(string clientId) + { + var client = Clients.Client(clientId); + + await client.SendAsync("Start"); + } + + + public async Task StopStream(string clientId) + { + var client = Clients.Client(clientId); + + await client.SendAsync("Stop"); + } + public async Task UploadByteStream(IAsyncEnumerable stream) { await foreach (var frame in stream) @@ -25,5 +71,6 @@ namespace Squirrowse.Service.Hubs await Task.Delay(100); //leave some delay for debug purpose } } + } } diff --git a/Squirrowse.Service/IUserProvider.cs b/Squirrowse.Service/IUserProvider.cs new file mode 100644 index 0000000..6c98471 --- /dev/null +++ b/Squirrowse.Service/IUserProvider.cs @@ -0,0 +1,12 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Threading.Tasks; + +namespace Squirrowse.Service +{ + public interface IUserProvider + { + string GetUserId(); + } +} diff --git a/Squirrowse.Service/Squirrowse.Service.csproj b/Squirrowse.Service/Squirrowse.Service.csproj index 5d22ada..c705037 100644 --- a/Squirrowse.Service/Squirrowse.Service.csproj +++ b/Squirrowse.Service/Squirrowse.Service.csproj @@ -18,4 +18,8 @@ + + + + diff --git a/Squirrowse.Service/UserProvider.cs b/Squirrowse.Service/UserProvider.cs new file mode 100644 index 0000000..9b4279b --- /dev/null +++ b/Squirrowse.Service/UserProvider.cs @@ -0,0 +1,15 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Threading.Tasks; + +namespace Squirrowse.Service +{ + public class UserProvider : IUserProvider + { + public string GetUserId() + { + throw new NotImplementedException(); + } + } +}