2014-06-21 2 views
4

strophe.js에서 작동하는 기본 XMPP 클라이언트가 있습니다. 로그인에XMPP : AngularJs + Strophe.js

나는 그런

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

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

... 
... 

하고 내가 그래서 AngularJS와로를 "변환"하려고하는

function on_presence(presence) { 
// handling presence 
} 

function on_message(presence) { 
// handling presence 
} 

에 "수신"같은 핸들러를 만듭니다. 첫 번째 부분은 매우 간단합니다. 나는 잘 로그인 부분을 처리하는 컨트롤러가 있습니다

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)을 듣고 시작 않습니다.

+0

안녕, 나는 일하고 비슷한 문제. 이 일을 할 수 있었습니까? Socket.io에 각도 래퍼가 있으므로 Strophe.js 대신 Socket.io를 고려한 적이 있습니까? –

+0

내 대답을 참조하십시오. – mikek

답변

6

:

어떤 내 서비스
.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 
     } 
    } 
} 

} 

}) 
7

랩 스트로 프 Angular Service. Angular Services는 싱글 톤으로 사용하기위한 것이므로 Strophe Service를 한 번 인스턴스화하고 어디서나 사용할 수 있습니다 (Dependency Injection 사용).

0

또는 Strophe 용 모듈을 만든 다음 해당 모듈을 앱에 포함시킨 다음 사용하고자하는 위치에 변수로 포함 할 수 있습니다. (또는 울부 짖는 소리) 난 그렇게 "메커니즘"내 로그인이 보이는 서비스에서 좌향 선회 랩 위의 제안으로

관련 문제