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