Forked mumble-django project from https://bitbucket.org/Svedrin/mumble-django
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

202 lines
5.3 KiB

  1. # -*- coding: utf-8 -*-
  2. # mumble-django contributed by withgod@sourceforge.net
  3. import dbus
  4. #zope.interface is good but don't standard interface library
  5. #abc is better but 2.6 higher.
  6. #import abc
  7. #from django.conf import settings
  8. class MumbleCtlBase ():
  9. ''' abstract Ctrol Object '''
  10. def getAllConf(self, srvid):
  11. pass
  12. def setConf(self, srvid, key, value):
  13. pass
  14. def getDefaultConf(self):
  15. pass
  16. def getValue(self, srvid, key):
  17. pass
  18. def newServer(self):
  19. pass
  20. def setSuperUserPassword(self, srvid, value):
  21. pass
  22. def start(self, srvid):
  23. pass
  24. def stop(self, srvid):
  25. pass
  26. def isBooted(self, srvid):
  27. pass
  28. def deleteServer(self, srvid):
  29. pass
  30. def getUsers(self, srvid):
  31. pass
  32. def getPlayers(self, srvid):
  33. pass
  34. def getRegisteredPlayers(self, srvid):
  35. pass
  36. def getChannels(self, srvid):
  37. pass
  38. def registerPlayer(self, srvid, name):
  39. pass
  40. def setRegistration(self, srvid, mumbleid, name, email, password):
  41. pass
  42. def unregisterPlayer(self, srvid, mumbleid):
  43. pass
  44. def getBootedServers(self):
  45. pass
  46. def getAllServers(self):
  47. pass
  48. def getACL(self, srvid, identifier):
  49. pass
  50. def setACL(self, srvid, acl):
  51. pass
  52. @staticmethod
  53. def newInstance():
  54. # if dbus
  55. #if settings.DAOTYPE == 'dbus':
  56. ret = MumbleCtlDbus()
  57. #else:
  58. # ret = MumbleCtlIce()
  59. return ret
  60. class MumbleCtlDbus(MumbleCtlBase):
  61. meta = None
  62. dbus_base='net.sourceforge.mumble.murmur'
  63. def __init__(self):
  64. # Prior to saving the model, connect to murmur via dbus and update its settings.
  65. self.meta = self._getDbusMeta();
  66. def _getDbusMeta( self ):
  67. return dbus.Interface( dbus.SystemBus().get_object( self.dbus_base, '/' ), 'net.sourceforge.mumble.Meta' );
  68. def _getDbusServerObject( self, srvid):
  69. "Connects to DBus and returns an mmServer object representing this Murmur instance."
  70. if srvid not in self.getBootedServers():
  71. raise Exception, 'No murmur process with the given server ID (%d) is running and attached to system dbus under %s.' % ( srvid, self.meta );
  72. return dbus.Interface( dbus.SystemBus().get_object( self.dbus_base, '/%d' % srvid ), 'net.sourceforge.mumble.Murmur' );
  73. def getAllConf(self, srvid):
  74. return MumbleCtlDbus.converDbusTypeToNative(self.meta.getAllConf(dbus.Int32(srvid)))
  75. def setConf(self, srvid, key, value):
  76. self.meta.setConf(dbus.Int32( srvid ), key, value)
  77. def getDefaultConf(self):
  78. return MumbleCtlDbus.converDbusTypeToNative(self.meta.getDefaultConf())
  79. def deleteServer( self, srvid ):
  80. srvid = dbus.Int32( srvid )
  81. if self.meta.isBooted( srvid ):
  82. self.meta.stop( srvid )
  83. self.meta.deleteServer( srvid )
  84. def newServer(self):
  85. return self.meta.newServer()
  86. def registerPlayer(self, srvid, name):
  87. return MumbleCtlDbus.converDbusTypeToNative(self._getDbusServerObject(srvid).registerPlayer(name))
  88. def unregisterPlayer(self, srvid, mumbleid):
  89. self._getDbusServerObject(srvid).unregisterPlayer(dbus.Int32( mumbleid ))
  90. def getChannels(self, srvid):
  91. return MumbleCtlDbus.converDbusTypeToNative(self._getDbusServerObject(srvid).getChannels())
  92. def getPlayers(self, srvid):
  93. return MumbleCtlDbus.converDbusTypeToNative(self._getDbusServerObject(srvid).getPlayers())
  94. def getRegisteredPlayers(self, srvid):
  95. return MumbleCtlDbus.converDbusTypeToNative(self._getDbusServerObject(srvid).getRegisteredPlayers(''))
  96. def getACL(self, srvid, identifier):
  97. return MumbleCtlDbus.converDbusTypeToNative(self._getDbusServerObject(srvid).getACL(identifier))
  98. def setACL(self, srvid, acl):
  99. self._getDbusServerObject(srvid).setACL(*acl.pack())
  100. def getBootedServers(self):
  101. return MumbleCtlDbus.converDbusTypeToNative(self.meta.getBootedServers())
  102. def getAllServers(self):
  103. return MumbleCtlDbus.converDbusTypeToNative(self.meta.getAllServers())
  104. def setSuperUserPassword(self, srvid, value):
  105. self.meta.setSuperUserPassword(dbus.Int32(srvid), value)
  106. def setRegistration(self, srvid, mumbleid, name, email, password):
  107. return MumbleCtlDbus.converDbusTypeToNative(self._getDbusServerObject(srvid).setRegistration(dbus.Int32(mumbleid), dbus.String(name), dbus.String(email), dbus.String(password)))
  108. @staticmethod
  109. def converDbusTypeToNative(data):
  110. #i know dbus.* type is extends python native type.
  111. #but dbus.* type is not native type. it's not good transparent for using Ice/Dbus.
  112. ret = None
  113. if isinstance(data, tuple) or type(data) is data.__class__ is dbus.Array or data.__class__ is dbus.Struct:
  114. ret = []
  115. for x in data:
  116. ret.append(MumbleCtlDbus.converDbusTypeToNative(x))
  117. elif data.__class__ is dbus.Dictionary:
  118. ret = {}
  119. for x in data.items():
  120. ret[MumbleCtlDbus.converDbusTypeToNative(x[0])] = MumbleCtlDbus.converDbusTypeToNative(x[1])
  121. else:
  122. if data.__class__ is dbus.Boolean:
  123. ret = bool(data)
  124. elif data.__class__ is dbus.String:
  125. ret = unicode(data)
  126. elif data.__class__ is dbus.Int32 or data.__class__ is dbus.UInt32:
  127. ret = int(data)
  128. return ret
  129. if __name__ == "__main__":
  130. print "--- test start"
  131. #ctl = MumbleCtlBase.newInstance()
  132. ctl = MumbleCtlDbus()
  133. print ctl
  134. print ctl.meta
  135. print "booted server", ctl.getBootedServers()
  136. print "chans"
  137. print ctl.getChannels(1)
  138. print "users"
  139. print ctl.getPlayers(1)
  140. print "getACL", ctl.getACL(1, 0)
  141. print ctl.getACL(1, 0)[0].__class__ is dbus.Array
  142. print "getAllServers()"
  143. print ctl.getAllServers()
  144. print "getDefaultConf()"
  145. print ctl.getDefaultConf()
  146. print "getAllConf(1)"
  147. print ctl.getAllConf(1)
  148. print "--- test end"