SignalR - создание экземпляра класса при подключении клиента

Использую библиотеку SignalR, хочу с помощью веб-сокетов сделать веб терминал для подключения к удаленным устройствам(которые работают только на протоколе telnet). Для того чтобы удерживать постоянное подключение был необходим веб-сокет сервер ASP.Net core с библиотекой SignalR.

Как можно создать экземпляр класса при подключении клиента к веб терминалу, а при отключении удалить этот экземпляр. Метод OnConnectedAsync срабатывает при подключении клиента, а OnDisconnectedAsync при отключении.

public class ChatHub : Hub
{
    
    public override async Task OnConnectedAsync()
    {
        await Groups.AddToGroupAsync(Context.ConnectionId, "SignalR Users");
        await base.OnConnectedAsync();
    }

    public override async Task OnDisconnectedAsync(Exception exception)
    {
        await base.OnDisconnectedAsync(exception);
    }

    public Task SendMessageToCaller(string user, string message)
    {
        return Clients.Caller.SendAsync("ReceiveMessage", user, message);
    }
}

Для подключение к устройствам использовался протокол Telnet и библиотека Telnet. Класс:


 public class TelnetConnection
{
    int Taimaut = 7000;
    string ip = "";
    Client client;

    public TelnetConnection(string ip)
    {
        try
        {
            ConnectionDeviceAsync(ip);
        }
        catch
        {
            Console.WriteLine("Error program: Login failed!");
        }
    }

    async void ConnectionDeviceAsync(string ip)
    {
        client = new Client(ip, 23, CancellationToken.None);
        bool invalid_cheak = await client.TryLoginAsync("login123", "pass123", Taimaut, "#", "\n"); //login and pass send
    }

    public async void SendTelnetMessage(string message)
    {
       await client.WriteLine(message);
    }

    public async Task<string> GetTelnetMessage()
    {
        return await client.TerminatedReadAsync(new Regex("#$|<space>|--More--"), TimeSpan.FromMilliseconds(Taimaut));
    }
}

Ответы (0 шт):