Я новичок в этом OpenFire и asmack, я хочу, чтобы у пользователя была функция многопользовательского чата, поэтому я поискал и нашел MUC. Я реализовал это для создания комнаты и отправки приглашений другим пользователям. эти работы, другой пользователь получает приглашение, но другой пользователь не может присоединиться к комнате.
Я делаю это при получении приглашения от другого пользователя
Здесь соединение — это соединение этого пользователя, а комната — это имя комнаты, которое мы получаем в приглашении.
MultiUserChat muc3 = новый MultiUserChat(подключение,комната);
muc3.join("testbot3");
testbot3 — просто случайное имя.
Но это выдает ошибку 404.
Нужно ли мне присоединяться к пользователю перед отправкой приглашения, т.е. если пользователь отправляет приглашение B, перед отправкой приглашения A должен присоединиться к этим пользователям по умолчанию в комнате, а затем это зависит от B, чтобы отклонить или просто молчать.
Что я делаю, так это то, что B получает приглашение от A в этом InvitationListner B, к которому я пытаюсь присоединиться с помощью приведенного выше кода.
Я уже давно пытаюсь, я не уверен, что происходит не так, кто-нибудь может дать пример кода, как это сделать, это было бы для меня большим подспорьем.
Спасибо
Вот дополнительная информация по моей проблеме
Когда я иду и проверяю Openfire, я вижу комнату, созданную пользователем, и он сам был добавлен в качестве владельца, поэтому я не думаю, что это будет проблемой с созданием комнаты.
Возможно, это может быть проблема с блокировкой комнаты, так как я прочитал, что комната заблокирована, когда комната не полностью создана, я думаю, это проблема с заполнением формы, когда мы создаем комнату, я не ввожу пароль в форму это может быть проблемой?
Пожалуйста, посмотрите следующий код ниже внутри обработчика, я вызываю метод «checkInvitation», который делает то же самое, что и приведенный выше код, но все же я получаю 404. Не могли бы вы сказать мне, что я не так в своем коде.
Может ли псевдоним, который необходимо добавить, быть любым или он должен быть чем-то специфичным для пользователя?
общественная пустота createChatroom () {
MultiUserChat muc = null;
try {
muc = new MultiUserChat(connection, "[email protected]");
muc.create("testbot");
// Get the the room's configuration form
Form form = muc.getConfigurationForm();
// Create a new form to submit based on the original form
Form submitForm = form.createAnswerForm();
// Add default answers to the form to submit
for (Iterator fields = form.getFields(); fields.hasNext();) {
FormField field = (FormField) fields.next();
if (!FormField.TYPE_HIDDEN.equals(field.getType()) && field.getVariable() != null) {
// Sets the default value as the answer
submitForm.setDefaultAnswer(field.getVariable());
}
}
// Sets the new owner of the room
List owners = new ArrayList();
owners.add("admin@localhost");
submitForm.setAnswer("muc#roomconfig_roomowners", owners);
// Send the completed form (with default values) to the server to configure the room
muc.sendConfigurationForm(submitForm);
muc.join("d");
muc.invite("b@localhost", "Meet me in this excellent room");
muc.addInvitationRejectionListener(new InvitationRejectionListener() {
public void invitationDeclined(String invitee, String reason) {
// Do whatever you need here...
System.out.println("Initee "+invitee+" reason"+reason);
}
});
} catch (XMPPException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public void setConnection(XMPPConnection connection) {
this.connection = connection;
if (connection != null) {
// Add a packet listener to get messages sent to us
PacketFilter filter = new MessageTypeFilter(Message.Type.chat);
connection.addPacketListener(new PacketListener() {
public void processPacket(Packet packet) {
Message message = (Message) packet;
if (message.getBody() != null) {
String fromName = StringUtils.parseBareAddress(message
.getFrom());
Log.i("XMPPClient", "Got text [" + message.getBody()
+ "] from [" + fromName + "]");
messages.add(fromName + ":");
messages.add(message.getBody());
// Add the incoming message to the list view
mHandler.post(new Runnable() {
public void run() {
setListAdapter();
checkInvitation();
}
});
}
}
}, filter);
mHandler.post(new Runnable() {
public void run() {
checkInvitation();
}
});
}
}