私はこのOpenFireとasmackに慣れていません。ユーザーにマルチユーザーチャットの機能を持たせたいので、検索したところMUCが見つかりました。ルームを作成し、他のユーザーにこれらの作品の招待状を送信するためにこれを実装しました。他のユーザーは招待されますが、他のユーザーはルームに参加できません。
私は他のユーザーの招待受信でこれをやっています
ここで、接続はこのユーザーの接続であり、部屋は招待状で取得した部屋の名前です。
MultiUserChat muc3 = new MultiUserChat(接続,部屋);
muc3.join("testbot3");
testbot3 はランダムな名前です。
しかし、これは404エラーをスローします。
招待を送信する前にユーザーに参加する必要がありますか。つまり、ユーザーが B に招待を送信する場合、招待が送信される前に、A はデフォルトでこれらのユーザーをルームに参加させる必要があり、B に依存して拒否するか、単に待機します。
私がやっていることは、B の InvitationListner で A から招待を受け取り、上記のコードで参加しようとしていることです。
私は長い間試してきましたが、何がうまくいかないのかわかりません。これを行う方法のサンプルコードを提供できる人がいます。これは私にとって大きな助けになります。
ありがとう
ここに私の問題に関する詳細情報があります
Openfire を確認すると、ユーザーが作成したルームが表示され、彼自身が所有者として追加されているので、ルームの作成に問題があるとは思いません。
部屋が完全に作成されていないときに部屋がロックされていることを読んだので、これは部屋がロックされる問題である可能性があります。これは、部屋を作成するときのフォーム入力の問題だと思います。フォーム内のパスワードは問題になる可能性がありますか?
ハンドラー内の次のコードを参照してください。メソッド「checkInvitation」を呼び出しています。これは、投稿された上記のコードと同じことを行いますが、それでも 404 が発生します。私のコードで何が間違っているのか教えてください。
追加する必要があるニックネームは何でもかまいませんか、それともユーザー固有のものにする必要がありますか?
public void createChatroom(){
MultiUserChat muc = null;
try {
muc = new MultiUserChat(connection, "myroom@conference.localhost");
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();
}
});
}
}