• openfire Android学习(三)----会议室创建、加入以及查询会议室中所有成员等


    openfire 中的会议室不像QQ群一样,不能保存那些离线用户,加入会议室后,一旦断开连接,就会离开会议室。

    虽然如此,但如果要实现也不是不可能,我们可以自己做后台来保存,有兴趣的可以去试着实现一下,这里就不实现了。

    好了,下面我们就一起来学习一下创建会议室、加入会议室以及查询会议室中的所有成员:

    一、创建会议室

    注释都写的很清楚,不做太多解释。

    需要配置更多信息,可以到 http://xmpp.org/extensions/xep-0045.html  中15.5.3 muc#roomconfig FORM_TYPE 查看配置

    里面还有一些关于会议室的信息,感兴趣的可以看看,不过里面都是英文,不懂英文的可以谷歌翻译,楼主就是这么干的~

    [java] view plaincopy在CODE上查看代码片派生到我的代码片
    1. /** 
    2.      * 创建房间 
    3.      *  
    4.      * @param roomName 房间名称 
    5.      */  
    6.     public static void createRoom(String roomName) {  
    7.         if (connection == null) {  
    8.             return;  
    9.         }  
    10.         try {  
    11.             // 创建一个MultiUserChat  
    12.             MultiUserChat muc = new MultiUserChat(connection, roomName  
    13.                     + "@conference." + connection.getServiceName());  
    14.             // 创建聊天室  
    15.             muc.create(roomName); // roomName房间的名字  
    16.             // 获得聊天室的配置表单  
    17.             Form form = muc.getConfigurationForm();  
    18.             // 根据原始表单创建一个要提交的新表单。  
    19.             Form submitForm = form.createAnswerForm();  
    20.             // 向要提交的表单添加默认答复  
    21.             for (Iterator<FormField> fields = form.getFields(); fields  
    22.                     .hasNext();) {  
    23.                 FormField field = (FormField) fields.next();  
    24.                 if (!FormField.TYPE_HIDDEN.equals(field.getType())  
    25.                         && field.getVariable() != null) {  
    26.                     // 设置默认值作为答复  
    27.                     submitForm.setDefaultAnswer(field.getVariable());  
    28.                 }  
    29.             }  
    30.             // 设置聊天室的新拥有者  
    31.             List<String> owners = new ArrayList<String>();  
    32.             owners.add(connection.getUser());// 用户JID  
    33.             submitForm.setAnswer("muc#roomconfig_roomowners", owners);  
    34.             // 设置聊天室是持久聊天室,即将要被保存下来  
    35.             submitForm.setAnswer("muc#roomconfig_persistentroom"false);  
    36.             // 房间仅对成员开放  
    37.             submitForm.setAnswer("muc#roomconfig_membersonly"false);  
    38.             // 允许占有者邀请其他人  
    39.             submitForm.setAnswer("muc#roomconfig_allowinvites"true);  
    40.             // 进入是否需要密码  
    41.             //submitForm.setAnswer("muc#roomconfig_passwordprotectedroom", true);  
    42.             // 设置进入密码  
    43.             //submitForm.setAnswer("muc#roomconfig_roomsecret", "password");  
    44.             // 能够发现占有者真实 JID 的角色  
    45.             // submitForm.setAnswer("muc#roomconfig_whois", "anyone");  
    46.             // 登录房间对话  
    47.             submitForm.setAnswer("muc#roomconfig_enablelogging"true);  
    48.             // 仅允许注册的昵称登录  
    49.             submitForm.setAnswer("x-muc#roomconfig_reservednick"true);  
    50.             // 允许使用者修改昵称  
    51.             submitForm.setAnswer("x-muc#roomconfig_canchangenick"false);  
    52.             // 允许用户注册房间  
    53.             submitForm.setAnswer("x-muc#roomconfig_registration"false);  
    54.             // 发送已完成的表单(有默认值)到服务器来配置聊天室  
    55.             submitForm.setAnswer("muc#roomconfig_passwordprotectedroom"true);           
    56.             // 发送已完成的表单(有默认值)到服务器来配置聊天室  
    57.             muc.sendConfigurationForm(submitForm);  
    58.         } catch (XMPPException e) {  
    59.             e.printStackTrace();  
    60.         }  
    61.     }  

    二、加入会议室

    [java] view plaincopy在CODE上查看代码片派生到我的代码片
    1. /** 
    2.      * 加入会议室 
    3.      *  
    4.      * @param user 昵称 
    5.      * @param password 会议室密码 
    6.      * @param roomsName 会议室名 
    7.      * @param connection  
    8.      */  
    9.     public static MultiUserChat joinMultiUserChat(String user, String password, String roomsName,  
    10.             XMPPConnection connection) {  
    11.         try {  
    12.             // 使用XMPPConnection创建一个MultiUserChat窗口  
    13.             MultiUserChat muc = new MultiUserChat(connection, roomsName  
    14.                     + "@conference." + connection.getServiceName());  
    15.             // 聊天室服务将会决定要接受的历史记录数量  
    16.             DiscussionHistory history = new DiscussionHistory();  
    17.                 history.setMaxStanzas(0);  
    18.                         //history.setSince(new Date());  
    19.             // 用户加入聊天室  
    20.                 muc.join(user, password, history, SmackConfiguration.getPacketReplyTimeout());  
    21.             System.out.println("会议室加入成功........");  
    22.             return muc;  
    23.         } catch (XMPPException e) {  
    24.             e.printStackTrace();  
    25.             System.out.println("会议室加入失败........");  
    26.             return null;  
    27.         }  
    28.     }  

    三、查询会议室中的所有成员

    注意:这里查询出来的名字只是用户进入会议室所用的昵称

    [java] view plaincopy在CODE上查看代码片派生到我的代码片
    1. /** 
    2.      * 查询会议室成员名字 
    3.      * @param muc 
    4.      */  
    5.     public static List<String> findMulitUser(MultiUserChat muc){  
    6.         List<String> listUser = new ArrayList<String>();  
    7.         Iterator<String> it = muc.getOccupants();  
    8.         //遍历出聊天室人员名称  
    9.         while (it.hasNext()) {  
    10.             // 聊天室成员名字  
    11.             String name = StringUtils.parseResource(it.next());  
    12.             listUser.add(name);  
    13.         }  
    14.         return listUser;  
    15.     }  

    四、获取服务器上所有会议室

    [java] view plaincopy在CODE上查看代码片派生到我的代码片
    1. /** 
    2.      * 获取服务器上所有会议室 
    3.      * @return 
    4.      * @throws XMPPException 
    5.      */  
    6.     public static List<FriendRooms> getConferenceRoom() throws XMPPException {  
    7.         List<FriendRooms> list = new ArrayList<FriendRooms>();  
    8.         new ServiceDiscoveryManager(connection);  
    9.         if (!MultiUserChat.getHostedRooms(connection,  
    10.                 connection.getServiceName()).isEmpty()) {  
    11.   
    12.             for (HostedRoom k : MultiUserChat.getHostedRooms(connection,  
    13.                     connection.getServiceName())) {  
    14.   
    15.                 for (HostedRoom j : MultiUserChat.getHostedRooms(connection,  
    16.                         k.getJid())) {  
    17.                     RoomInfo info2 = MultiUserChat.getRoomInfo(connection,  
    18.                             j.getJid());  
    19.                     if (j.getJid().indexOf("@") > 0) {  
    20.   
    21.                         FriendRooms friendrooms = new FriendRooms();  
    22.                         friendrooms.setName(j.getName());//聊天室的名称  
    23.                         friendrooms.setJid(j.getJid());//聊天室JID  
    24.                         friendrooms.setOccupants(info2.getOccupantsCount());//聊天室中占有者数量  
    25.                         friendrooms.setDescription(info2.getDescription());//聊天室的描述  
    26.                         friendrooms.setSubject(info2.getSubject());//聊天室的主题  
    27.                         list.add(friendrooms);  
    28.                     }  
    29.                 }  
    30.             }  
    31.         }  
    32.         return list;  
    33.     }  

    五、监听会议室的消息

    添加会议室消息监听 :

    [java] view plaincopy在CODE上查看代码片派生到我的代码片
    1. multiChat.addMessageListener(new multiListener());  

    [java] view plaincopy在CODE上查看代码片派生到我的代码片
    1. /** 
    2.      * 會議室信息監聽事件 
    3.      *  
    4.      * @author Administrator 
    5.      *  
    6.      */  
    7.     public class multiListener implements PacketListener {  
    8.         @Override  
    9.         public void processPacket(Packet packet) {  
    10.             Message message = (Message) packet;  
    11.             // 接收来自聊天室的聊天信息  
    12.             String time = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date());  
    13.             MucHistory mh = new MucHistory();  
    14.             mh.setUserAccount(account);  
    15.             String from = StringUtils.parseResource(message.getFrom());  
    16.             String fromRoomName = StringUtils.parseName(message.getFrom());  
    17.             mh.setMhRoomName(fromRoomName);  
    18.             mh.setFriendAccount(from);  
    19.             mh.setMhInfo(message.getBody());  
    20.             mh.setMhTime(time);  
    21.             mh.setMhType("left");  
    22.   
    23.         }  
    24.     }  

    六、发送会议室消息

    [java] view plaincopy在CODE上查看代码片派生到我的代码片
    1. <strong>multiChat.sendMessage(str);//multiChat </strong>为聊天室对象  

    七、监听会议室状态(成员的进入、离开等)

    添加监听事件:

    [java] view plaincopy在CODE上查看代码片派生到我的代码片
    1. multiChat.addParticipantStatusListener(new ParticipantStatus());  

    会议室状态监听事件:

    [java] view plaincopy在CODE上查看代码片派生到我的代码片
    1. /** 
    2.      * 会议室状态监听事件 
    3.      *  
    4.      * @author Administrator 
    5.      *  
    6.      */  
    7.     class ParticipantStatus implements ParticipantStatusListener {  
    8.   
    9.         @Override  
    10.         public void adminGranted(String arg0) {  
    11.             // TODO Auto-generated method stub  
    12.   
    13.         }  
    14.   
    15.         @Override  
    16.         public void adminRevoked(String arg0) {  
    17.             // TODO Auto-generated method stub  
    18.   
    19.         }  
    20.   
    21.         @Override  
    22.         public void banned(String arg0, String arg1, String arg2) {  
    23.             // TODO Auto-generated method stub  
    24.   
    25.         }  
    26.   
    27.         @Override  
    28.         public void joined(String participant) {  
    29.             System.out.println(StringUtils.parseResource(participant)+ " has joined the room.");  
    30.         }  
    31.   
    32.         @Override  
    33.         public void kicked(String arg0, String arg1, String arg2) {  
    34.             // TODO Auto-generated method stub  
    35.   
    36.         }  
    37.   
    38.         @Override  
    39.         public void left(String participant) {  
    40.             // TODO Auto-generated method stub  
    41.             System.out.println(StringUtils.parseResource(participant)+ " has left the room.");  
    42.               
    43.         }  
    44.   
    45.         @Override  
    46.         public void membershipGranted(String arg0) {  
    47.             // TODO Auto-generated method stub  
    48.   
    49.         }  
    50.   
    51.         @Override  
    52.         public void membershipRevoked(String arg0) {  
    53.             // TODO Auto-generated method stub  
    54.   
    55.         }  
    56.   
    57.         @Override  
    58.         public void moderatorGranted(String arg0) {  
    59.             // TODO Auto-generated method stub  
    60.   
    61.         }  
    62.   
    63.         @Override  
    64.         public void moderatorRevoked(String arg0) {  
    65.             // TODO Auto-generated method stub  
    66.   
    67.         }  
    68.   
    69.         @Override  
    70.         public void nicknameChanged(String participant, String newNickname) {  
    71.             System.out.println(StringUtils.parseResource(participant)+ " is now known as " + newNickname + ".");  
    72.         }  
    73.   
    74.         @Override  
    75.         public void ownershipGranted(String arg0) {  
    76.             // TODO Auto-generated method stub  
    77.   
    78.         }  
    79.   
    80.         @Override  
    81.         public void ownershipRevoked(String arg0) {  
    82.             // TODO Auto-generated method stub  
    83.   
    84.         }  
    85.   
    86.         @Override  
    87.         public void voiceGranted(String arg0) {  
    88.             // TODO Auto-generated method stub  
    89.   
    90.         }  
    91.   
    92.         @Override  
    93.         public void voiceRevoked(String arg0) {  
    94.             // TODO Auto-generated method stub  
    95.   
    96.         }  
    97.   
  • 相关阅读:
    HTTP协议
    javascript常用数组排序及二分查找
    垃圾回收与内存管理
    js的数据存储机制和数据类型
    js中的深复制与浅复制
    斐波那契数列的实现
    认识python中的浅复制与深复制
    微信浏览器中弹窗高度适配
    “ 时,分,秒” 活动倒计时
    互联网协议
  • 原文地址:https://www.cnblogs.com/jasonkent27/p/4098439.html
Copyright © 2020-2023  润新知