class Rock::WebApp::Tasks::API

Constants

ValidHostnameRegex

stackoverflow.com/questions/106179/regular-expression-to-match-dns-hostname-or-ip-address

Public Class Methods

ports() click to toggle source
# File lib/rock/webapp/tasks/api.rb, line 20
def self.ports
    @ports
end
stream_async_data_to_websocket(env, data_source, count = Float::INFINITY, binary) click to toggle source
# File lib/rock/webapp/tasks/api.rb, line 27
def self.stream_async_data_to_websocket(env, data_source, count = Float::INFINITY, binary)
    emitted_samples = 0

    # Asynchronous streaming mode
    ws = Faye::WebSocket.new(env)

    listener = data_source.on_raw_data do |sample|
        result = nil
        if binary
            result = Hash[mode: :binary, value: sample.to_json_value(pack_simple_arrays: true, special_float_values: :string)]
        else
            result = Hash[value: sample.to_json_value(special_float_values: :string)]    
        end

        if !ws.send(MultiJson.dump(result))
            WebApp.warn "failed to send, closing connection"
            ws.close
            listener.stop
        end
        emitted_samples += 1
        if emitted_samples == count
            WebApp.debug "reached requested number of samples, closing connection"
            ws.close
            listener.stop
        end
    end

    ws.on :close do |event|
        listener.stop
    end

    ws
end

Public Instance Methods

get_operation(name_service, name, operation_name) click to toggle source
# File lib/rock/webapp/tasks/api.rb, line 100
def get_operation(name_service, name, operation_name)
    task_by_name(name_service, name).operation(operation_name)
 rescue Orocos::NotFound
    error! "cannot find operation #{operation_name} on task #{name_service}/#{name}", 404
end
get_port(name_service, name, port_name, init = false, timeout = 30) click to toggle source
# File lib/rock/webapp/tasks/api.rb, line 91
def get_port(name_service, name, port_name, init = false, timeout = 30)
    portentry = API.ports.get(name_service, name, port_name, timeout)
    if !portentry
        port = port_by_task_and_name(name_service, name, port_name)
        portentry = API.ports.add(port, name_service, name, port_name, init, timeout)
    end
    portentry
end
port_by_task_and_name(name_service, name, port_name) click to toggle source
# File lib/rock/webapp/tasks/api.rb, line 85
def port_by_task_and_name(name_service, name, port_name)
    task_by_name(name_service, name).port(port_name)
rescue Orocos::NotFound
    error! "cannot find port #{port_name} on task #{name_service}/#{name}", 404
end
task_by_name(name_service, name) click to toggle source
# File lib/rock/webapp/tasks/api.rb, line 75
def task_by_name(name_service, name)
    if name_service == '*'
        Orocos.name_service.get name
    else
        Orocos.name_service.get "#{name_service}/#{name}"
    end
rescue Orocos::NotFound
    error! "cannot find task #{name_service}/#{name} on the registered name services", 404
end