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.   
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章