using System; using System.Threading.Tasks; using Microsoft.AspNetCore.SignalR.Client; using Microsoft.Extensions.DependencyInjection; namespace Squirrowse.Client.Service { 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() { if (_connection.State == HubConnectionState.Connected) return; await _connection.StartAsync(); await RegisterOnHub(); Connected = true; } public async Task Disconnect() { if (_connection.State == HubConnectionState.Disconnected) throw new Exception(); await _connection.StopAsync(); Connected = false; } private async Task RegisterOnHub() { await _connection.SendAsync("AddUser", Environment.UserName); } } }