Я работаю с Ejabberd и Orbited, и у меня возникли некоторые проблемы с не вызываемыми функциями обратного вызова JavaScript. Ниже приведен мой файл JavaScript, в котором происходит соединение TCPSocket, и у меня есть две функции обратного вызова, а именно
onSocketConnect
: который вызывается, когда Orbited установил соединение с портом 5222 сервера XMPP и
onLoginSuccess
: который вызывается при успешном завершении функции xmpp_client.login
Проблема, с которой я сталкиваюсь, заключается в том, что соединение происходит успешно, но мои обратные вызовы вызываются только тогда, когда я использую FireFox, а не при использовании Safari или Chrome. Я совершенно не знаю, что является причиной этой проблемы, но я уверен, что метод xmpp_client.login
действительно вызывается, потому что пользователь вошел в систему и отображается как онлайн в консоли администратора ejabberd.
TCPSocket = Orbited.TCPSocket;
Orbited.settings.port = 8000;
Orbited.settings.hostname = 'localhost';
document.domain = document.domain;
<script src='http://localhost:8000/static/protocols/xmpp/xmpp.js'></script>
//xmpp.js file is included after this which is available with the Orbited. I have not included the code here.
<% if current_user %>
<script>
notifier = ' ';
user = "<%= current_user.jabber_id %>";
alert(user);
password = '123456';
domain = XMPPDOMAIN;
/* function onLoginSuccess(){
$('.status').html("Connected and Logged In");
xmpp_client.set_presence('available');
} */
var onLoginSuccess = function(){
$('.status').html("Connected and Logged In");
}
function onLoginFailure(){
alert('User could not be logged in');
}
function connectSuccess(){
$('.status').html("Connection Successful.");
}
function connectFailure(){
$('.status').html("Connection Failed!");
}
function onSetupNotification(){}
xmpp_client = new XMPPClient();
xmpp_client.connect('localhost',5222);
xmpp_client.onPresence = function(ntype, from) {
alert('Presence message' + ntype + ' From :' + from)
}
xmpp_client.onSocketConnect = function(domain, connectSuccess, connectFailure){
var domain = XMPPDOMAIN;
$('.status').html('Connected');
alert(user);
if(domain)
{
xmpp_client.connectServer(domain, connectSuccess, connectFailure);
xmpp_client.login(user, password, onLoginSuccess, onLoginFailure);
xmpp_client.set_presence('available');
}
}
function send_message(id, msg){
var j_id = id + '@' + 'siddharth-ravichandrans-macbook-pro.local';
alert('jid_id' + j_id);
var status = xmpp_client.msg(j_id, msg);
alert(status);
}
xmpp_client.onMessage = function(jid, username, text) {
alert('message-recieved');
if ( $('.discussion-area').length > 0 ){
$('.discussion-area').append('<div class=\'new-message\'>' + text + '</div>');
return false;
}
}
/* self.login = function(nick, pass, s, f) {
conn.onread = setUser;
success = s;
failure = f;
user = nick;
bare_jid = nick + "@" + domain;
full_jid = bare_jid + "/Orbited";
self.send(construct(LOGIN, [user, pass]));
}
self.set_presence = function(status, status_msg) {
self.send(EXT_PRESENCE[0] + full_jid + EXT_PRESENCE[1] + room_jid + EXT_PRESENCE[3] + status + EXT_PRESENCE[4] + status_msg + EXT_PRESENCE[5]);
}
*/
</script>
<% end %>
Это часть xmpp.js, которую я получил, когда установил на орбиту, и чтобы проверить, действительно ли мои запросы достигли, я добавил предупреждение в метод входа в систему следующим образом
...
...
self.login = function(nick, pass, s, f) {
conn.onread = setUser;
success = s;
failure = f;
user = nick;
bare_jid = nick + "@" + domain;
full_jid = bare_jid + "/Orbited";
self.send(construct(LOGIN, [user, pass]));
alert("bazingaa");
}
self.connectServer = function(d, s, f) {
success = s;
failure = f;
doma
...
...
Теперь я понятия не имею, как это получило мои обратные вызовы, и буду очень признателен за помощь.
Спасибо
На самом деле я обнаружил, что удаление xmpp_client.set_presence и перемещение его в onLoginSuccess - это то, что, кажется, добилось цели. В ту минуту, когда я добавляю метод set_presence после вызова метода login, в chrome происходит сбой функциональности. Так почему же это препятствует вызову обратного вызова при успешном входе в систему?
var onLoginSuccess = function(){
$('.status').html("Connected and Logged In");
xmpp_client.set_presence('available');
}
xmpp_client.onSocketConnect = function(domain, connectSuccess, connectFailure){
var d = "";
$('.status').html('Connected');
xmpp_client.connectServer(d, connectSuccess, connectFailure);
xmpp_client.login(user, password, onLoginSuccess, onLoginFailure);
//xmpp_client.set_presence('available');
}
Помощь!