openfire strophejs 群聊

strophejs一直不会用,导致创建房间总是不成功,几经尝试终于可以了,代码如下:

参考了https://www.cnblogs.com/wucao/p/4223169.html的文章,感谢感谢

还有以下这些网址:

http://strophe.im/strophejs/doc/1.2.14/files/strophe-js.html

https://xmpp.org/extensions/xep-0045.html#createroom

还有一些stackoverflaw上面大神的回答,找不到了,就不贴了

// XMPP服务器BOSH地址
var BOSH_SERVICE = 'http://192.168.100.114:7070/http-bind/';


// 房间JID
var ROOM_JID = '[email protected]';


// XMPP连接
var connection = null;


// 当前状态是否连接
var connected = false;


// 当前登录的JID
var jid = "";


// 连接状态改变的事件
function onConnect(status) {
if(status == Strophe.Status.CONNFAIL) {
alert("连接失败!");
} else if(status == Strophe.Status.AUTHFAIL) {
alert("登录失败!");
} else if(status == Strophe.Status.DISCONNECTED) {
alert("连接断开!");
connected = false;
} else if(status == Strophe.Status.CONNECTED) {
alert("连接成功,可以开始聊天了!");
connected = true;


// 当接收到<message>节,调用onMessage回调函数
connection.addHandler(onMessage, null, 'message', null, null, null);


// 首先要发送一个<presence>给服务器(initial presence)
connection.send($pres().tree());


// 发送<presence>元素,加入房间
connection.send($pres({
from: jid,
to: ROOM_JID + "/" + jid.substring(0, jid.indexOf("@"))
}).c('x', { xmlns: 'http://jabber.org/protocol/muc' }).tree());

//创建群
//创建iq
var iq = $iq({
to: ROOM_JID,
type: 'set'
}).c("query", {
xmlns: 'http://jabber.org/protocol/muc#owner'
});
iq.c("x", {
xmlns: "jabber:x:data",
type: "submit"
});


//send configuration you want
//iq.c('field', { 'var': 'FORM_TYPE' }).c('value').t('http://jabber.org/protocol/muc#roomconfig').up().up();
//iq.c('field', { 'var': 'muc#roomconfig_publicroom' }).c('value').t('1').up().up();


connection.sendIQ(iq.tree(), function() { alert('success'); }, function(err) { console.log('error', err); });

//

}
}


// 接收到<message>
function onMessage(msg) {
//这里是message消息处理

console.log(msg);
// 解析出<message>的from、type属性,以及body子元素
var from = msg.getAttribute('from');
var type = msg.getAttribute('type');
var elems = msg.getElementsByTagName('body');
var msgtype = msg.getElementsByTagName("msgtype");
if(type == "groupchat" && elems.length > 0 && msgtypes == undefined) {
var body = elems[0];
$("#msg").append(from.substring(from.indexOf('/') + 1) + ":<br>" + Strophe.getText(body) + "<br>")
} else if(type != "groupchat" && elems.length > 0) {
var body = elems[0];
if(body != null && body != '') {
$("#msg").append("系统通知" + ":<br>" + Strophe.getText(body) + "<br>")
}
} else if(type == "groupchat") {
var msgtypes = msg.getElementsByTagName("msgtype");
var msgtype = Strophe.getText(msgtypes[0])
var dates = msg.getElementsByTagName('date');
var date = dates[0];
if(msgtype == 111) {
var eventids = msg.getElementsByTagName('eventid');
var eventid = eventids[0];
var messages = msg.getElementsByTagName('msg');
var message = messages[0];
$("#msg").append(from.substring(from.indexOf('/') + 1) + ":<br>案件id:" + Strophe.getText(eventid) +
"<br>日期:" + Strophe.getText(date) + "<br>消息内容:" + Strophe.getText(message) + "<br>");
} else if(msgtype == 112) {
var picurls = msg.getElementsByTagName('url');
var picurl = picurls[0];
$("#msg").append(from.substring(from.indexOf('/') + 1) + ":<br>日期:" + Strophe.getText(date) + "<br>图片:<img src='" + Strophe.getText(picurl) + "'/><br>");
} else if(msgtype == 113) {
var audioUrls = msg.getElementsByTagName('url');
var audioUrl = audioUrls[0];
$("#msg").append(from.substring(from.indexOf('/') + 1) + ":<br>日期:" + Strophe.getText(date) + "<br><a href='" + Strophe.getText(audioUrl) + "'>文件地址</a><br>");
} else if(msgtype == 114) {
var videourls = msg.getElementsByTagName('url');
var videourl = videourls[0];
$("#msg").append(from.substring(from.indexOf('/') + 1) + ":<br>日期:" + Strophe.getText(date) + "<br><a href='" + Strophe.getText(videourl) + "' >文件地址</a><br>");
} else if(msgtype == 115) {
var eventids = msg.getElementsByTagName('eventid');
var eventid = eventids[0];
var messages = msg.getElementsByTagName('msg');
var message = messages[0];
$("#msg").append(from.substring(from.indexOf('/') + 1) + ":<br>案件id:" + Strophe.getText(eventid) +
"<br>日期:" + Strophe.getText(date) + "<br>消息内容:" + Strophe.getText(message) + "<br>");
} else {
var eventids = msg.getElementsByTagName('eventid');
var eventid = eventids[0];
var messages = msg.getElementsByTagName('msg');
var message = messages[0];
$("#msg").append(from + ":<br>案件id:" + Strophe.getText(eventid) +
"<br>日期:" + Strophe.getText(date) + "<br>消息内容:" + Strophe.getText(message) + "<br>");
}
}
return true;
}


$(document).ready(function() {

//下线
    $('#btn-off').click(function() {
        if(connected) {
            connection.disconnect("下线了");
            connected = false;
        }
    });
    
    //离开房间
     $('#leave').click(function() {
       connection.send($pres({
from: jid,
to: ROOM_JID + "/" + jid.substring(0, jid.indexOf("@")),
type:"unavailable"
}).c('status', null,'comment').tree());
    });


// 通过BOSH连接XMPP服务器
$('#btn-login').click(function() {
if(!connected) {
connection = new Strophe.Connection(BOSH_SERVICE);
connection.connect($("#input-jid").val(), $("#input-pwd").val(), onConnect);
jid = $("#input-jid").val();
}
});


//下线
$('#btn-off').click(function() {
if(connected) {
connection.disconnect("下线了");
}
});

// 发送spark类型消息
$("#btn-sendspark").click(function() {
if(connected) {


// 创建一个<message>元素并发送
var msg = $msg({
to: ROOM_JID,
from: jid,
type: 'groupchat'
}).c("body", null, $("#input-msg").val());
connection.send(msg.tree());
$("#input-msg").val('');
$("#msg").append(jid + ":<br>" + $("#input-msg").val() + "<br>");
} else {
alert("请先登录!");
}
});
});

猜你喜欢

转载自blog.csdn.net/gx1230123/article/details/80002970