Random cleanup/implementation fairy of fun
[theonering] / src / connection_manager.py
1 import logging
2
3 import gobject
4 import telepathy
5
6 import constants
7 import connection
8
9
10 class TheOneRingConnectionManager(telepathy.server.ConnectionManager):
11
12         def __init__(self, shutdown_func=None):
13                 telepathy.server.ConnectionManager.__init__(self, constants._telepathy_implementation_name_)
14
15                 self._protos[constants._telepathy_protocol_name_] = connection.TheOneRingConnection
16                 self._on_shutdown = shutdown_func
17                 logging.info("Connection manager created")
18
19         def GetParameters(self, proto):
20                 """
21                 @returns the mandatory and optional parameters for creating a connection
22                 """
23                 if proto not in self._protos:
24                         raise telepathy.NotImplemented('unknown protocol %s' % proto)
25
26                 result = []
27                 ConnectionClass = self._protos[proto]
28                 mandatoryParameters = ConnectionClass.MANDATORY_PARAMETERS
29                 optionalParameters = ConnectionClass.OPTIONAL_PARAMETERS
30                 defaultParameters = ConnectionClass.PARAMETER_DEFAULTS
31
32                 for parameterName, parameterType in mandatoryParameters.iteritems():
33                         param = (
34                                 parameterName,
35                                 telepathy.CONN_MGR_PARAM_FLAG_REQUIRED,
36                                 parameterType,
37                                 '',
38                         )
39                         result.append(param)
40
41                 for parameterName, parameterType in optionalParameters.iteritems():
42                         if parameterName in defaultParameters:
43                                 param = (
44                                         parameterName,
45                                         telepathy.CONN_MGR_PARAM_FLAG_HAS_DEFAULT,
46                                         parameterName,
47                                         defaultParameters[parameterName],
48                                 )
49                         else:
50                                 param = (parameterName, 0, parameterName, '')
51                         result.append(param)
52
53                 return result
54
55         def disconnected(self, conn):
56                 result = telepathy.server.ConnectionManager.disconnected(self, conn)
57                 gobject.timeout_add(5000, self.shutdown)
58
59         def quit(self):
60                 """
61                 Terminates all connections. Must be called upon quit
62                 """
63                 for connection in self._connections:
64                         connection.Disconnect()
65                 logging.info("Connection manager quitting")
66
67         def _shutdown(self):
68                 if (
69                         self._on_shutdown is not None and
70                         len(self._connections) == 0
71                 ):
72                         self._on_shutdown()
73                 return False