1,创建房间:
其实创建房间很简单,两句话就搞定了。但你要知道,简单的同时,服务器可没帮你配置房间的信息什么的。所以一般用下边的方法来创建房间别人是进不去的。
-
- MultiUserChat muc = new MultiUserChat(conn1, "myroom@conference.jabber.org");
-
-
- muc.create("testbot");
-
-
-
- muc.sendConfigurationForm(new Form(Form.TYPE_SUBMIT));
所以咱们还是手动配置一些信息吧,免得留后患。不过在这里要给朋友们提个醒,我觉得不论是哪种方法都很狗屎,为什么狗屎。你看看那MUC,本来就是一个聊天室了,还要让你在聊天室创建另个聊天室,老妈生孩子,然后孩子和老妈并排。狗屎啊,不过不排除我理解错误。希望高人能给与指点。
- try {
-
- muc.create(Constants.vCard.getNickName().toString());
-
- Form form = muc.getConfigurationForm();
-
- Form submitForm = form.createAnswerForm();
-
- for (Iterator fields = form.getFields(); fields.hasNext();) {
- FormField field = (FormField) fields.next();
- if (!FormField.TYPE_HIDDEN.equals(field.getType())
- && field.getVariable() != null) {
-
- submitForm.setDefaultAnswer(field.getVariable());
- }
- }
-
-
-
-
-
-
- submitForm.setAnswer("muc#roomconfig_persistentroom", true);
-
- submitForm.setAnswer("muc#roomconfig_membersonly", false);
-
- submitForm.setAnswer("muc#roomconfig_allowinvites", true);
-
-
-
- submitForm.setAnswer("muc#roomconfig_enablelogging", true);
-
- submitForm.setAnswer("x-muc#roomconfig_reservednick", true);
-
- submitForm.setAnswer("x-muc#roomconfig_canchangenick", false);
-
- submitForm.setAnswer("x-muc#roomconfig_registration", false);
-
- muc.sendConfigurationForm(submitForm);
- } catch (XMPPException e) {
- e.printStackTrace();
- }
还有个细节,有朋友估计看到我注释的那里有\\40的代码。原因是在XMPP中的唯一标示JID不允许出现@,所以要转义。OK?
2,报文
有朋友说报文干嘛,其实我开始也觉得有点多余,但想想类似QQ群那样,人下线了,头像名字变灰色。如果是openfire服务器的话,你下线了就直接把你去除。所以我们要给服务器发送个广播。具体处理那是以后的是了。看看这段报文:
- <iq id="902U0-48" type="set">
- <query xmlns="jabber:iq:private">
- <storage xmlns="storage:bookmarks">
- <conference name="ccc" autojoin="true" jid="ccc@conference.xmpp.chaoboo.com" ></conference>
- </storage>
- </query>
- </iq>
报文可以根据需要来改服务器的插件。
下边发送的报文:
-
-
-
-
- public IQ joinXml(){
- IQ iq = new IQ() {
- public String getChildElementXML() {
- StringBuilder buf = new StringBuilder();
- buf.append("<query xmlns=\"jabber:iq:private\">");
- buf.append("<storage xmlns=\"storage:bookmarks\">");
- buf.append("<").append("conference").append(" name=\"ccc\"").append(" autojoin=\"false\"").append("");
- buf.append("</storage>");
- buf.append("</query>");
- return buf.toString();
- }
- };
- iq.setType(IQ.Type.SET);
-
- iq.setFrom(Constants.USERNAME+"@naibo.liao.com/Smack");
- return iq;
- }
怎么发送呢?可以通过连接,就是XMPPCONNECTION来发送:
- Constants.conn.sendPacket(leaveXml());
创建房间,布布扣,bubuko.com
创建房间
原文:http://www.cnblogs.com/hujihon/p/3737896.html