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 в качестве переменной, где бы вы ни захотели его использовать.