using System; using System.Collections.Generic; using System.Text; using System.Threading.Tasks; using Microsoft.AspNetCore.SignalR.Client; using Microsoft.Extensions.DependencyInjection; namespace squirrowse.client { public class ConnectionManager : IConnectionManager { private readonly HubConnection _connection; public bool Connected; public ConnectionManager(string url, int port) { _connection = new HubConnectionBuilder() .WithUrl($"{url}:{port}/hub") .WithAutomaticReconnect() .AddMessagePackProtocol() .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(); Connected = true; } public async Task Disconnect() { if (_connection.State == HubConnectionState.Disconnected) throw new Exception(); await _connection.StopAsync(); Connected = false; } public bool IsConnected() { return Connected; } } public interface IConnectionManager { Task GetConnection(); Task InitConnection(); Task Disconnect(); bool IsConnected(); } }