Отправьте сообщение с типом = 'заголовок' независимо от того, включен ли JID.Заголовочные сообщения не должны храниться для последующей доставки, если получатель находится в автономном режиме.
Этот подход намного быстрее и более переносим, чем все, что вы можете сделать.
Если вы ДОЛЖНЫ сделать что-то другое в зависимости от того, находится ли пользователь в сети, вам нужно подписаться на присутствие этого пользователя:
<presence type='subscribe' from='my.component' to='user@domain'/>
Пользователь должен будет принять ваш запрос:
<presence type='subscribed' to='my.component' from='user@domain'/>
Пользователь также может подписаться обратно на ваш компонент:
<presence type='subscribe' to='my.component' from='user@domain'/>
Вы можете делать с ними то, что выбираете;самое простое, что можно сделать, это просто принять их:
<presence type='subscribe' from='my.component' to='user@domain'/>
Каждый раз, когда вам нужно их присутствие или каждый раз, когда запускается ваш компонент, ему нужно будет отправить запрос этому пользователю:
<presence type='probe' from='my.component' to='user@domain'/>
Затем вы вернете присутствие каждого из ресурсов пользователя.Невозможно сказать, когда вы закончите.Если вы хотите действовать, когда пользователь находится в автономном режиме, вам просто нужно выбрать значение тайм-аута, а затем остановить таймер, если вы получаете присутствие.Так как пользователь в любом случае находится в автономном режиме, дополнительная задержка обычно не представляет большой проблемы.
Обратите внимание, что если вы приняли подписку о присутствии пользователя выше, вы получите пробы от этого пользователя;Вы можете либо игнорировать их, либо ответить строфой присутствия, которая описывает ваше рабочее состояние.