我在我的Android项目中使用Smack 4.1.1作为Gradle依赖。
我已成功与本地OpenFire服务器建立连接。
但是从Android客户端创建临时会议室时我遇到了问题。
final MultiUserChat multiUserChat = userChatManager.getMultiUserChat(roomId);
try {
multiUserChat.create(connection.getUser());
LOG.debug("room created");
} catch (XMPPException.XMPPErrorException | SmackException e) {
LOG.error("create room error:{}", e);
}
try{
multiUserChat.sendConfigurationForm(new Form(DataForm.Type.submit));
} catch (SmackException.NoResponseException | XMPPException.XMPPErrorException | SmackException.NotConnectedException e) {
LOG.error("sending room configurations error:{}", e);
}
最棒的是,我可以看到该房间是在OpenFire管理面板中创建的,并从其他客户端获取房间信息。
try {
MultiUserChatManager userChatManager = MultiUserChatManager.getInstanceFor(connection);
RoomInfo info = userChatManager.getRoomInfo(roomId);
LOG.debug("room has {} occupants", info.getOccupantsCount());
joinToExistingRoom(roomId);
} catch (XMPPException.XMPPErrorException e) {
LOG.error("join room error:{}", e);
final XMPPError.Condition condition = e.getXMPPError().getCondition();
if (condition == XMPPError.Condition.item_not_found) {
LOG.error("room does not exist error:{}", e);
createRoom(roomId);
}
}
但是在尝试从第二个客户端加入房间时,我收到 XMPPError:收件人不可用 - 等待。
我的片段 joinRoom 方法:
final MultiUserChat multiUserChat = userChatManager.getMultiUserChat(roomId);
try {
multiUserChat.join(connection.getUser());
LOG.debug("joined to room:{}", roomId);
} catch (SmackException.NoResponseException
| XMPPException.XMPPErrorException
| SmackException.NotConnectedException e) {
LOG.error("error joining room {}", e);
}
所以我正在捕捉错误加入会议室org.jivesoftware.smack.XMPPException $ XMPPErrorException:XMPPError:收件人不可用 - 等待
所以问题是什么可能是错的? 我还尝试从 createAnswerForm()方法创建 submitForm 。但结果是一样的。
我发现的一个解决方案是在配置表单的答案中将 persistantroom 发送为 true 。但是这种方法创造了持久的空间,虽然我需要在所有与会者离开房间之后将这个房间销毁。
也许这是一个简单的问题,但现在我不知道如何解决这个问题。
帮助将受到很多赞赏。
提前致谢。
答案 0 :(得分:0)
create()方法文档声明:
根据某些默认配置创建会议室,将请求用户指定为会议室所有者,并将所有者添加到会议室但不允许其他人进入会议室(有效地“锁定”会议室)。一旦创建了房间,请求用户将以指定的昵称加入房间。 要创建一个“Instant Room”,这意味着一个房间有一些可以立即访问的默认配置,房间的所有者应该在创建房间后发送一个空表格。
尝试以这种方式发送配置表单:
multiUserChat.create(connection.getUser())
Form form = new Form(DataForm.Type.submit);
multiUserChat.sendConfigurationForm(form);