Привет! В этой статье мы рассмотрим вопрос переноса консольного веб-сокетного (WS) приложения с C на Delphi с помощью компонентов Input Component Suite (ICS), включая работу со SSL и настройку событий. Мы также представим альтернативное решение для случаев, когда стандартные методы не работают.
Проблема
При переносе консольного WS-приложения с C на Delphi с использованием ICS, TSslWebSocketCli и TSslContext могут возникнуть проблемы с настройкой событий и работой с SSL. Кроме того, может потребоваться дополнительная настройка для правильного форматирования URL-адреса подключения.
Решение
Для решения этих проблем мы будем использовать компоненты ICS и настраивать их соответствующим образом. Ниже приведены шаги по настройке событий и работы со SSL:
Настройка событий:
Для настройки событий в консольном приложении необходимо явно вызывать метод MessagePump после операций, связанных с сетью. Это гарантирует, что события будут обработаны корректно.
constructor TMyWSComms.Create(AOwner: TComponent);
begin
inherited create(AOwner);
Sslcontext := TSslContext.create;
SslEnable := True;
Sslcontext.SslVerifyPeer := True;
addr := 192.168.100.40;
port := 443;
path := '/ws/interface';
// Настройка событий
OnSessionConnected := MyOnSessonConnected;
OnSessionClosed := MyOnSessonClosed;
OnStateChanged := MyOnStateChanged;
OnSslVerifyPeer := MySslVerifyPeer;
// Вызов MessagePump после настройки событий
FHttpCli.MessageLoop;
end;
Работа со SSL:
При использовании TSslWebSocketCli нет необходимости создавать и настраивать отдельный экземпляр TSslContext. Компонент уже имеет встроенный TSslContext, который можно использовать для настройки параметров SSL.
Форматирование URL-адреса:
Для подключения к WS-серверу с использованием ICS необходимо указать адрес, порт и путь в правильном формате. Это можно сделать, назначив значения свойствам addr, port и path.
addr := '192.168.100.40';
port := 443;
path := '/ws/interface';
Альтернативное решение: использование TSslWSocket и TSslContext
Если стандартные методы настройки событий и работы со SSL в TSslWebSocketCli не работают, можно использовать более низкоуровневые компоненты TSslWSocket и TSslContext. Для этого потребуется явно создавать и настраивать экземпляр TSslContext, а также назначать классовые процедуры для событий.
constructor TMyWSComms.Create(AOwner: TComponent);
begin
inherited create(AOwner);
Sslcontext := TSslContext.create;
SslEnable := True;
Sslcontext.SslVerifyPeer := True;
addr := '192.168.100.40';
port := 443;
// Настройка событий
OnSessionConnected := MyOnSessonConnected;
OnSessionClosed := MyOnSessonClosed;
OnStateChanged := MyOnStateChanged;
OnSslVerifyPeer := MySslVerifyPeer;
// Создание и настройка TSslWSocket
FSocket := TSslWSocket.create(nil);
with FSocket do
begin
SslContext := Sslcontext;
Host := addr;
Port := port;
Path := path;
OnConnected := MyOnConnected;
OnDisconnected := MyOnDisconnected;
Connect;
end;
// Вызов MessagePump после настройки компонентов
FSocket.MessageLoop;
end;
При использовании TSslWSocket и TSslContext важно правильно назначить классовые процедуры для событий и вызывать метод MessagePump после настройки компонентов.
Заключение
В этой статье мы рассмотрели проблему переноса консольного WS-приложения с C на Delphi с помощью ICS, SSL и событий. Мы представили стандартное решение с использованием TSslWebSocketCli и альтернативное решение с использованием TSslWSocket и TSslContext. При правильной настройке этих компонентов можно добиться корректной работы консольного WS-приложения в Delphi.
Не стесняйтесь задавать вопросы или делиться своим опытом в комментариях!
Эта статья рассказывает о переносе консольного веб-сокетного (WS) приложения с языка C на Delphi с использованием компонентов Input Component Suite (ICS), включая настройку событий и работу со SSL.
Комментарии и вопросы
Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS