Squirrowse/Squirrowse.Core/Services/ConnectionManager.cs
2019-11-06 22:34:02 +01:00

52 lines
1.4 KiB
C#

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<HubConnection> 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);
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);
}
}
}