Détection de présence avec LiveCycle

4 02 2009

Les vidéos Vodpod ne sont plus disponibles.

Un client m’a demandé comment LiveCycle Data Services peut détecter côté Java quand un utilisateur se connecte ou se déconnecte de la couche de messaging. Du coup, j’ai réalisé un exemple qui utilise l’API Java de LCDS pour inscrire dans la console Java les événements de création de session et de création de client pour le messaging. Les sources du projet Flex/Java sont disponibles ici. Côté Java, j’invoque par remoting un service qui se met à l’écoute des événements de Session, de FlexClient et de MessageClient. Dès qu’un événement est reçu, le service java inscrit une ligne dans la console de log. Voici la liste des listeners Java:

        MyFlexSessionListener sessionListener = new MyFlexSessionListener();
        FlexSession.addSessionCreatedListener(sessionListener);

        MyFlexClientListener flexClientListener = new MyFlexClientListener();
        FlexClient.addClientCreatedListener(flexClientListener);

        MyMessageClientListener messageClientListener = new MyMessageClientListener();
        MessageClient.addMessageClientCreatedListener(messageClientListener);

Côté code Flex, c’est juste un module classique de chat où j’ai rajouté un bouton pour lancer une fois le service Java par remoting, s’abonner manuellement au chat et se désabonner. La vidéo montre comment réagit la console Tomcat en fonction des actions des utilisateurs Flex. Le code du chat est simplissime:

<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml">

    <mx:Script>
        <![CDATA[

            import mx.messaging.messages.AsyncMessage;
            import mx.messaging.messages.IMessage;

            private function send():void
            {
                var message:IMessage = new AsyncMessage();
                message.body.chatMessage = msg.text;
                producer.send(message); 
                msg.text = "";
            }

            private function messageHandler(message:IMessage):void
            {
                log.text += message.body.chatMessage + "\n";    
            }

        ]]>
    </mx:Script>

    <mx:Producer id="producer" destination="chat"/>
    <mx:Consumer id="consumer" destination="chat" message="messageHandler(event.message)"/>

    <mx:Panel title="Chat" width="100%" height="100%">
        <mx:TextArea id="log" width="100%" height="100%"/>
        <mx:ControlBar>
             <mx:TextInput id="msg" width="50%" enter="send()"/>
             <mx:Button label="Send" click="send()"/> 
             <mx:Button label="launch Listener" click="srv.initialize()"/>
             <mx:Button label="Unsubscribe" click="consumer.unsubscribe()"/>
             <mx:Button label="Subscribe" click="consumer.subscribe()"/>
        </mx:ControlBar>
    </mx:Panel>
        <mx:RemoteObject destination="StartListener" id="srv"/>

</mx:Application>

Cet exemple très simple montre comment interconnecter un système de gestion de présence en Java et une application Flex connectée à LiveCycle Data Services. Toutes les librairies Java sont disponibles dans le SDK de LCDS.

Publicités