Android基于XMPP Smack openfire 开发的聊天室(四) 【创建房间、表单;报文】

分类:Android XMPP 6144人阅读 评论(11) 收藏 举报 聊天 xmpp smack android 服务器 bookmarks

这篇就主要讲创建房间和报文吧。

1,创建房间:

其实创建房间很简单,两句话就搞定了。但你要知道,简单的同时,服务器可没帮你配置房间的信息什么的。所以一般用下边的方法来创建房间别人是进不去的。

[java] view plain copy print ?
  1. //使用XMPPConnection创建一个MultiUserChat
  2. MultiUserChatmuc=newMultiUserChat(conn1,"myroom@conference.jabber.org");
  3. //创建聊天室
  4. muc.create("testbot");
  5. //发送一个空表单配置这显示我们想要一个instantroom
  6. muc.sendConfigurationForm(newForm(Form.TYPE_SUBMIT));


所以咱们还是手动配置一些信息吧,免得留后患。不过在这里要给朋友们提个醒,我觉得不论是哪种方法都很狗屎,为什么狗屎。你看看那MUC,本来就是一个聊天室了,还要让你在聊天室创建另个聊天室,老妈生孩子,然后孩子和老妈并排。狗屎啊,不过不排除我理解错误。希望高人能给与指点。

[java] view plain copy print ?
  1. try{
  2. //创建聊天室
  3. muc.create(Constants.vCard.getNickName().toString());
  4. //获得聊天室的配置表单
  5. Formform=muc.getConfigurationForm();
  6. //根据原始表单创建一个要提交的新表单。
  7. FormsubmitForm=form.createAnswerForm();
  8. //向要提交的表单添加默认答复
  9. for(Iteratorfields=form.getFields();fields.hasNext();){
  10. FormFieldfield=(FormField)fields.next();
  11. if(!FormField.TYPE_HIDDEN.equals(field.getType())
  12. &&field.getVariable()!=null){
  13. //设置默认值作为答复
  14. submitForm.setDefaultAnswer(field.getVariable());
  15. }
  16. }
  17. //设置聊天室的新拥有者
  18. //Listowners=newArrayList();
  19. //owners.add("liaonaibo2\\40slook.cc");
  20. //owners.add("liaonaibo1\\40slook.cc");
  21. //submitForm.setAnswer("muc#roomconfig_roomowners",owners);
  22. //设置聊天室是持久聊天室,即将要被保存下来
  23. submitForm.setAnswer("muc#roomconfig_persistentroom",true);
  24. //房间仅对成员开放
  25. submitForm.setAnswer("muc#roomconfig_membersonly",false);
  26. //允许占有者邀请其他人
  27. submitForm.setAnswer("muc#roomconfig_allowinvites",true);
  28. //能够发现占有者真实JID的角色
  29. //submitForm.setAnswer("muc#roomconfig_whois","anyone");
  30. //登录房间对话
  31. submitForm.setAnswer("muc#roomconfig_enablelogging",true);
  32. //仅允许注册的昵称登录
  33. submitForm.setAnswer("x-muc#roomconfig_reservednick",true);
  34. //允许使用者修改昵称
  35. submitForm.setAnswer("x-muc#roomconfig_canchangenick",false);
  36. //允许用户注册房间
  37. submitForm.setAnswer("x-muc#roomconfig_registration",false);
  38. //发送已完成的表单(有默认值)到服务器来配置聊天室
  39. muc.sendConfigurationForm(submitForm);
  40. }catch(XMPPExceptione){
  41. e.printStackTrace();
  42. }

还有个细节,有朋友估计看到我注释的那里有\\40的代码。原因是在XMPP中的唯一标示JID不允许出现@,所以要转义。OK?

2,报文
有朋友说报文干嘛,其实我开始也觉得有点多余,但想想类似QQ群那样,人下线了,头像名字变灰色。如果是openfire服务器的话,你下线了就直接把你去除。所以我们要给服务器发送个广播。具体处理那是以后的是了。看看这段报文:

[html] view plain copy print ?
  1. <iqid="902U0-48"type="set">
  2. <queryxmlns="jabber:iq:private">
  3. <storagexmlns="storage:bookmarks">
  4. <conferencename="ccc"autojoin="true"jid="ccc@conference.xmpp.chaoboo.com"></conference>
  5. </storage>
  6. </query>
  7. </iq>


报文可以根据需要来改服务器的插件。

下边发送的报文:

[java] view plain copy print ?
  1. /**
  2. *用户加入时向服务器发送的报文
  3. *@return
  4. */
  5. publicIQjoinXml(){
  6. IQiq=newIQ(){
  7. publicStringgetChildElementXML(){
  8. StringBuilderbuf=newStringBuilder();
  9. buf.append("<queryxmlns=\"jabber:iq:private\">");
  10. buf.append("<storagexmlns=\"storage:bookmarks\">");
  11. buf.append("<").append("conference").append("name=\"ccc\"").append("autojoin=\"false\"").append("");
  12. buf.append("</storage>");
  13. buf.append("</query>");
  14. returnbuf.toString();
  15. }
  16. };
  17. iq.setType(IQ.Type.SET);
  18. //方法如名,这里是设置这份报文来至那个JID,后边的/smack是这段信息来至哪个端,如spark端就是/spark,android就是/Smack
  19. iq.setFrom(Constants.USERNAME+"@naibo.liao.com/Smack");
  20. returniq;
  21. }

怎么发送呢?可以通过连接,就是XMPPCONNECTION来发送:

[java] view plain copy print ?
  1. Constants.conn.sendPacket(leaveXml());


OK,停一会,手酸了

更多相关文章

  1. Android(安卓)实现Xmpp工具类
  2. Android模拟 HTTP multipart/form-data 请求协议信息实现图片上
  3. 【Android(安卓)XMPP】 学习资料收集贴(持续更新)
  4. Android(安卓)网络(一) HTTP协议
  5. Android模拟 HTTP multipart/form-data 请求协议信息实现图片上
  6. android 项目开发
  7. android 中使用TableLayout实现表单布局效果示例
  8. Android(安卓)简单视图
  9. Android(安卓)Wifi获取组播

随机推荐

  1. 冷月手撕408之操作系统(10)-经典同步互斥
  2. 冷月手撕408之操作系统(16)-虚拟内存管理
  3. c语言指针自学
  4. 冷月手撕408之数据结构(1)-导论
  5. Linux学习之路第一篇——关于Linux的认知
  6. 冷月手撕408之操作系统(15)-内存分配之基
  7. 冷月手撕408之操作系统(9)-进程同步与互
  8. 冷月手撕408之计算机组成原理(1)-导学
  9. 冷月手撕408之操作系统(14)-内存分配之非
  10. 冷月手撕408之操作系统(6)-线程概述