Как обработать запрос на добавление в smack API - PullRequest
5 голосов
/ 26 августа 2009

Я использую Smack API для написания моего клиента Google Talk. Теперь мне нужно обработать запрос на добавление для этого. Я установил SubscriptionMode на manual, и теперь мне нужно зарегистрировать слушателя для пакетов присутствия, но я не знаю как !! может ли тело помочь?

Ответы [ 2 ]

9 голосов
/ 17 сентября 2009

Я еще не пробовал, но я думаю, что ниже должно работать. При использовании ручного режима должен быть зарегистрирован PacketListener, который прослушивает пакеты присутствия типа Presence.Type.subscribe.

Сначала установите список:

    Roster roster = connection.getRoster();
    roster.setSubscriptionMode(Roster.SubscriptionMode.manual);

Затем добавьте список пакетов в указанное выше соединение, например:

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;
                }});

Приведенный выше код просто возвращает true для всех запросов, но вы можете настроить его, т. Е. Установить его в true или false в зависимости от ввода пользовательского интерфейса.

5 голосов
/ 07 июня 2013
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");
            }
        });
    }
...