Class ::nsmcp::QuestionJobPoller

::nsmcp::QuestionJobPoller[i] create ...

Defined in /usr/local/ns/tcl/nsmcp/question-backend.tcl

Class Relations

  • class: ::nx::Class[i]
  • superclass: ::nx::Object[i]
::nx::Class create ::nsmcp::QuestionJobPoller \
     -superclass ::nx::Object

Methods (to be applied on the object)

  • wait (scripted, public)

     nsmcp::QuestionJobPoller[i] wait name json deadline emit poll [ check ]
    Parameters:
    name (required)
    json (required)
    deadline (required)
    emit (required)
    poll (required)
    check (optional)

    Testcases:
    No testcase defined.
    set delay 0.1
    while {1} {
        set value [ns_json parse $json]
        if {[dict exists $value isError] && [dict get $value isError]} {return $json}
        if {![dict exists $value structuredContent jobHandle]} {return $json}
        set job [dict get $value structuredContent]
        set handle [dict get $job jobHandle]
        if {![regexp {^[0-9a-f]{64}$} $handle] || ![dict exists $job status]} {return $json}
        set status [dict get $job status]
        set event [dict create type job name $name jobHandle $handle status $status]
        if {[dict exists $job progress]} {dict set event progress [dict get $job progress]}
        if {![uplevel #0 [list {*}$emit $event]]} {
            return -code error -errorcode {NSMCP QUESTION CANCELLED} "Question cancelled; background jobHandle: $handle"
        }
        if {$status ni {queued running}} {return $json}
        if {[clock milliseconds] >= $deadline} {
            error "Question timed out waiting for background jobHandle $handle; use log_results with this handle to continue"
        }
        if {$check ne ""} {uplevel #0 $check}
        ns_sleep [expr {min($delay,max(0.001,($deadline-[clock milliseconds])/1000.0))}]
        set json [uplevel #0 [list {*}$poll $handle]]
        set delay [expr {min(1.0,$delay*1.5)}]
    }