class Rock::WebApp::Tasks::API
Constants
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