TIdTCPServer
- многопоточный компонент. Доступ к пользовательскому интерфейсу непосредственно из его события OnConnect
(или OnDisconnect
, OnExecute
, или OnException
) не является потокобезопасным! Для безопасного доступа к пользовательскому интерфейсу вам необходимо использовать класс Indi's TIdSync
или TIdNotify
.
Чтобы ответить на исходный вопрос, самым простым, но не обязательно самым безопасным способом является сохранение указателя объекта TIdContext.Connection
в свойстве TListItem.Data
. После этого основной код потока будет иметь прямой доступ к соединению, когда он ему понадобится.
Я не советую, хотя. Более безопасное решение - однозначно идентифицировать каждого клиента самостоятельно, например, с именем пользователя, которое отправляет клиент, и сохранить этот идентификатор в свойствах TIdContext.Data
и TListItem.Data
. Затем, когда ваш код основного потока хочет отправить сообщение клиенту, он может пройти через список TIdTCPServer.Contexts
, ища желаемый идентификатор, и если он будет найден, он будет иметь доступ к соответствующему объекту TIdContext.Connection
.
можете ли вы разместить код? – ComputerSaysNo
@DorinDuminica Готов, код добавлен! –