created the rederer file
authorAndre L. V. Loureiro <loureiro.andrew@gmail.com>
Wed, 27 May 2009 23:19:48 +0000 (19:19 -0400)
committerAndre L. V. Loureiro <loureiro.andrew@gmail.com>
Wed, 27 May 2009 23:19:48 +0000 (19:19 -0400)
zukebox_render/src/zb_renderer.py [new file with mode: 0644]

diff --git a/zukebox_render/src/zb_renderer.py b/zukebox_render/src/zb_renderer.py
new file mode 100644 (file)
index 0000000..dc8df00
--- /dev/null
@@ -0,0 +1,89 @@
+
+from brisa.core.reactors import GLib2Reactor
+reactor = GLib2Reactor()
+
+import brisa
+brisa.__enable_offline_mode__ = True
+
+import os
+import dbus.mainloop.glib
+import dbus.service
+
+from brisa.core import config
+from brisa.upnp.device import Device
+from brisa.upnp.services.connmgr import ConnectionManagerRenderer
+
+from zukebox_renderer.services.avtransport import AVTransport
+from zukebox_renderer.services.render_control import RenderingControl
+
+dbus.mainloop.glib.DBusGMainLoop(set_as_default=True)
+
+class ZukeBoxRenderer(dbus.service.Object):
+    """ZukeBox Audio Renderer
+    ZukeBox Renderer allow "play" a stream of audio, that come from a 
+    ControlPoint or ZukeBox Audio Server.
+
+    ZukeBox Audio Renderer has a DBus interface where there are the
+    following methods:
+        halt() - Halts the ZukeBox renderer
+        ...
+    """
+    DBUS_SERVICE_NAME = "br.org.zagaia"
+    DBUS_OBJ_PATH = "/br/org/zagaia/zukebox/ZukeBoxRenderer"
+    DBUS_IFACE = "br.org.zagaia.zukebox.ZukeBoxRenderer"
+
+    def __init__(self, srv_name, listen_url=""):
+        """Constructor
+        @param srv_name:  the server name
+        @param listen_url: the url to be listen requests
+
+        @type srv_name: string
+        @type listen_url: string
+        """
+        bus = dbus.SessionBus()
+        busname = dbus.service.BusName(self.DBUS_IFACE, bus=bus)
+        dbus.service.Object.__init__(self, busname, self.DBUS_OBJ_PATH)
+
+        self.server_name = srv_name
+        self.listen_url = listen_url
+
+        self.device = None
+
+    def _create_device(self):
+        model_name = "ZukeBox Renderer version 0.1"
+        project_page = 'http://portal.fucapi.br/nepcomp/zagaia'
+        serial_no = "0000010"
+        self.device = Device('urn:schemas-upnp-org:device:ZukeBoxRenderer:1',
+                             self.server_name,
+                             force_listen_url=self.listen_url,
+                             manufacturer='ZukeBox Team. Zagaia Laboratory'
+                             manufacturer_url=project_page,
+                             model_description='A Renderer fo audio types',
+                             model_name=model_name,
+                             model_number=serial_no,
+                             model_url=project_page,
+                             serial_number=serial_no)
+
+    def _create_services(self):
+        mod_path = config.get_parameter("zukebox_render", "home")
+        x_path = os.path.join(mod_path, "xml_descriptions")
+
+        avt = AVTransport(x_path)
+        rc = RenderingControl(x_path, avt.get_player())
+        cm = ConnectionManagerRenderer()
+
+        self.device.add_service(cm)
+        self.device.add_service(avt)
+        self.device.add_service(rc)
+
+    def start(self):
+        self._create_device()
+        self._create_services()
+        self.device.start()
+        reactor.add_after_stop_func(self.device.stop)
+        reactor.main()
+
+    @dbus.service.method(DBUS_IFACE)
+    def halt(self):
+        reactor.main_quit()
+