domingo, 4 de março de 2007

OpenLaszlo: exemplo de LzTimer

um exemplo simples de como criar uma aplicação do genero Timer, para a cada intervalo de tempo realizar algum tipo de processamento, no caso este exemplo mostra o status em tempo real das pessoas que estão acessando ao Portal Java.com



Código fonte da aplicação: [link]
<canvas
    title="Portal Java Who is Online"
    width="200" proxied="false">
    
    <attribute name="flag" value="true" type="boolean" />
    
    <!-- dataset da aplicação -->
    <dataset
        name="ds"
        src="http:whoisonline.php"
        querytype="post"
        request="false"
        proxied="false"/>
    <!-- trata o evento de recebimento de dados pelo dataset -->    
    <handler reference="ds" name="ondata"><![CDATA[
        // verifica o tratamento de tempo para executar a cada 1 segundo
         if( typeof this.del == "undefined" ) {
            this.del = new LzDelegate( this, "atualizaInfo" );
            LzTimer.addTimer( this.del, 1000 );
        } else {
            LzTimer.resetTimer( this.del, 1000 );
        }
    ]]></handler>    
    <!-- método que trata a inicialização da aplicação -->
    <method name="init"><![CDATA[
        this.atualizaInfo();
    ]]></method>
    <!-- método para atualizar -->
    <method name="atualizaInfo"><![CDATA[
        if( this.flag ) {
            // requisita os dados para o servidor
            this.ds.doRequest();
        }
    ]]></method>    
    <!-- @BEGIN: definição visual -->
    <simplelayout axis="y" spacing="5"/>
    <text><u><b> Pessoas on-line: </b></u></text>
    <view>
        <text>Membros: </text>
        <text x="65" datapath="ds:/pjonline/membros/text()"/>
    </view>
    <view>
        <text>Visitantes: </text>
        <text x="65" datapath="ds:/pjonline/visitantes/text()"/>
    </view>
    <view>
        <text>Total: </text>
        <text x="65" datapath="ds:/pjonline/total/text()"/>
    </view>
    
    <button x="20" name="btn" text="Parar">
        <handler name="onclick"><![CDATA[
            if( canvas.flag ) {
                canvas.btn.setAttribute( "text", "Atualizar" );
                canvas.flag = false;
            } else {
                canvas.btn.setAttribute( "text", "Parar" );
                canvas.flag = true;
                canvas.ds.doRequest();
            }
        ]]></handler>
    </button>
    <!-- @END: definição visual -->    
</canvas>


Formato do XML recuperado com as informações:
<pjonline><membros>4</membros><visitantes>185</visitantes><total>189</total></pjonline>