2013-02-13 1 views
1

Я пытаюсь обновить присутствие на трех клиентах, два из которых - Adium & Pidgin и одно мое приложение для пользовательской сборки. когда я посылаю присутствие с моей App работает доступными наборы и статус на «В номере»:наличие на нескольких ресурсах smack

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

Но когда я обновляю присутствие от других IM позволяет говорить Adium, это удается обновить наличие и состояние в ситуации, когда у меня есть обновленное присутствие от моего APP, другие мудрые Adium и Pidgin работают друг с другом. Я понял, что из-за моего APP что-то не так. Я реализовал наличие пакета слушателя: если я изменю присутствие от 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)); 
+0

Я думаю, вы хотели написать, что слушателя никогда не увольняют, так? – Flow

+0

он срабатывает, и я получаю свое присутствие, но когда получил свое присутствие, если попытаюсь отправить новое присутствие в connection.sendPacket (pres). Он постоянно начинает отправлять присутствие. –

ответ

0

Идущий с обычаем PresencePacketListener находится в 98% неправильный подход. Вместо этого вы хотите добавить свой собственный RosterListener с Roster.addRosterListener(), чтобы реагировать на изменения присутствия сущностей в вашем реестре.

Убедитесь, что оба лица имеют Jabber, по крайней мере режим подписки из или как, так что сервер будет пересылать наличие лоджии к вашему клиенту.

Если вы хотите получить доступ к другим ресурсам/полным JID вашей учетной записи. Попробуйте Roster.getPresences(StringUtils.parseBareAddress(connection.getUser()))

+0

, но я не хочу присутствия других подписчиков, но наличие одной и той же учетной записи, если это loggin из другого IM-клиента. Roster.addlistener() может получить только список списка/списка участников. Я получаю собственное присутствие от других ресурсов с помощью пользовательского прослушивателя. Мой вопрос в том, как я могу обновить свое присутствие на нескольких клиентах, если я меняю присутствие с одного клиента ... Надеюсь, вы поняли –

+0

Возможно, вам стоит перефразировать ваш вопрос и попытаться найти хороший заголовок. Другой клиент решает, как отображается голый JID, если задействовано несколько ресурсов с различной информацией о присутствии. – Flow

0

Я только что прочитал ваши комментарии к Flow, этот ответ опоздал, но другим может понадобиться то же самое;

Ответ должен по-прежнему использовать RosterListener в качестве предлагаемого потока (основанный на моих опытах с использованием Smack).

С помощью RosterListener вы получите изменения присутствия для своего пользователя, а также для других пользователей (от вашего имени и от вашего имени). Это означает, что реестр является отслеживание для вас, так что вы можете использовать метод Roster#getPresences(username), чтобы получить упорядоченный список вашего присутствия из различных источников, вы можете получить имя пользователя для обеспечения динамически с помощью Roster#getUser()

Док here охватывает тему и в основном объясняет, что разные режимы имеют разные приоритеты, поэтому (например), если любой клиент имеет «доступный», то с помощью Roster#getPresence(username) (единственного числа) возвращается.

Реестр также позволяет вам устанавливать/изменять эти приоритеты/порядок, если хотите. Надеюсь, это поможет кому-то!

 Смежные вопросы

  • Нет связанных вопросов^_^