Есть очень хорошая утилита под названием ttyd, которая позволяет запустить консольное приложение на вашем компьютере и выводить эту консоль в браузере.
После запуска утилита запускает http веб-сервер на заданном порту и при обращении к localhost отрывается сайт с веб-приложением, которое подключается с помощью веб-сокетов к адресу localhost:<порт>/ws, и уже с помощью них идет общение между веб-приложением и агентом ttyd, запущенным на компьютере.
Я хочу сделать, чтобы клиентом было не веб-приложение (JS), а программа на c#. Я изучил с помощью инструментов chrome, какие данные отправляет веб-приложение, перед получением данных выводимых в консоль. Это всего лишь строка:
{"AuthToken":"","columns":211,"rows":46}
и попробовал повторить те же действия в клиенте на c#. Но по какой-то причине, мне не возвращаются ни какие данные от ttyd.
Сравнивая данные выводимые ttyd в его консоль в самой ОС, видно, что он даже не создает процесс при обращении из моего клиента.
Я пробовал разные библиотеки для веб-сокетов на c#, так-же использовал postman с копированием всех заголовков, которые отправляет оригинальное веб-приложение агенту ttyd, но это ничего не меняет. То есть ttyd, что-то принципиально мешает, как будто мой веб-клиент не делает что-то, что делает браузер.
Вот код который я использую с пакетом
Websocket.Client
var exitEvent = new ManualResetEvent(false);
var url = new Uri("ws://localhost:7681/ws");
using (var client = new WebsocketClient(url))
{
client.ReconnectTimeout = TimeSpan.FromSeconds(30);
client.ReconnectionHappened.Subscribe(info =>
Console.WriteLine($"Reconnection happened, type: {info.Type}"));
client.MessageReceived.Subscribe(msg => Console.WriteLine($"Message received: {msg}"));
client.Start();
Task.Run(() => client.Send("{\"AuthToken\":\"\",\"columns\":211,\"rows\":46}"));
exitEvent.WaitOne();
}
У меня совсем нет идей даже в какую сторону можно копать, есть ли у вас предположения, какое действие, которое делает браузер я пропускаю в моем клиенте на c# ?