class UPnPDevice

Attributes

base_url[RW]
child_devices[RW]
services[RW]

Public Class Methods

new() click to toggle source
# File lib/upnp_model.rb, line 55
def initialize
  @child_devices = []
  @services = []
end
read(xml) click to toggle source
# File lib/upnp_model.rb, line 157
def UPnPDevice.read(xml)
  doc = Nokogiri::XML(xml)
  doc.root.elements.each do |elem|
    if elem.name == 'specVersion'
      spec_version = UPnPSpecVersion.read_xml_node elem
    elsif elem.name == 'device'
      return UPnPDevice.read_xml_node elem
    end
  end
  nil
end
read_xml_node(node) click to toggle source
# File lib/upnp_model.rb, line 169
def UPnPDevice.read_xml_node(node)
  device = UPnPDevice.new 
  node.elements.each do |elem|
    if elem.elements.empty?
      device[elem.name] = elem.text
    elsif elem.name == 'deviceList'
      elem.elements.each do |device_node|
        if device_node.name == 'device'
          device.child_devices << UPnPDevice.read_xml_node(device_node)
        end
      end
    elsif elem.name == 'serviceList'
      elem.elements.each do |service_node|
        if service_node.name == 'service'
          device.services << UPnPService.read_xml_node(service_node)
        end
      end
    end
  end
  device
end
to_xml_doc(device) click to toggle source
# File lib/upnp_model.rb, line 145
def UPnPDevice.to_xml_doc(device)
  root = XmlTag.new 'root'
  root.attributes['xmlns'] = 'urn:schemas-upnp-org:device-1-0'

  specVersion = root.append(XmlTag.new('specVersion'))
  specVersion.append(XmlTag.new('major')).append(XmlText.new(1))
  specVersion.append(XmlTag.new('major')).append(XmlText.new(0))
  
  root.append device.to_xml
  return '<?xml version="1.0" encoding="UTF-8"?>' + "\n#{root}"
end

Public Instance Methods

all_devices() click to toggle source
# File lib/upnp_model.rb, line 101
def all_devices
  devices = []
  devices << self
  @child_devices.each do |device|
    devices += device.all_devices
  end
  return devices
end
all_services() click to toggle source
# File lib/upnp_model.rb, line 110
def all_services
  services = @services
  @child_devices.each do |device|
    services += device.all_services
  end
  return services
end
all_usn() click to toggle source
# File lib/upnp_model.rb, line 71
def all_usn
  usn_list = []
  usn_list << usn
  @services.each do |service|
    usn_list << udn + '::' + service.service_type
  end
  @child_devices.each do |device|
    usn_list += device.all_usn
  end
  return usn_list
end
get_device(type) click to toggle source
# File lib/upnp_model.rb, line 83
def get_device(type)
  all_devices.each do |device|
    if device.device_type == type
      return device
    end
  end
  nil
end
get_service(type) click to toggle source
# File lib/upnp_model.rb, line 92
def get_service(type)
  all_services.each do |service|
    if service.service_type == type
      return service
    end
  end
  nil
end
to_s() click to toggle source
# File lib/upnp_model.rb, line 118
def to_s
  "UPnPDevice -- '#{friendly_name}' (#{udn})"
end
to_xml() click to toggle source
# File lib/upnp_model.rb, line 122
def to_xml
  device = XmlTag.new 'device'
  self.each { |k,v|
    device.append(XmlTag.new(k)).append(XmlText.new(v))
  }

  if @services.any?
    serviceList = device.append XmlTag.new('serviceList')
    @services.each { |service|
      serviceList.append service.to_xml
    }
  end
  
  if @child_devices.any?
    deviceList = device.append XmlTag.new('deviceList')
    @child_devices.each { |device|
      deviceList.append device.to_xml
    }
  end
  return device.to_s
end
usn() click to toggle source
# File lib/upnp_model.rb, line 67
def usn
  return udn + '::' + device_type
end