Utilizo Smack API para escribir mi Google Talk Client. Ahora necesito manejar la solicitud de agregar esto. Configuré SubscriptionMode en el manual & ahora tengo que registrar un detector de paquetes de presencia pero no sé cómo! puede cualquier cuerpo ayudar?Cómo gestionar la solicitud de inserción en smack API
Respuesta
No lo he intentado todavía, pero creo que a continuación debería funcionar. Si usa el modo manual, se debe registrar un PacketListener que esté atento a los paquetes de presencia que tengan un tipo de Presence.Type.subscribe
.
En primer lugar establece la lista:
Roster roster = connection.getRoster();
roster.setSubscriptionMode(Roster.SubscriptionMode.manual);
continuación, agregar un listner paquete a la conexión anterior, por ejemplo:
connection.addPacketListener(new SubscriptionListener(), new PacketFilter(){
public boolean accept(Packet packet) {
if(packet instanceof Presence)
if(((Presence)packet).getType().equals(Presence.Type.subscribe))
return true;
return false;
}});
El código anterior simplemente devuelve verdadero para todas las solicitudes, pero se puede personalizar es decir, establézcalo en verdadero o falso en función de la entrada de la GUI del usuario.
public static void admitFriendsRequest() {
connection.getRoster().setSubscriptionMode(
Roster.SubscriptionMode.manual);
connection.addPacketListener(new PacketListener() {
public void processPacket(Packet paramPacket) {
System.out.println("\n\n");
if (paramPacket instanceof Presence) {
Presence presence = (Presence) paramPacket;
String email = presence.getFrom();
System.out.println("chat invite status changed by user: : "
+ email + " calling listner");
System.out.println("presence: " + presence.getFrom()
+ "; type: " + presence.getType() + "; to: "
+ presence.getTo() + "; " + presence.toXML());
Roster roster = connection.getRoster();
for (RosterEntry rosterEntry : roster.getEntries()) {
System.out.println("jid: " + rosterEntry.getUser()
+ "; type: " + rosterEntry.getType()
+ "; status: " + rosterEntry.getStatus());
}
System.out.println("\n\n\n");
if (presence.getType().equals(Presence.Type.subscribe)) {
Presence newp = new Presence(Presence.Type.subscribed);
newp.setMode(Presence.Mode.available);
newp.setPriority(24);
newp.setTo(presence.getFrom());
connection.sendPacket(newp);
Presence subscription = new Presence(
Presence.Type.subscribe);
subscription.setTo(presence.getFrom());
connection.sendPacket(subscription);
} else if (presence.getType().equals(
Presence.Type.unsubscribe)) {
Presence newp = new Presence(Presence.Type.unsubscribed);
newp.setMode(Presence.Mode.available);
newp.setPriority(24);
newp.setTo(presence.getFrom());
connection.sendPacket(newp);
}
}
}
}, new PacketFilter() {
public boolean accept(Packet packet) {
if (packet instanceof Presence) {
Presence presence = (Presence) packet;
if (presence.getType().equals(Presence.Type.subscribed)
|| presence.getType().equals(
Presence.Type.subscribe)
|| presence.getType().equals(
Presence.Type.unsubscribed)
|| presence.getType().equals(
Presence.Type.unsubscribe)) {
return true;
}
}
return false;
}
});
connection.getRoster().addRosterListener(new RosterListener() {
public void presenceChanged(Presence presence) {
System.out.println(presence.getFrom() + "presenceChanged");
}
public void entriesUpdated(Collection<String> presence) {
System.out.println("entriesUpdated");
}
public void entriesDeleted(Collection<String> presence) {
System.out.println("entriesDeleted");
}
public void entriesAdded(Collection<String> presence) {
System.out.println("entriesAdded");
}
});
}
Una descripción/comentarios de soporte en el volcado de código haría de esta una respuesta mucho más útil. –
mientras que los comentarios de apoyo serían útiles, encontré este código muy útil. Se podría argumentar que está escrito tan claramente que no requiere comentarios incluso. –
Acepto: primero se leerá el tutorial oficial de smack (http://www.igniterealtime.org/builds/smack/docs/latest/documentation/index.html => roster/presence topic y el tema del paquete entrante) y luego se dará el el código anterior se vuelve muy útil. – loloof64
- 1. cómo detener la apertura de la ventana duplicada utilizando Smack API en swing?
- 2. ¿Cómo enviar un paquete XML personalizado utilizando la API Smack de Java?
- 3. ¿Cómo autenticarse en Google Talk con el token de autenticación de AccountManager utilizando Smack API?
- 4. smack-create entry in roster
- 5. iCloud: ¿cómo gestionar la desactivación de iCloud?
- 6. Cómo gestionar eventos en MVVM
- 7. Facebook API - Cómo cancelar la solicitud de gráfico
- 8. Bloomberg límite de solicitud API
- 9. Solicitud de Ebay API JSON
- 10. Gestionar eventos en DART
- 11. Cómo gestionar GetDate() con Entity Framework
- 12. FaceBook API: Obtenga el objeto de solicitud para una solicitud identificada en la cuenta que envió la solicitud. Usando la API "Diálogo de solicitudes"
- 13. ¿Cómo gestionar la impresión de depuración en F #
- 14. Android: asmack (portado) o smack (parchado)?
- 15. Android AGREGAR AMIGO usando Smack
- 16. Cómo crear una conexión SSL utilizando la biblioteca Smack XMPP?
- 17. Solicitud de API de Paypal con MVC3
- 18. XEP-0080 Ubicación del usuario en la Biblioteca Smack
- 19. Límite de solicitud de Salesforce API 10
- 20. Cómo gestionar proyectos compartidos correctamente en TeamCity
- 21. Cómo gestionar conexiones HTTP de hasta 100k en .Net
- 22. Bloomberg solicitud de API tiempo de espera
- 23. Conectarse a Google Talk usando smack
- 24. Inserción en la base de datos
- 25. Django ¿Cómo veo consulta en gestionar la cáscara
- 26. Dinero de solicitud de Paypal - ¿tiene API?
- 27. Gestionar conflictos de CSS
- 28. Cómo implementar la inserción recursiva en sftp
- 29. ¿Cómo se permite la inserción en DataGridView?
- 30. Gestionar contenido comprimido en Android
He votado negativamente porque no puedo encontrar una clase SubscriptionListener. – Magmatic
new SubscriptionListener() es un oyente de ejemplo. Es obvio que proporcionaría su propia implementación de oyente. –