From d25ae7b18a20c6e2dc2045abbf90598872a8a8d1 Mon Sep 17 00:00:00 2001 From: withgod Date: Thu, 4 Jun 2009 00:01:06 +0900 Subject: [PATCH] split mctl.py mctl.py base class MumbleCtlDbus.py MumbleCtlIce.py --- pyweb/mumble/mctl.py | 277 ++----------------------------------------- pyweb/settings.py | 4 +- 2 files changed, 11 insertions(+), 270 deletions(-) diff --git a/pyweb/mumble/mctl.py b/pyweb/mumble/mctl.py index a9005fb..9762242 100755 --- a/pyweb/mumble/mctl.py +++ b/pyweb/mumble/mctl.py @@ -6,7 +6,7 @@ #abc is better but 2.6 higher. #import abc -#from django.conf import settings +from django.conf import settings class MumbleCtlBase (): ''' abstract Ctrol Object ''' @@ -77,274 +77,17 @@ class MumbleCtlBase (): @staticmethod def newInstance(): # if dbus - #if settings.DAOTYPE == 'dbus': - #ret = MumbleCtlDbus() - ret = MumbleCtlIce() - #else: - # ret = MumbleCtlIce() - return ret - -import Ice -class MumbleCtlIce(MumbleCtlBase): - proxy = 'Meta:tcp -h 127.0.0.1 -p 6502' - slice = '/usr/share/slice/Murmur.ice' - meta = None - - def __init__(self): - self.meta = self._getIceMeta() - - def _getIceMeta(self): - Ice.loadSlice(self.slice) - ice = Ice.initialize() - import Murmur - prx = ice.stringToProxy(self.proxy) - return Murmur.MetaPrx.checkedCast(prx) - - def _getIceServerObject(self, srvid): - return self.meta.getServer(srvid); - - def getBootedServers(self): - ret = [] - for x in self.meta.getBootedServers(): - ret.append(x.id()) - return ret - - def getAllServers(self): - ret = [] - for x in self.meta.getAllServers(): - ret.append(x.id()) - return ret - - def getRegisteredPlayers(self, srvid): - users = self._getIceServerObject(srvid).getRegisteredPlayers('') - ret = [] - - for user in users: - ret.append([user.playerid, unicode(user.name), unicode(user.email), unicode(user.pw)]) - - return ret - - def getChannels(self, srvid): - chans = self._getIceServerObject(srvid).getChannels() - ret = [] - - for x in chans: - chan = chans[x] - ret.append([chan.id, unicode(chan.name), chan.parent, chan.links]) - - return ret - - def getPlayers(self, srvid): - users = self._getIceServerObject(srvid).getPlayers() - ret = [] - - for x in users: - user = users[x] - ret.append([user.session, user.mute, user.deaf, user.suppressed, user.selfMute, user.selfDeaf, user.channel, user.playerid, unicode(user.name), user.onlinesecs, user.bytespersec]) - - return ret - - def getACL(self, srvid, identifier): - import Murmur - acls = self._getIceServerObject(srvid).getACL(identifier) - ret = [] - for x in acls: - if isinstance(x, list): - tmp = [] - for y in x: - if y.__class__ is Murmur.ACL: - tmp.append([y.applyHere, y.applySubs, y.inherited, y.playerid, unicode(y.group), y.allow, y.deny]) - elif y.__class__ is Murmur.Group: - tmp.append([unicode(y.name), y.inherited, y.inherit, y.inheritable, y.add, y.remove, y.members]) - - ret.append(tmp) - else: - ret.append(x) - - return ret - - def getDefaultConf(self): - return MumbleCtlIce.setUnicodeFlag(self.meta.getDefaultConf()) - - def getAllConf(self, srvid): - return MumbleCtlIce.setUnicodeFlag(self._getIceServerObject(srvid).getAllConf()) - - def newServer(self): - return self.meta.newServer().id() - - def deleteServer( self, srvid ): - if self._getIceServerObject(srvid).isRunning(): - self._getIceServerObject(srvid).stop() - self._getIceServerObject(srvid).delete() - - def setSuperUserPassword(self, srvid, value): - self.meta.setSuperUserPassword(srvid, value) - - def setConf(self, srvid, key, value): - #print "%s server %s/%s" % (srvid, key, value) - self._getIceServerObject(srvid).setConf(key, value) - - def registerPlayer(self, srvid, name): - return self._getIceServerObject(srvid).registerPlayer(name) - - def unregisterPlayer(self, srvid, mumbleid): - self._getIceServerObject(srvid).unregisterPlayer(mumbleid) - - def setRegistration(self, srvid, mumbleid, name, email, password): - user = self._getIceServerObject(srvid).getRegistration(mumbleid) - user.name = name - user.email = email - user.pw = password - #print user - # update*r*egistration r is lowercase... - return self._getIceServerObject(srvid).updateregistration(user) - - def setACL(self, srvid, acl): - ''' - print "xxxx" - print srvid - print acl - print "--" - print acl.pack() - print "xxxx" - ''' - import Murmur - tmp = acl.pack() - id = tmp[0] - _acls = tmp[1] - acls = [] - _groups = tmp[2] - groups = [] - inherit = tmp[3] - - for x in _acls: - acl = Murmur.ACL() - acl.applyHere = x[0] - acl.applySubs = x[1] - acl.inherited = x[2] - acl.playerid = x[3] - acl.group = x[4] - acl.allow = x[5] - acl.deny = x[6] - acls.append(acl) - - for x in _groups: - group = Murmur.Group() - group.name = x[0] - group.inherited = x[1] - group.inherit = x[2] - group.inheritable = x[3] - group.add = x[4] - group.remove = x[5] - group.members = x[6] - groups.append(group) - - self._getIceServerObject(srvid).setACL(id, acls, groups, inherit) - - @staticmethod - def setUnicodeFlag(data): - ret = {} - for key in data.keys(): - ret[unicode(key)] = unicode(data[key]) - return ret - -import dbus -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 getAllConf(self, srvid): - return MumbleCtlDbus.converDbusTypeToNative(self.meta.getAllConf(dbus.Int32(srvid))) - - def setConf(self, srvid, key, value): - self.meta.setConf(dbus.Int32( srvid ), key, value) - - def getDefaultConf(self): - return MumbleCtlDbus.converDbusTypeToNative(self.meta.getDefaultConf()) - - def deleteServer( self, srvid ): - srvid = dbus.Int32( srvid ) - if self.meta.isBooted( srvid ): - self.meta.stop( srvid ) - - self.meta.deleteServer( srvid ) - - def newServer(self): - return self.meta.newServer() - - def registerPlayer(self, srvid, name): - return MumbleCtlDbus.converDbusTypeToNative(self._getDbusServerObject(srvid).registerPlayer(name)) - - def unregisterPlayer(self, srvid, mumbleid): - self._getDbusServerObject(srvid).unregisterPlayer(dbus.Int32( mumbleid )) - - def getChannels(self, srvid): - return MumbleCtlDbus.converDbusTypeToNative(self._getDbusServerObject(srvid).getChannels()) - - def getPlayers(self, srvid): - return MumbleCtlDbus.converDbusTypeToNative(self._getDbusServerObject(srvid).getPlayers()) - - def getRegisteredPlayers(self, srvid): - return MumbleCtlDbus.converDbusTypeToNative(self._getDbusServerObject(srvid).getRegisteredPlayers('')) - - def getACL(self, srvid, identifier): - return MumbleCtlDbus.converDbusTypeToNative(self._getDbusServerObject(srvid).getACL(identifier)) - - def setACL(self, srvid, acl): - self._getDbusServerObject(srvid).setACL(*acl.pack()) - - def getBootedServers(self): - return MumbleCtlDbus.converDbusTypeToNative(self.meta.getBootedServers()) - - def getAllServers(self): - return MumbleCtlDbus.converDbusTypeToNative(self.meta.getAllServers()) - - def setSuperUserPassword(self, srvid, value): - self.meta.setSuperUserPassword(dbus.Int32(srvid), value) - - def setRegistration(self, srvid, mumbleid, name, email, password): - return MumbleCtlDbus.converDbusTypeToNative(self._getDbusServerObject(srvid).setRegistration(dbus.Int32(mumbleid), dbus.String(name), dbus.String(email), dbus.String(password))) - - @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)) - elif data.__class__ is dbus.Dictionary: - ret = {} - for x in data.items(): - ret[MumbleCtlDbus.converDbusTypeToNative(x[0])] = MumbleCtlDbus.converDbusTypeToNative(x[1]) - else: - if data.__class__ is dbus.Boolean: - ret = bool(data) - elif data.__class__ is dbus.String: - ret = unicode(data) - elif data.__class__ is dbus.Int32 or data.__class__ is dbus.UInt32: - ret = int(data) - return ret + if settings.DAOTYPE == 'dbus': + from MumbleCtlDbus import MumbleCtlDbus + return MumbleCtlDbus() + else: + from MumbleCtlIce import MumbleCtlIce + return MumbleCtlIce() if __name__ == "__main__": - import sys + import sys + from MumbleCtlIce import MumbleCtlIce + from MumbleCtlDbus import MumbleCtlDbus x = int(sys.argv[1]) dbusCtl = MumbleCtlDbus() iceCtl = MumbleCtlIce() diff --git a/pyweb/settings.py b/pyweb/settings.py index 04372c0..03f26d3 100755 --- a/pyweb/settings.py +++ b/pyweb/settings.py @@ -56,10 +56,8 @@ if not MUMBLE_DJANGO_ROOT or not exists( MUMBLE_DJANGO_ROOT ): DEBUG = True TEMPLATE_DEBUG = DEBUG +#DAOTYPE='ice' DAOTYPE='dbus' -ICE_SLICE='/usr/share/slice/Murmur.ice' -ICE_PROXY='Meta:tcp -h 127.0.0.1 -p 6502' - ADMINS = ( # ('Your Name', 'your_email@domain.com'),