using Microsoft.Extensions.Configuration; using MinecraftStatus; using VeloeMonitorDataCollector.Dependencies; using VeloeMonitorDataCollector.Models; using Microsoft.AspNetCore.Builder; using Microsoft.AspNetCore.Hosting; using Microsoft.Extensions.DependencyInjection; using Microsoft.AspNetCore.SignalR; using System.Text.Json; using Serilog; using System.Net; using static System.Runtime.InteropServices.JavaScript.JSType; using System; namespace VeloeMonitorDataCollector.DatabaseConnectors { internal class SignalRConnector : IDataSendable { WebApplication app; public SignalRConnector(in IConfigurationSection section, in Serilog.ILogger logger) { string url = section["url"]; if (string.IsNullOrEmpty(url)) url = "http://*:5000"; var builder = WebApplication.CreateBuilder(); builder.WebHost.UseUrls(url); builder.Services.AddSignalR(); builder.Services.AddSingleton(); builder.Host.UseSerilog(logger); app = builder.Build(); app.MapHub("/hubs/data"); app.RunAsync(); } public bool CheckGameServer(in string name, in string type) { return true; } public bool CheckHardware(in Dictionary input) { return true; } public void Close() { app.StopAsync(); } public void SendGamespy3(in Gs3Status.Status data, in string name) { app.Services.GetService().SendGamespy3(data, name); } public void SendGamespy2(in Gs2Status.Status data, in string name) { app.Services.GetService().SendGamespy2(data, name); } public void SendHardware(in Dictionary data) { app.Services.GetService().SendHardware(data); } public void SendMinecraft(in McStatus data, in string name) { app.Services.GetService().SendMinecraft(data, name); } public void SendSteam(in SteamData data, in string name) { app.Services.GetService().SendSteam(data, name); } public void SendUrl(HttpWebResponse data, string name) { app.Services.GetService().SendUrl(data, name); } } public class DataSender { IHubContext _hubContext; Serilog.ILogger _logger; public DataSender(IHubContext hubContext, ILogger logger) { _hubContext = hubContext; _logger = logger; } public void SendGamespy3(in Gs3Status.Status data, in string name) { _hubContext.Clients.Groups(name).SendAsync($"Update{name}",JsonSerializer.Serialize(data)); } public void SendGamespy2(in Gs2Status.Status data, in string name) { _hubContext.Clients.Groups(name).SendAsync($"Update{name}", JsonSerializer.Serialize(data)); } public void SendHardware(in Dictionary data) { _hubContext.Clients.Groups("hardware").SendAsync($"Update", JsonSerializer.Serialize(data)); } public void SendMinecraft(in McStatus data, in string name) { _hubContext.Clients.Groups(name).SendAsync($"Update{name}", JsonSerializer.Serialize(data)); } public void SendSteam(in SteamData data, in string name) { _hubContext.Clients.Groups(name).SendAsync($"Update{name}", JsonSerializer.Serialize(data)); } internal void SendUrl(HttpWebResponse data, string name) { _hubContext.Clients.Groups(name).SendAsync($"Update{name}", JsonSerializer.Serialize(data)); } } public class DataHub : Hub { public async Task SendMessage(string user, string message) { await Clients.All.SendAsync("ReceiveMessage", user, message); } public async Task ConnectToGroup(string groupName) { await Groups.AddToGroupAsync(Context.ConnectionId, groupName); } public async Task DisconnectFromGroup(string groupName) { await Groups.RemoveFromGroupAsync(Context.ConnectionId, groupName); } } }