smack+openfire 群聊(四)js端监听和发送消息

263 阅读1分钟

第一步,引入js  strophe.min.js

第二步,创建连接和登录

var BOSH_SERVICE = ' http://172.167.40.19:7070/http-bind/';

这里的地址,需要跟你openfire里配置的一样

第三步,创建连接

if (!connected) {
		jid = $("#account").val()+SERVER_IP;
		connection = new Strophe.Connection(BOSH_SERVICE);
		connection.connect(jid, pwd, onConnect);
	}
function onConnect(status) {
	console.log('status: ' + status)
	if (status == Strophe.Status.CONNFAIL) {
		//layer.msg("网络异常,重新登录或者刷新页面!");

	} else if (status == Strophe.Status.AUTHFAIL) {
		//layer.msg("网络异常,重新登录或者刷新页面!");

	} else if (status == Strophe.Status.DISCONNECTED) {
	      //layer.msg("网络异常,重新登录或者刷新页面!");
		connected = false;

	} else if (status == Strophe.Status.CONNECTED) {
//		layer.msg("连接成功,可以开始聊天了!");
		console.log('pubsub', connection)
		connected = true;
		// 当接收到<message>节,调用onMessage回调函数
		connection.addHandler(onMessage, null, 'message', null, null, null);
		// 首先要发送一个<presence>给服务器(initial presence)
		connection.send($pres().tree());
     }
}

第四步,发送消息,这里的类型写的是groupchat 群聊,如果是单聊改成chat

var msg = $msg({
			to : ROOM_JID ,
			from : jid.substr(0,jid.indexOf('@')),
			type : 'groupchat'
		}).c("body", null, json);
		connection.send(msg.tree());
}

第五步,接受消息

// 接收到 function onMessage(msg) {

// 解析出<message>的from、type属性,以及body子元素
var from = msg.getAttribute('from');
var type = msg.getAttribute('type');
var elems = msg.getElementsByTagName('body');

if (type == "chat" && elems.length > 0) {
	var body = elems[0];
	$("#msg").append(from + ":<br>" + Strophe.getText(body) + "<br>")
}
return true;

}