Ir para o conteúdo

 Voltar a Linguagem Lua
Tela cheia

Enviar string de uma mídia lua para outra

3 de Junho de 2009, 19:06 , por Desconhecido - | Ninguém seguindo este artigo por enquanto.
Visualizado 28 vezes

Boa noite, 

 Ví que já existe um tópico parecido no forum, mas achei melhor separar pois minha dúvida é mais simples.

 Gostaria de enviar uma string de valor dinâmico de uma mídia lua para outra, +- assim:

----------------------- NCL --------------------------

<?xml version="1.0" encoding="ISO-8859-1"?>


66 comentários

  • 820d3515c25dc6c1319875ee4fed9224?only path=false&size=50&d=404Carlos de Salles Soares Neto(usuário não autenticado)
    4 de Junho de 2009, 11:25

     

    Oi Rafael,

    Eu que agradeço você por isolar essa dúvida. Muitos devem estar com ela. Seu documento tem alguns problemas. Vou postar novamente tudo colocando entre colchetes [[[ ]]] o que adicionei.

    Não testei o exemplo porque estou sem tempo mesmo (DESCULPE!). Você poderia confirmar se está tudo ok?

    ----------------------- NCL --------------------------

    <?xml version="1.0" encoding="ISO-8859-1"?>
    <!-- Generated by NCL Eclipse -->
    <ncl id="teste" xmlns="http://www.ncl.org.br/NCL3.0/EDTVProfile">
        <head>
            <regionBase>
                <region height="100%" id="regiao" width="100%"/>
            </regionBase>
              
            <descriptorBase>
                <descriptor id="desc" [[[region="regiao"]]]/>
            </descriptorBase>
            <connectorBase>
                [[[ <causalConnector id="onEndAttributionSet">
                    <connectorParam name="var"/>
                    <simpleCondition role="onEndAttribution"/>
                    <simpleAction role="set" value="$var"/>
                </causalConnector> ]]]
          </connectorBase>
        </head>
        <body>
    [[[   <port id="p1" component="um"/>
          <port id="p2" component="dois"/>
    ]]]

            <media descriptor="desc" id="um" src="um.lua">
                [[[ <property name="teste"/>
             </media> ]]]

            <media descriptor="desc" id="dois" src="dois.lua">
                <property name="teste"/>
            </media>

     

    [[[        <link xconnector="onEndAttributionSet">
                <bind component="um" interface="teste" role="onEndAttribution"/>
                <bind component="dois" interface="teste" role="set" value="$propriedadeCopiada/>
                <bind component="um" interface="teste" role="propriedadeCopiada"/>
            </link> ]]]
    Esse elo está fazendo a atribuição dois.teste = um.teste toda vez que o valor de um.teste muda.

        </body>
    </ncl>

    --------------- um.lua ---------------------------------

    function handler (evt)
         print('UM!')

        event.post {
            class    = 'ncl',
            type     = 'attribution',
            property = 'teste',
            action   = 'stop',
            value    = 'teste1234',
        }

    end

    event.register(handler)

    -----------------------------------------------------------

    ----------------------------- dois.lua ---------------------

     function handler (evt)
         print('DOIS')

        if evt.class == 'ncl' and evt.type == 'attribution' [[[ and evt.action=='start' ]]] then
            print(evt.value)

    [[[ evt.action = 'stop'

    event.post(evt) -- estou sinalizando o fim da atribuição. Está OK? ]]]

       end

    end

    event.register(handler)

    ------------------------------------------------------------

    • 0e0bb701f1b73af0bdb5e06871f41322?only path=false&size=50&d=404Rafael Pinto(usuário não autenticado)
      4 de Junho de 2009, 11:47

       

      Olá, Carlos.

      Obrigado pela resposta.

       Alterei a linha :

       <bind component="dois" interface="teste" role="set" value="$propriedadeCopiada"/>

      no ncl pois faltava a última aspa.

       Ao executar a aplicação recebo o seguinte erro:

      UM!
      PANIC: unprotected error in call to Lua API (/misc/ncl30/prop/um.lua:4: bad argument #-2 to 'post' (string expected, got nil))
       (!!!)  *** WARNING [Application exited without deinitialization of DirectFB!] *** [core.c:813 in dfb_core_deinit_check()]

      Faltou algum parâmetro na hora de enviar o evento?

       Obrigado!

      • 820d3515c25dc6c1319875ee4fed9224?only path=false&size=50&d=404Carlos de Salles Soares Neto(usuário não autenticado)
        4 de Junho de 2009, 12:04

         

        Obrigado pela correção. Digitei direto no fórum.

        Claro, faltou um parâmetro sim:

        event.post( 'out', evt )

        E agora, tudo ok?

        • 0e0bb701f1b73af0bdb5e06871f41322?only path=false&size=50&d=404Rafael Pinto(usuário não autenticado)
          4 de Junho de 2009, 12:47

           

          Carlos,

          Mudei  script que envia o evento para:

          function handler (evt)
               print('UM!')
             
              event.post( 'out', {
                  class    = 'ncl',
                  type     = 'attribution',
                  property = 'teste',
                  action   = 'stop',
                  value    = 'teste1234',
              })

          end
          event.register(handler)

          Mas continuo recebendo:

          UM!
          PANIC: unprotected error in call to Lua API (/misc/ncl30/prop/um.lua:4: bad argument #-2 to 'post' (string expected, got nil))

          Será que não está faltando o atributo "name" por exemplo, na hora de enviar o evento?

           Obrigado!!

  • 0e0bb701f1b73af0bdb5e06871f41322?only path=false&size=50&d=404Rafael Pinto(usuário não autenticado)
    21 de Junho de 2009, 2:50

     

    Boa noite,

    Consegui fazer o que eu queria, vou colocar meu código de testes aqui, pois pode ajudar alguém.

    -------------------------- NCL -----------------------------

    <?xml version="1.0" encoding="ISO-8859-1"?>
    <!-- Generated by NCL Eclipse -->
    <ncl id="teste" xmlns="http://www.ncl.org.br/NCL3.0/EDTVProfile">
        <head>
            <connectorBase>
                <causalConnector id="onBeginStart">
                    <simpleCondition role="onBegin"/>
                    <simpleAction max="unbounded" role="start"/>
                </causalConnector>
                <causalConnector id="onEndAttributionSet">
                    <connectorParam name="var"/>
                    <simpleCondition role="onEndAttribution"/>
                    <simpleAction role="set" value="$var"/>
                </causalConnector>
            </connectorBase>
        </head>
        <body>
            <port component="um" id="dPort"/>
            <media id="um" src="um.lua">
                <property name="propriedadeUm"/>
            </media>
            <media id="dois" src="dois.lua">
                <property name="propriedadeDois"/>
            </media>
            <link xconnector="onBeginStart">
                <bind component="um" role="onBegin"/>
                <bind component="dois" role="start"/>
            </link>
            <link xconnector="onEndAttributionSet">
                <bind component="um" interface="propriedadeUm" role="onEndAttribution"/>
                <bind component="dois" interface="propriedadeDois" role="set">
                    <bindParam name="var" value="$get"/>
                </bind>
                <bind component="um" interface="propriedadeUm" role="get"/>
            </link>
        </body>
    </ncl>
     

    ----------------------------------------------------------------

    ------------------------ um.lua ---------------------------

     function handler (evt)
       
         if evt.class ~= 'ncl' then return end

        if evt.type == 'attribution' then
            print("Atribuicao executada em um.lua")
            return
        end   
     

    print("Iniciando eventos...")
     
    local evt = {
        class = 'ncl',
        type  = 'attribution',
        name  = 'propriedadeUm',
    }

    evt.value = "Rafael"
    evt.action = 'start'; event.post(evt)
    evt.action = 'stop';  event.post(evt)    

       
    end

    event.register(handler)

    ----------------------------------------------------------------

    ----------------------- dois.lua --------------------------

     function handler (evt)
        
        if evt == nil then
            print("evt veio nil!!!")
            return
        end

        if evt.type == 'attribution' then
            if evt.name == 'propriedadeDois' then
                print("Dois recebeu o valor: ", evt.value)
                return
            end
        end  

        print("passou direto!!")
       
    end

    event.register(handler)

    ----------------------------------------------------------------

    Resumindo, o que eu faço é definir uma propriedade em cada nó lua.

    Assim o primeiro nó lua a ser executado, no caso um.lua, preenche sua própria propriedade,  e quando ele termina de atribuir, automaticamente o elo que ele tem com dois.lua (onEndAttributionSet) faz com que esse valor seja repassado para a propriedade de dois.lua.

    Com esse valor em mãos pode-se fazer o que quiser.

     Sugestões de como fazer isso de forma mais simples são bem-vindas.

    Att,

    • 201656b83337aa76f8a1de40ce226268?only path=false&size=50&d=404Günter Herweg(usuário não autenticado)
      1 de Julho de 2009, 14:05

       

      Vou aproveitar a solucao desse problema para perguntar novamente outro problema parecido com esse, que é:

      Como ficaria a passagem de valores no caso das midias "um" e "dois" estarem em contextos diferentes?

      A solucao uma vez sugerida pelo Carlos é o caminho "ctxum --> body --> ctxdois", fazendo extamente o que o Rafael faz na solucao acima. Porem a parte "body --> ctxdois" nao completa.

      Ainda nao confirmei se isso é realmente um BUG da versao...

       

Concurso ITU-T de Aplicações para IPTV 2012

13 de Agosto de 2012, 19:38, por Desconhecido

Gostaríamos de lembrar aos possíveis interessados que o prazo de registro para participação no Concurso ITU-T de Aplicações para IPTV 2012 (IPTV Application Challenge) se encerra nesta semana, dia 15 de agosto de 2012. Já o prazo para a submissão de aplicações se encerra no dia 07 de setembro de 2012.



NCL Eclipse 1.6 disponível

10 de Janeiro de 2012, 21:19, por Desconhecido

Caros membros da Comunidade Ginga,



Concursos de Aplicações Ginga-NCL

22 de Setembro de 2011, 3:22, por Desconhecido

    Gostaríamos de relembra-los de que há dois concursos de aplicações Ginga-NCL com inscrições ainda abertas. O convite é aberto a toda a comunidade de desenvolvedores de aplicações para o Middleware Ginga-NCL, em nível internacional. São os seguintes concursos:



Novas versões: Ginga e Ginga-NCL Virtual Set-top Box (v.0.12.3)

1 de Agosto de 2011, 20:58, por Desconhecido



Algumas Boas Notícias da Comunidade Ginga

28 de Julho de 2011, 21:31, por Desconhecido

Autor: Roberto Azevedo