module SensorStream

require 'Zlib'

Public Class Methods

get_device_by_id(id, key = "") click to toggle source
# File lib/SensorStream.rb, line 120
def self.get_device_by_id(id, key = "")
  if key.empty?
      resp = make_http_get("/api/GetDevice/" + id, {})
  else
    resp = make_http_get("/api/GetDevice/" + id + "?key=" + key, {})
  end

  if (resp.code != "200")
    puts "Unable to get a response from SensorStream: " + resp.code
    return nil
  else
    json = JSON.parse(resp.body)
    device = SensorStream::Device.new(id,
                                      json["UserName"],
                                      json["DeviceName"],
                                      json["Description"])
    if !key.empty?
        device.key = key
    end
    
    device.get_streams
    return device
  end

  return nil
end
get_devices() click to toggle source

Reads a list of devices from the server

# File lib/SensorStream.rb, line 79
def self.get_devices()
  resp = make_http_get("/device.ashx?getdevices=");
  
  if (resp.code != "200")
    return nil;
  else
    devices = [];

    if (resp.body.empty?)
      return nil
    end

    JSON.parse(resp.body).each { |device|
    devices << SensorStream::Device.new(device["DeviceID"],
                                        device["UserName"],
                                        device["DeviceName"],
                                        device["Description"]) }
    return devices;
  end
end
get_devices_by_name(name) click to toggle source

Retreives a device given a device name

# File lib/SensorStream.rb, line 101
def self.get_devices_by_name(name)
  resp = make_http_get("/api/GetDevices?Dev=" + name, {})

  if (resp.code != "200")
      puts "Unable to get a response from SensorStream: " + resp.code
      return nil
  else
      retDevices = []
      JSON.parse(resp.body).each { |device|
      retDevices << SensorStream::Device.new(device["DeviceID"],
                                             device["UserName"],
                                             device["DeviceName"],
                                             device["Description"]) }
      return retDevices
  end

  return nil
end
host_name() click to toggle source
# File lib/SensorStream.rb, line 17
def self.host_name
  return @host_name
end
host_name=(new_name) click to toggle source
# File lib/SensorStream.rb, line 13
def self.host_name=(new_name)
  @host_name = new_name
end
make_http_get(request = "", header_dict = {}, timeout = 600, debug = false) click to toggle source

Internally used to wrap HTTP gets with the required headers

# File lib/SensorStream.rb, line 59
def self.make_http_get(request = "", header_dict = {}, timeout = 600, debug = false)
  # Ensure that the hostname and port are set
  self.set_default_server unless !@host_name.nil?


  uri  = URI::HTTPS.new('https', nil, @host_name, @port_number, nil, request, nil, nil, nil);
  if (debug)
    puts "GET from #{uri.to_s}"
    puts "Header: #{header_dict.to_s}"
  end

  http = Net::HTTP.new(@host_name, @port_number);
  http.read_timeout = timeout; # 10 minute timeout
  http.use_ssl = true
  retval = http.get(uri.request_uri, header_dict);

  return retval
end
make_http_post(request = "", body_dict = {}, header_dict = {}, timeout = 600, debug = false) click to toggle source

Internally used to wrap HTTP puts with the requires headers

# File lib/SensorStream.rb, line 36
  def self.make_http_post(request = "", body_dict = {}, header_dict = {}, timeout = 600, debug = false)
    # Ensure that the hostname and port are set
    self.set_default_server unless !@host_name.nil?
  
    # Make sure that, at a minimum, the content type is set in the header
    header_dict["Content-Type"] = "application/json";
    
    uri  = URI::HTTPS.new('https', nil, @host_name, @port_number, nil, request, nil, nil, nil);
    if (debug)
      puts "POST to #{uri.to_s}"
      puts "Header: #{header_dict}"
      puts "Body: #{JSON.generate(body_dict)}"
    end

    http = Net::HTTP.new(@host_name, @port_number);
    http.read_timeout = timeout; # 10 minute default timeout
    http.use_ssl = true
    retval = http.post(uri.request_uri, JSON.generate(body_dict), header_dict);

    return retval
end
port_number() click to toggle source
# File lib/SensorStream.rb, line 25
def self.port_number
  return @port_number
end
port_number=(new_port) click to toggle source
# File lib/SensorStream.rb, line 21
def self.port_number=(new_port)
  @port_number = new_port
end
set_default_server() click to toggle source

Allows the SensorStream server to be overridden

# File lib/SensorStream.rb, line 30
def self.set_default_server
  @host_name = "dodeca.coas.oregonstate.edu"
  @port_number = 443
end