Pergunta

Eu construí um externo openfire componente com base no Whack biblioteca, estendendo o AbstractComponent classe.Eu quero os clientes a subscrever o meu componente e receber notificações de presença quando o componente fica on-line e off-line.Então a minha pergunta é como podemos lidar com a presença e as assinaturas de presença para o componente externo com base em AbstractComponent?

Atualmente eu possa responder à presença pedido utilizando o handlePresence() o método, mas como eu devo adicionar clientes para o componente de lista de inscritos (não componentes externos permitir plantel em primeiro lugar)?

@Override
protected void handlePresence(Presence presence){
    if (presence.getType() ==  Presence.Type.subscribe){
        System.out.println("The component has received Subscribtion request.");
        Presence original =  presence;
        Presence response = new Presence();
        //Swap the sender/recipient fields
        response.setTo(original.getFrom());
        response.setFrom(original.getTo());
        //Convert the text to upper case
        response.setType(Presence.Type.subscribed);
        send(response);

    }
}
Foi útil?

Solução

Componentes não têm uma lista de nomes fornecida pelo servidor.Você pode armazenar seus próprios plantel em um banco de dados, se necessário.Alguns aplicativos podem fugir com nenhuma lista de todos (quando eles simplesmente querem aparecer online para todos).

Para aparecer online para todos (abordagem mais simples, nenhuma lista de espaço de armazenamento necessário):

  • Quando você receber <presence type="subscribe"/> responder <presence type="subscribed"/>
  • Quando você receber <presence type="probe"/> responder <presence/> (ou qualquer que seja o estado pretende ser mostrado como)

Para armazenar uma lista requer um pouco mais de trabalho, mas permite que você mantenha o controle de quem está autorizado a ver a sua presença, e cuja presença você está autorizado a ver.Em alguns casos, você pode preferir usar um cliente normal conexão aqui, se você não quiser gerenciar o seu próprio elenco.Jack Moffitt escreveu um post em seu blog sobre a ideia aqui: http://metajack.im/2008/08/04/thoughts-on-scalable-xmpp-bots/

Note que neste post eu omitir o 'a' e 'de' atributos em estrofes.Ele é o componente para colocar um 'a' e 'de' na saída de estrofes.Todas as chamadas de estrofes terá um 'a' e 'de'.

A exibição de um componente a presença de usuários

O básico de entrada estrofes que você precisa para lidar são:

  • <presence type="subscribe">

    • O remetente deseja assinar a sua presença atualizações.Você pode aprovar ou recusar o presente.Se você aprovar, você deve armazenar o remetente da JID no seu banco de dados, assim você sabe o que você precisa para enviar sua presença atualizações quando necessário.
    • Especificação: http://xmpp.org/rfcs/rfc6121.html#sub-request-handle
  • <presence type="unsubscribe">

    • O remetente deseja parar de receber atualizações de presença a partir de você.Você deve removê-los da lista de pessoas inscrito para as suas atualizações e, em seguida, enviar de volta <presence type="unsubscribed"> e <presence type="unavailable">.
    • Especificação: http://xmpp.org/rfcs/rfc6121.html#sub-cancel-inbound (apesar de que o texto é adaptado de mais para servidores de componentes aqui).
  • <presence type="probe">
    • O remetente está pedindo sua presença atual.Basta responder com o seu mais recente presença estrofe para o usuário.Este é normalmente enviado pelo servidor do usuário quando log in.

Recebendo a presença de usuários em um componente

Além disso, se você deseja que o componente de conhecer a presença de usuários, você precisa enviar uma solicitação de inscrição para eles: <presence type="subscribe">.Você deve estar preparado para receber uma aprovação (<presence type="subscribed">) ou negação (<presence type="unsubscribed">).

Quando o componente primeiro vem on-line, ele pode buscar a presença atual de um usuário por enviar <presence type="probe"> para cada usuário.Não há necessidade de fazer isso mais de uma vez por usuário, enquanto o componente está sendo executado, o servidor do usuário envia automaticamente atualizações de presença se o usuário aprovar a sua solicitação de inscrição acima.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top