Запрос подписки JsJAC с ником - PullRequest
0 голосов
/ 12 июля 2011

Я занимаюсь разработкой внутренней системы чата с использованием OpenFire и JsJAC.Я хотел, чтобы все, вошедшие в систему, автоматически дружили друг с другом, но поскольку нет хорошего способа автоматически подружить всех, я решил воспользоваться плагином подписки и отправить запрос на подписку всем, кто не входит в ваш список.Плагин подписки автоматически принимает запрос.

Это работает сейчас, однако я не могу установить псевдоним для новой записи в реестре.

Вот код, который я использую:

    //Send friend request
    var subscribe_packet = "<presence to='"+this.sender+"@"+chatManager.args()['domain']+"' from='"+chatManager.args()['username']+"@"+chatManager.args()['domain']+"' type='subscribe'>";
    subscribe_packet += "<nick xmlns='http://jabber.org/protocol/nick'>TestTest</nick>";
    subscribe_packet += "</presence>";

    console.log("Subscribe packet: "+subscribe_packet);
    con._sendRaw(subscribe_packet);

В качестве примера приводится следующий вывод XML:

<presence to='targetuser@domain.com' from='sourceuser@domain.com'><nick xmlns='http://jabber.org/protocol/nick'>TestTest</nick></presence>

Отправляет запрос на подписку, но псевдоним либо не отправлен, либо неправильно интерпретирован OpenFire.

Есть мысли?

Ответы [ 2 ]

1 голос
/ 06 сентября 2012

Это заняло у меня целую вечность, чтобы найти! Я использовал xmpphp, но получил решение от использования jquery Strophe.

Сначала сделайте:

<iq type='set' xmlns='jabber:client' id='9155:sendIQ'>
        <query xmlns='jabber:iq:roster'>
                <item jid='user@localhost' name='usernickname'/>
        </query>
</iq>

Далее:

<presence to='user@localhost' type='subscribe' xmlns='jabber:client'/>

Затем переименовать снова:

* * 1010

Надеюсь, это поможет, потому что я использовал тот же XML, который вы использовали выше, и это не сработало.

0 голосов
/ 14 июля 2011

Джейсон, XEP 0172 не включает никаких действий, предпринимаемых сервером.Вы должны заставить своего клиента иметь дело с псевдонимом.Для этого проверьте наличие псевдонима при получении запроса на подписку, а затем используйте этот псевдоним при добавлении нового подписанного пользователя в свой список.

Кстати: использовать _sendRaw не рекомендуется (это закрытый метод, Таким образом _).Более чистым решением было бы расширить прототип JSJaCPresence с помощью методов getNickname и setNickname.

...