openfire xmpp strophe 第一章链接消息服务器

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;
    },

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值