Olá, estou tendo uma dificuldade na conversa entre o ncl e lua. Resumidamente: estava fazendo uma aplicação que acessa a internet para buscar uma informação, e então surgiu a necessidade de criação de um passo intermediário onde fosse checado se há ou não conexão antes de tentar acessar o conteúdo em si.
Na declaração da mídia lua que acessa o conteúdo na internet, defini uma propriedade chamada 'encerra'. O código lua, quando o usuário deseja sair, envia um valor qualquer ao evento 'encerra' que serve como sinal para dar 'stop' nesta mídia no ncl utilizando 'onEndAttribution'. Até aqui tudo bem, está funcionando legal.
<media id="luaAcesso" type="application/x-ginga-NCLua" src="Acesso.lua" descriptor="descritorLuaAcesso" >
<link xconnector="aoTerminarAtribuiçãoParar">
|
Na checagem de conexão que decidi fazer, estou utilizando um outro arquivo lua que apenas tenta conectar e, conseguindo ou não, envia uma determinada resposta. Devido a dúvidas sobre funcionamento, decidi inicialmente utilizar a mesma maneira que já deu certo na outra vez mas desta vez criei duas propriedades, porque há dois resultados diferentes possiveis: conectado ou não. Quando se está conectado, atribui-se um valor qualquer a 'encerra1' e quando não está, atribui-se o valor em 'encerra2'. Segue a idéia do codigo abaixo:
<media id="luaTeste" type="application/x-ginga-NCLua" src="TesteConexao.lua" descriptor="descritorTeste" >
<link xconnector="aoTerminarAtribuiçãoIniciarParar">
<link xconnector="aoTerminarAtribuiçãoIniciarParar">
|
Em 'luaTeste':
event.register (
function (evt) if evt.class == 'ncl' and evt.type == 'presentation' and evt.action == 'start' then a = checagem() if (a==0) then local evtEncerra = { class = 'ncl', type = 'attribution', name = 'encerra2', value = '1', } evtEncerra.action = 'start'; event.post(evtEncerra) evtEncerra.action = 'stop'; event.post(evtEncerra) else local evtEncerra = { class = 'ncl', type = 'attribution', name = 'encerra1', value = '1', } evtEncerra.action = 'start'; event.post(evtEncerra) evtEncerra.action = 'stop'; event.post(evtEncerra) end end end ) |
Desta vez as coisas não funcionaram como da outra vez. Nos logs, tenho a seguinte mensagem ao carregar o teste de conexão:
ProceduralPlayerAdapter::stopEvent event not found 'encerra2'
O mesmo acontece se cair em 'encerra1', e o mesmo ocorre se eu tiver só uma propriedade 'encerra' desta vez.
O fato é: não entendi muito bem o funcionamento das propriedades e eventos na comunicação entre as linguagens. Gostaria de entender o que está errado nesta abordagem e, se alguém enxergar uma maneira mais apropriada de resolver o problema e quiser contribuir, agradeço.
Autor: Maurício Perdomo
55 comentários
<!-- Generated by NCL Eclipse -->
<ncl id="main" xmlns="http://www.ncl.org.br/NCL3.0/EDTVProfile">
<head>
<regionBase>
<region id="rgTeste"/>
</regionBase>
<descriptorBase>
<descriptor id="descriptorTeste" region="rgTeste"/>
</descriptorBase>
<connectorBase>
<causalConnector id="onEndAttributionStop">
<simpleCondition role="onEndAttribution"/>
<simpleAction role="stop"/>
</causalConnector>
</connectorBase>
</head>
<body>
<port id="pTeste" component="testeConexao"/>
<media descriptor="descriptorTeste" id="testeConexao" src="testeConexao.lua" type="application/x-ginga-NCLua">
<property name="encerra1"/>
<property name="encerra2"/>
<property name="encerra"/>
</media>
<link xconnector="onEndAttributionStop">
<bind component="testeConexao" interface="encerra" role="onEndAttribution"/>
<bind component="testeConexao" role="stop"/>
</link>
</body>
</ncl> testeConexao.lua local evt = {
class = 'ncl',
type = 'attribution',
name = 'encerra',
} function tratador (e)
if e.class == 'ncl' and e.type == 'presentation'
and e.action == 'start' then
evt.value= '1';
evt.action = 'start'; event.post(evt)
evt.action = 'stop'; event.post(evt)
end
end event.register (tratador) Eu tambem consegui reproduzir o seu erro: ProceduralPlayerAdapter::stopEvent event not found 'encerra2' Aparentemente isso ocorre quando você posta o evento de stop e nao tem nenhum elo para ser ativado. Teste modificar o elo do exemplo acima para (Sem modificar o lua): <link xconnector="onEndAttributionStop">
<bind component="testeConexao" interface="encerra1" role="onEndAttribution"/>
<bind component="testeConexao" role="stop"/>
</link> Voce devera receber essa mensagem de erro! Isso me leva a crer que talvez o erro esteja no seu conector, mas nao tenho absoluta certeza disso!