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