var Message = {
// XMPP服务器BOSH地址
BOSH_SERVICE: 'https://域名或者IP地址:7443/http-bind/',
//群消息协议
NS_MUC: 'http://jabber.org/protocol/muc',
//文件上传地址
UploadFile: "http://图片上传地址IP:xxxx/fileupload.ashx?files=",
//Strophe.Bosh.prototype.strip = "body",
//房间服务
RoomUrl: "conference.域名或者IP地址",
//域后缀
DO_MAIN: "@域名或者IP地址",
//查询服务域后缀
SearchService: "search.域名或者IP地址",
// XMPP连接
connection: null,
loginInfo: null,
// 当前状态是否连接
connected: false,
jid: "",
sid: "",
//接收xml监听
onReceiveXml: function (body) {
console.log("接收xml监听", body);
var result = Strophe.XmlToJson(body);
if (result.hasOwnProperty("message") && result.message.type === "groupchat") {
Message.onGroupMessage(body);
}
},
//发出xml监听
onSendOutXml: function (body) {
console.log("发出xml监听", body);
},
//链接消息服务
ConnectMessageServer: function () {
if (!Message.connected) {
Message.connection = new Strophe.Connection(Message.BOSH_SERVICE);
Message.connection.connect(Message.loginInfo.UserName + Message.DO_MAIN + "/" + Message.loginInfo.UserName, Message.loginInfo.UserPassword, Message.onConnect);
}
},
// 连接状态改变的事件
onConnect: function (status) {
if (status == Strophe.Status.CONNFAIL) {
LayerToast("连接失败!");
} else if (status == Strophe.Status.AUTHFAIL) {
LayerToast("登录失败!");
} else if (status == Strophe.Status.DISCONNECTED) {
LayerToast("连接断开!");
connected = false;
} else if (status == Strophe.Status.CONNECTED) {
LayerToast("系统登录成功!");
Message.UpdateConnectStatus();
// 接收xml节点事件
Message.connection.xmlInput = Message.onReceiveXml;
// 发送xml 节点事件
Message.connection.xmlOutput = Message.onSendOutXml;
Message.connected = true;
Message.jid = Message.connection.jid;
Message.sid = Message.jid.replace(Message.loginInfo.UserName + Message.DO_MAIN + "/", "");
// 当接收到<message>节,调用onMessage回调函数
Message.connection.send($pres().c('priority').t('0'));
// 当接收到<presence>节,调用onPresence回调函数
Message.connection.addHandler(Message.onPresence, null, 'presence');
// 群组消息
Message.connection.addHandler(Message.onGroupMessage, null, "message", "groupchat");
// 个人消息
Message.connection.addHandler(Message.onChatMessage, null, 'message', "chat");
// 当接收到<iq>节,调用onIQ回调函数
Message.connection.addHandler(Message.onFriendChange, "jabber.iq.roster", "iq", "set", null);
//获取好友列表
//Message.GetMyFriends('GetMyFriends');
//获取群组列表
//Message.GetMyRooms("GetMyRooms");
}
},
//请求添加好友
onPresence: function (presence) {
console.log("onPresence", presence);
var result = Strophe.XmlToJson(presence);
console.log("onPresence", result);
var from = result.from;
var friendName = from.substr(0, from.indexOf(Message.DO_MAIN));
var to = result.to;
var type = result.type;
var html = "";
//加好友请求
if (type === "subscribe") {
html += '<li id="' + friendName + '" οnclick="LayerConfirm(\'' + from + '\')">';
html += '<div class="liLeft"><img src="img/timg.jpg" width="43px" heigth="44px"></div>';
html += '<div class="liRight">';
html += '<span class="intername">' + friendName + '</span>';
html += '<span class="infor">' + friendName + '想添加您为好友</span>';
html += '</div>';
html += '</li>';
$("#friendList").append(html);
}
//好友状态更改
if (result.hasOwnProperty("status") && result.hasOwnProperty("priority")) {
$("#" + friendName).find("span.infor").html(result.status);
//离线样式控制
if (result.priority == 1) {
$("#" + friendName).removeClass("gray");
} else {
$("#" + friendName).addClass("gray");
}
}
//群组成员
/**
* 角色(role): none,visitor,participant,moderator,out
* 岗位():none,member,admin,owner
* */
var memberName = Strophe.getResourceFromJid(from);
if (result["type"] != "unavailable" && from.indexOf(Message.RoomUrl) > 0) {
//不退出群聊
html = "";
if (!result.x.hasOwnProperty("item")) {
return;
}
if (!result.x.item.hasOwnProperty("affiliation")) {
return;
}
var userPosition = result.x.item.affiliation;
if (userPosition == "owner") {
//群创建者
html = "<li id='limemberowner" + memberName + "' οnclick='Message.MemberMenu(this,\"" + userPosition + "\")'><image id='groupowner" + memberName + "' src='img/owner.png'/><span >" + memberName + "</span></li>";
} else if (userPosition == "admin") {
//群管理员
html = "<li id='limemberadmin" + memberName + "' οnclick='Message.MemberMenu(this,\"" + userPosition + "\")'><image id='groupadmin" + memberName + "' src='img/admin.png'/><span>" + memberName + "</span></li>";
} else if (userPosition == "member") {
//群成员
html = "<li id='limembermember" + memberName + "' οnclick='Message.MemberMenu(this,\"" + userPosition + "\")'><image id='groupmember" + memberName + "' src='img/member.png'/><span>" + memberName + "</span></li>";
} else {
//无岗位
html = "<li id='limembernone" + memberName + "' οnclick='Message.MemberMenu(this,\"" + userPosition + "\")'><image id='groupnone" + memberName + "' src='img/none.png'/><span>" + memberName + "</span></li>";
}
//判断当前成员是否已经存在
if (!$('#member' + memberName).hasOwnProperty("length")) {
$("#GroupFriendList").append(html);
$("#limemberowner" + memberName).tooltip({ content: "群主" });
$("#limemberadmin" + memberName).tooltip({ content: "管理员" });
$("#limembermember" + memberName).tooltip({ content: "普通成员" });
$("#limembernone" + memberName).tooltip({ content: "无" });
}
} else if (result["type"] === "unavailable") {
//退出群聊时
$("#member" + memberName).remove();
}
return true;
},
//获取群组消息
onGroupMessage: function (msg) {
var result = Strophe.XmlToJson(msg);
var type = result.type;
var from = result.from;
var to = result.to;
var roomMessage;
var isDelay = false;
if (result.hasOwnProperty("delay")) {
isDelay = true;
}
if (result.hasOwnProperty("body")) {
roomMessage = result.body;
}
if (roomMessage) {
Message.ShowMessage(roomMessage, isDelay, from, result);
}
return true;
},
// 接收到<message>
onChatMessage: function (msg) {
// 解析出<message>的from、type属性,以及body子元素
var result = Strophe.XmlToJson(msg);
var type = result.type;
var from = result.from;
var to = result.to;
var elems;
var isDelay = false;
if (result.hasOwnProperty("delay")) {
isDelay = true;
}
if (result.hasOwnProperty("body")) {
elems = result.body;
}
//单聊
if (type == "chat" && elems) {
Message.ShowMessage(elems, isDelay, from, result);
}
//发送加入房间信息
if (from.indexOf('@conference') > 0) {
var html = "";
var roomName = from.replace(Message.RoomUrl, "");
var yaoqingrenName = "";
var list = Strophe.forEachChild(msg, null, function (data) {
console.log("房间请求数据", data);
jid = data.firstChild.getAttribute("from");
if (jid) {
var yaoqingrenName = jid.replace(Message.DO_MAIN, "");
html += '<li id="' + yaoqingrenName + '" οnclick="LayerConfirmRoom(\'' + jid + '\',\'' + from + '\')">';
html += '<div class="liLeft"><img src="img/timg.jpg" width="43px" heigth="44px"></div>';
html += '<div class="liRight">';
html += '<span class="intername">' + yaoqingrenName + '</span>';
html += '<span class="infor">' + yaoqingrenName + '想邀请你进入群组</span>';
html += '</div>';
html += '</li>';
$("#friendList").append(html);
}
});
}
return true;
},
//好友更改后方法
onFriendChange: function (iq) {
return true;
},