XMPP: AngularJs + Strophe.js

У меня есть базовый клиент XMPP, работающий на strophe.js.

При входе в систему я создаю такие обработчики, как

connect = new Strophe.Connection('http://localhost/http-bind');
...
...

    connect.addHandler(on_message, null, "message", "chat");
    connect.addHandler(on_presence, null, "presence");

...
...

а потом я "слушаю" тех

function on_presence(presence) {
// handling presence
}

function on_message(presence) {
// handling presence
}

Поэтому я пытаюсь "преобразовать" его в AngularJS. Первая часть довольно проста. У меня есть контроллер, который прекрасно обрабатывает часть входа в систему:

angular.module('app').controller('loginCtrl', function($scope) {
connect = new Strophe.Connection('http://website.com/http-bind');

connect.connect(data.jid, data.password, function (status) {
  if (status === Strophe.Status.CONNECTED) {
    connect.addHandler(on_message, null, "message", "chat");
    connect.addHandler(on_presence, null, "presence");
  }
}
})

Но как мне начать слушать эти события (on_message, on_presence) в контексте angular на всех контроллерах, которые у меня есть.

3 ответа

Решение

Как предложено выше (или ниже), я обернул strophe в сервис, так что мой "механизм" входа в систему выглядит так:

.controller('loginCtrl', function(xmppAuth) {

    xmppAuth.auth(login, password);

})

любой мой сервис:

.service('xmppAuth', function() {

return {

auth: function(login, password) {
   connect = new Strophe.Connection('http://mydomain.net/http-bind');
   connect.connect(login, password, function (status) {
       if (status === Strophe.Status.CONNECTED) {
           // we are in, addHandlers and stuff
       }
   }
}

}

})

Оберните Strophe в угловую службу. Службы Angular предназначены для использования в качестве синглетонов, поэтому вы сможете один раз создать экземпляр службы Strophe и использовать ее везде (с помощью внедрения зависимостей).

Или, может быть, вы можете создать модуль для Strophe, а затем включить модуль в свое приложение, а затем включить strophe в качестве переменной, где бы вы ни захотели его использовать.

Другие вопросы по тегам