Время выполнения в узле задачи - PullRequest
0 голосов
/ 08 апреля 2020

Я получаю проблему (время выполнения) с узлом задачи. Я создал один таймер в узле сцены для функции непрерывного выполнения. Здесь я попытался выполнить обновление с непрерывным ответом с помощью узла задачи и после него использовать в узле сцены.

'Таймер

m.Update = m.top.findNode("SampleID")
m.Update .observeField("fire", "UpdateSample")
m.global.responseurl = m.urlassign
m.Update.control = "RUN"

' Моя функция

function UpdateSample()
    m.Sample= CreateObject("roSGNode", "SampleTask")
        m.Sample.control = "RUN"
        ?"m.global.responsecontent : " m.global.responsecontent 
end function 

'My Task Node

sub init()
?"Start Init()"
    m.DowndloadResponse = CreateObject("roUrlTransfer")
    m.DowndloadResponse.SetUrl(m.global.responseurl)
    m.Cont= m.DowndloadResponse.GetToString()
    m.global.responsecontent = m.Cont
    ?"m.global.responsecontent : " m.global.responsecontent 
?"End Init()"
end sub

Здесь, не каждый раз, когда DowndloadResponse.GetToString () "Execution TimeOut". Иногда это дает ошибку. Я пытался с m.top.functionname. Но это исполнение сразу. Я также пытался установить таймер в узле задач. Но не везет. Мне потребовалось несколько. Я не знаю, какой из них хороший способ реализовать это. Кто-нибудь знает, как решить эту проблему?

1 Ответ

0 голосов
/ 09 апреля 2020

Вы используете узел Task неправильно, вы должны использовать functionName.

Я бы также рекомендовал использовать asyncGetToString(), так как он позволит вам читать коды ответов. Вы также должны установить и инициализировать сертификаты для запросов HTTPS (стандартный пакет сертификатов Roku должен это делать).

В вашей функции потока задач должно быть что-то подобное:

request = CreateObject("roUrlTransfer")
request.retainBodyOnError(true)
request.setUrl(url)

' Needed for HTTPS requests
request.setCertificatesFile("common:/certs/ca-bundle.crt")
request.initClientCertificates()

port = CreateObject("roMessagePort")
request.setPort(port)

timeout = 0 ' Force a timeout (0 equals "indefinite", or until Roku decides to terminate the request... ~60s)
event = wait(timeout, port)

if event <> invalid and type(event) = "roUrlEvent"
    ?"event.getString() "event.getString()
    ?"event.getResponseCode() "event.getResponseCode()
    ?"event.getFailureReason() "event.getFailureReason()
end if

' Ensure the request does not continue to run after the forced timeout is hit
' (Only necessary if you set a non-zero timeout)
request.asyncCancel()
...