instrumentation: add next-share/
[cs-p2p-next.git] / instrumentation / next-share / BaseLib / UPnP / upnpserver / upnpserverconsole.py
1 # Written by Ingar Arntzen
2 # see LICENSE.txt for license information
3
4 """
5 This module implements a console interface to a UPnP server.
6 """
7
8 ##############################################
9 # UPNP SERVER CONSOLE
10 ##############################################
11
12 from upnpserver import UPnPServer
13 from BaseLib.UPnP.services import SwitchPower, URLService
14 from BaseLib.UPnP.services import BookmarkService
15 from BaseLib.UPnP.common.objectconsole import ObjectConsole
16 from BaseLib.UPnP.common.taskrunner import TaskRunner
17
18 class UPnPServerConsole:
19
20     """This class wraps ObjectConsole to implement a 
21     custom console for UPnP server."""
22
23     def __init__(self):
24         
25         # Task Runner
26         self._task_runner = TaskRunner()
27
28         # UPnP Server        
29         self._server = UPnPServer(self._task_runner, "Product 1.0")
30         
31         # Switch Power Service
32         service_id = "SwitchPower"
33         service = SwitchPower(service_id)
34         self._server.add_service(service)
35
36         # URL Service
37         service_id_2 = "URLService"
38         service_2 = URLService(service_id_2)
39         self._server.add_service(service_2)
40
41         # Bookmark Service
42         service_3 = BookmarkService()
43         self._server.add_service(service_3)
44
45         # Console Namespace
46         name_space = {}
47         root_device = self._server.get_root_device()
48         name_space[root_device.name] = root_device
49         name_space[service_id] = service
50         name_space[service_id_2] = service_2
51         name_space[service_3.get_short_service_id()] = service_3
52         name_space['add_service'] = self._server.add_service
53         name_space['get_service'] = self._server.get_service
54         name_space['get_services'] = self._server.get_service_ids
55         name_space['announce'] = self._server.announce
56
57         self._console = ObjectConsole(self, name_space, 
58                                       run="_run", 
59                                       stop="_stop", name="UPnP Server")
60
61     def _run(self):
62         """Start TaskRunner."""
63         self._task_runner.run_forever()
64
65     def _stop(self):
66         """Stop UPnPServer and TaskRunner"""
67         self._server.close()
68         self._task_runner.stop()
69
70
71     def run(self):
72         """Runs the UPnP Console."""
73         self._console.run()
74
75
76
77 ##############################################
78 # MAIN
79 ##############################################
80
81 if __name__ == '__main__':
82
83     UPnPServerConsole().run()
84
85     
86     
87
88
89
90