withgod
16 years ago
4 changed files with 198 additions and 71 deletions
-
153pyweb/mumble/mctl.py
-
11pyweb/mumble/mmobjects.py
-
93pyweb/mumble/models.py
-
0pyweb/mumble/views.py
@ -0,0 +1,153 @@ |
|||
# -*- coding: utf-8 -*- |
|||
# mumble-django contributed by withgod@sourceforge.net |
|||
|
|||
import dbus |
|||
|
|||
#zope.interface is good but don't standard interface library |
|||
#abc is better but 2.6 higher. |
|||
#import abc |
|||
|
|||
#from django.conf import settings |
|||
|
|||
class MumbleCtlBase (): |
|||
''' abstract Ctrol Object ''' |
|||
|
|||
def setConf(self, srvid, key, value): |
|||
pass |
|||
|
|||
def getValue(self, srvid, key): |
|||
pass |
|||
|
|||
def newServer(self): |
|||
pass |
|||
|
|||
def setSuperUserPassword(self, srvid, value): |
|||
pass |
|||
|
|||
def start(self, srvid): |
|||
pass |
|||
|
|||
def stop(self, srvid): |
|||
pass |
|||
|
|||
def isBooted(self, srvid): |
|||
pass |
|||
|
|||
def deleteServer(self, srvid): |
|||
pass |
|||
|
|||
def getUsers(self, srvid): |
|||
pass |
|||
|
|||
def getPlayers(self, srvid): |
|||
pass |
|||
|
|||
def getChannels(self, srvid): |
|||
pass |
|||
|
|||
def registerPlayer(self, srvid, name): |
|||
pass |
|||
|
|||
def setRegistration(self, mumbleid, name, email, password): |
|||
pass |
|||
|
|||
def getBootedServers(self): |
|||
pass |
|||
|
|||
def getACL(self, srvid, identifier): |
|||
pass |
|||
|
|||
@staticmethod |
|||
def newInstance(): |
|||
# if dbus |
|||
#if settings.DAOTYPE == 'dbus': |
|||
ret = MumbleCtlDbus() |
|||
#else: |
|||
# ret = MumbleCtlIce() |
|||
return ret |
|||
|
|||
class MumbleCtlDbus(MumbleCtlBase): |
|||
meta = None |
|||
dbus_base='net.sourceforge.mumble.murmur' |
|||
|
|||
def __init__(self): |
|||
# Prior to saving the model, connect to murmur via dbus and update its settings. |
|||
self.meta = self._getDbusMeta(); |
|||
|
|||
def _getDbusMeta( self ): |
|||
return dbus.Interface( dbus.SystemBus().get_object( self.dbus_base, '/' ), 'net.sourceforge.mumble.Meta' ); |
|||
|
|||
def _getDbusServerObject( self, srvid): |
|||
"Connects to DBus and returns an mmServer object representing this Murmur instance." |
|||
|
|||
if srvid not in self.getBootedServers(): |
|||
raise Exception, 'No murmur process with the given server ID (%d) is running and attached to system dbus under %s.' % ( srvid, self.meta ); |
|||
|
|||
return dbus.Interface( dbus.SystemBus().get_object( self.dbus_base, '/%d' % srvid ), 'net.sourceforge.mumble.Murmur' ); |
|||
|
|||
def setConf(self, srvid, key, value): |
|||
srvid = dbus.Int32( srvid ) |
|||
self.meta.setConf(srvid, key, value) |
|||
|
|||
def deleteServer( self, srvid ): |
|||
srvid = dbus.Int32( srvid ); |
|||
if self.meta.isBooted( srvid ): |
|||
self.meta.stop( srvid ); |
|||
self.meta.deleteServer( srvid ); |
|||
|
|||
def registerPlayer(self, name): |
|||
pass |
|||
|
|||
def getChannels(self, srvid): |
|||
return MumbleCtlDbus.converDbusTypeToNative(self._getDbusServerObject(srvid).getChannels()) |
|||
|
|||
def getPlayers(self, srvid): |
|||
return MumbleCtlDbus.converDbusTypeToNative(self._getDbusServerObject(srvid).getPlayers()) |
|||
|
|||
def getACL(self, srvid, identifier): |
|||
return MumbleCtlDbus.converDbusTypeToNative(self._getDbusServerObject(srvid).getACL(identifier)) |
|||
|
|||
def getBootedServers(self): |
|||
return MumbleCtlDbus.converDbusTypeToNative(self.meta.getBootedServers()) |
|||
|
|||
def setSuperUserPassword(self, srvid, value): |
|||
self.meta.setSuperUserPassword(dbus.Int32(srvid), value) |
|||
|
|||
def registerPlayer(self, srvid, name): |
|||
return MumbleCtlDbus.converDbusTypeToNative(self._getDbusServerObject(srvid).registerPlayer(srvid, name)) |
|||
|
|||
@staticmethod |
|||
def converDbusTypeToNative(data): |
|||
#i know dbus.* type is extends python native type. |
|||
#but dbus.* type is not native type. it's not good transparent for using Ice/Dbus. |
|||
ret = None |
|||
|
|||
if isinstance(data, tuple) or type(data) is data.__class__ is dbus.Array or data.__class__ is dbus.Struct : |
|||
ret = [] |
|||
for x in data: |
|||
ret.append(MumbleCtlDbus.converDbusTypeToNative(x)) |
|||
else: |
|||
if data.__class__ is dbus.Boolean: |
|||
ret = bool(data) |
|||
elif data.__class__ is dbus.String: |
|||
ret = str(data) |
|||
elif data.__class__ is dbus.Int32 or data.__class__ is dbus.UInt32: |
|||
ret = int(data) |
|||
return ret |
|||
|
|||
if __name__ == "__main__": |
|||
print "--- test start" |
|||
#ctl = MumbleCtlBase.newInstance() |
|||
ctl = MumbleCtlDbus() |
|||
print ctl |
|||
print ctl.meta |
|||
print "booted server", ctl.getBootedServers() |
|||
print "chans" |
|||
print ctl.getChannels(1) |
|||
print "users" |
|||
print ctl.getPlayers(1) |
|||
print "getACL", ctl.getACL(1, 0) |
|||
print ctl.getACL(1, 0)[0].__class__ is dbus.Array |
|||
|
|||
print "--- test end" |
|||
|
Write
Preview
Loading…
Cancel
Save
Reference in new issue