using System; using System.Threading.Tasks; using Microsoft.AspNetCore.SignalR.Client; using Microsoft.Extensions.DependencyInjection; using Squirrowse.Core.Models; namespace Squirrowse.Core.Services { public class ConnectionManager : IConnectionManager { private readonly HubConnection _connection; private bool Connected; public ConnectionManager(string url, int port) { _connection = new HubConnectionBuilder() .WithUrl($"{url}:{port}/StreamHub") .AddMessagePackProtocol() .WithAutomaticReconnect() .Build(); } public async Task GetConnection() { if (Connected) return _connection; throw new Exception(); } public async Task InitConnection(ConnectionType type) { if (_connection.State == HubConnectionState.Connected) return; await _connection.StartAsync(); // await RegisterOnHub(type); await SpamHub(type); Connected = true; } public async Task Disconnect() { if (_connection.State == HubConnectionState.Disconnected) throw new Exception(); await _connection.StopAsync(); Connected = false; } private async Task RegisterOnHub(ConnectionType type) { await _connection.SendAsync("AddUser", Environment.UserName,type); } #warning debug private async Task SpamHub(ConnectionType type) { for (int i = 0; i < 100; i++) { await _connection.SendAsync("AddUser", Environment.UserName + $"{DateTime.Now}", type); } } } }