3 つのクライアントのプレゼンスを更新しようとしています。そのうちの 2 つは Adium & Pidgin で、もう 1 つはカスタム ビルド アプリです。アプリからプレゼンスを送信すると、使用可能に設定され、ステータスが「室内」に設定されます。
ConnectionConfiguration connConfig =
new ConnectionConfiguration(host, Integer.parseInt(port), service);
connection = new XMPPConnection(connConfig);
presence = new Presence(Presence.Type.available,"In Room",1,Presence.Mode.available);
connection.sendPacket(presence);
しかし、Adium などの他の IM からプレゼンスを更新すると、APP からプレゼンスを更新したときにプレゼンスとステータスの更新に失敗します。それ以外の場合、Adium と Pidgin は互いに連携します。アプリが原因で問題が発生していることに気付きました。プレゼンス パケット リスナーを実装しました。Pidgin または Adium からプレゼンスを変更した場合、このリスナーはリッスンしています。リッスンする必要があります。
connection.addPacketListener(new PacketListener(){
@Override
public void processPacket(Packet presencePkt) {
Presence pres= ((Presence) presencePkt);
presence.setPriority(1);// presence is global variable
switch(pres.getMode()){
case available: presence.setMode(pres.getMode());
//connection.sendPacket(pres);
break;
case dnd: presence.setMode(pres.getMode());
//connection.sendPacket(pres);
break;
default :
break;
}
}
}, new PacketTypeFilter(Presence.class));