美文网首页
Xmpp第三篇

Xmpp第三篇

作者: Cheep | 来源:发表于2018-09-21 08:56 被阅读0次

简述

开启我们第三篇,之前两篇相对来说,这篇才是重中之重。我们这篇主要对于会议室进行介绍,啥也不说了,燥起来.......

资源

AbstractXMPPConnection connection = "自己赋值";
String owner = "群主名称";
String roomName = "房间名称";
String password = "房间密码";
String roomJid = "房间jid";

1.创建会议室

public static boolean createRoom(){
    try{
        UUID uuid = UUID.randomUUID();
        String roomJid = uuid.toString() + "@conference."+connection.getServiceName();
        MultiUserChat muc = MultiUserChatManager.getInstanceFor(connection).getMultiUserChat(roomJid);
        muc.create(owner)                                       //owner创建的房间
        Form form = muc.getConfigurationForm();                 //获取聊天室的配置表单
        Form submit = form.createAnswerForm();                  //根据原始表单创建一个提交的新表单
        for(FormField field : form.getFields()){                //向要提交的表单添加默认答复
            if(FormField.Type.hidden == filed.getType() && filed.getVariable() != null){
                submit.setDefaultAnswer(filed.getVariable());   //设置默认值作为答复
            }
        }
        List<String> owners = new ArrayList<>();
        owners.add(connection.getUser().toString());

        submit.setAnswer("muc#roomconfig_roomname",roomName);   //设置房间名称
        submit.setAnswer("muc#roomconfig_roomowners",owners);   //设置房间群主
        submit.setAnswer("muc#roomconfig_persistentroom",true); //设置持久会议室
        submit.setAnswer("muc#roomconfig_membersonly",false);   //设置会议室仅对成员开放 false不止对成员
        submit.setAnswer("muc#roomconfig_allowinvites",true);   //允许占有者邀请其他人
        submit.setAnswer("muc#roomconfig_changesubject",true);  //设置所有人能修改主题

        if(!TextUtils.isEmpty(password)){
            submit.setAnswer("muc#roomconfig_passwordprotectedroom",true);  //进入是否需要密码
            submit.setAnswer("muc#roomconfig_roomsecret",password);         //设置进入密码
        }

        submit.setAnswer("muc#roomconfig_enablelogging",true);      //登陆房间对话
        submit.setAnswer("x-muc#roomconfig_reservednick",true);     //仅允许注册的昵称登陆
        submit.setAnswer("x-muc#roomconfig_canchangenick",false);   //允许使用者修改昵称
        submit.setAnswer("x-muc#roomconfig_registration",false);    //允许用户注册房间
        
        muc.sendConfigurationForm(submit);  //发送表单
    }catch(Exception e){
        e.printStackTrace();
        return false;
    }
    return true;
}   

2.邀请好友入会议室

public static boolean inviteJionGroup(){
    try{
        MultiUserChat muc = MultiUserChatManager.getInstanceFor(connection).getMultiUserChat(roomJid);
        muc.invite("好友Jid","原因(可填、不填)");
    }catch(Exception e){
        e.printStackTrace();
        return false;
    }
    return true;
}

3.进入会议室

public static boolean joinGroup(){
    try{
        MultiUserChat muc = MultiUserChatManager.getInstanceFor(connection).getMultiUserChat(roomJid);
        DiscussionHistory history = new DiscussionHistory();            //历史消息
        Date date = new Date("上一次退出记录 时间戳");
        history.setSince(date);                                         //设置接收某个时间段后的 历史消息
        muc.join("用户账户",password,history,SmackConfiguration.getDefaultPacketReplyTimeout());    
    }catch(Exception e){
        e.printStackTrace();
        return false;
    }
    return true;
}

4.会议室踢人(群主才行)

public static boolean kickGroupMember(){
    try{
        MultiUserChat muc = MultiUserChatManager.getInstanceFor(connection).getMultiUserChat(roomJid);
        muc.kickParticipant("用户名称","原因");
    }catch(Exception e){
        e.printStackTrace();
        return false;
    }
    return true;
}
但是此方法,存在很大的缺陷,踢人的时候会出现异常,muc.kickParticipant()方法,不知道传是”用户名称“,还是”用户账户“。
所以,在此我做了一定的调整。
发送IQ包-->
<iq to='roomJid' from='用户Jid' id='FEH85-80' type='set'><query xmlns='http://jabber.org/protocol/muc#admin'><item jid="18390317131@ime.xiaouqyb.com" role="none"><reason/></item></query></iq>

5.销毁会议室

public static boolean destoryRoom(){
    try{
        MultiUserChat muc = MultiUserChatManager.getInstanceFor(connection).getMultiUserChat(roomJid);
        if(muc != null)
            muc.destroy("原因",用户Jid("登陆用户Jid"));
    }catch(Exception e){
        e.printStackTrace();
        return false;
    }
    return true;
}

结束语

写的筋疲力尽,果然周六适合放松,无心编码。终于写群相关接口,希望对大家有帮助吧!

相关文章

网友评论

      本文标题:Xmpp第三篇

      本文链接:https://www.haomeiwen.com/subject/fmzonftx.html