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
<!-- 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) ------------------------------------------------------------
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!
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!!
<!-- 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,