ejbberd 群聊

Ejbberd群聊 strophe.js 实现

<!DOCTYPE html>
<html>
<head>
	<script src='jquery-1.9.0.js'></script>
	<script src='strophe.min.js'></script>
	<script src='test.js'></script>
</head>
<body>
	JID:<input type="text" id="input-jid">
	<br>
	密码:<input type="password" id="input-pwd">
	<br>
	<button id="btn-login">登录</button>
	<div id="msg" style="height: 400px; width: 400px; overflow: scroll;"></div>
	<br>
	消息:
	<br>
	<textarea id="input-msg" cols="30" rows="4"></textarea>
	<br>
	<button id="btn-send">发送</button>
</body>
</html>

//test.js

var BOSH_SERVICE = 'Bosh服务器';
 
// 房间JID
var ROOM_JID = '群聊房间号';
 
// 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());
    }
}
 
// 接收到<message>
function onMessage(msg) {
	
	console.log(msg);
	// 解析出<message>的from、type属性,以及body子元素
    var from = msg.getAttribute('from');
    var type = msg.getAttribute('type');
    var elems = msg.getElementsByTagName('body');
 
    if (type == "groupchat" && elems.length > 0) {
		var body = elems[0];
		$("#msg").append(from.substring(from.indexOf('/') + 1) + ":<br>" + Strophe.getText(body) + "<br>")
    }
    return true;
}
 
$(document).ready(function() {
 
	// 通过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-send").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('');
		} else {
			alert("请先登录!");
		}
	});
});

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值