mirror of
https://github.com/realXtend/OpensimPython.git
synced 2026-08-14 09:12:08 +00:00
98 lines
2.9 KiB
Python
98 lines
2.9 KiB
Python
import clr
|
|
clr.AddReference('OpenSim.Framework')
|
|
clr.AddReference('OpenSim.Region.Framework')
|
|
|
|
import sys
|
|
sys.path.append('/usr/lib/python2.6/') #'ScriptEngines/Lib') # stdlib seems to live here
|
|
|
|
from OpenSim.Region.Framework.Interfaces import IRegionModule
|
|
#import textcreate, pictureframe, toggleboxcolor, oukautil
|
|
import webframeserver
|
|
|
|
class PyReloader(IRegionModule):
|
|
upgradable = False
|
|
regpymods = [webframeserver] #textcreate, pictureframe, toggleboxcolor, oukautil]
|
|
reginstances = []
|
|
|
|
def Initialise(self, scene, configsource):
|
|
self.scene = scene
|
|
self.config = configsource
|
|
scene.AddCommand(self, "py-reload", "py-reload", "...", self.cmd_py_reload)
|
|
print self, 'initialised with', scene
|
|
|
|
def PostInitialise(self):
|
|
print self, 'post-initialise'
|
|
|
|
def Close(self):
|
|
print self, 'close'
|
|
|
|
def getname(self):
|
|
return "MyRegionModule"
|
|
|
|
Name = property(getname)
|
|
|
|
def isshared(self):
|
|
return False
|
|
|
|
IsSharedModule = property(isshared)
|
|
|
|
def cmd_py_reload(self, modname, args):
|
|
try:
|
|
self.reload(modname, args)
|
|
except Exception, e:
|
|
print 'err or'
|
|
import traceback
|
|
traceback.print_exc()
|
|
raise
|
|
|
|
def reload(self, modname, args):
|
|
print 'closing modules'
|
|
for ri in self.reginstances:
|
|
print "found", ri, "in reginstances"
|
|
if ri.Name in self.scene.Modules:
|
|
print "also found in modules, so marking removed"
|
|
ri.removed = True
|
|
print "removing", ri.Name, "from self.scene.Modules"
|
|
self.scene.Modules.Remove(ri.Name)
|
|
else:
|
|
print "not found in modules so not removing"
|
|
ri.Close()
|
|
|
|
self.reginstances[:] = []
|
|
|
|
print 'reloading modules & looking for region classes'
|
|
regclasses = []
|
|
for m in self.regpymods:
|
|
reload(m)
|
|
for name in dir(m):
|
|
o = getattr(m, name)
|
|
if name.startswith('_'):
|
|
continue
|
|
try:
|
|
x = issubclass(o, IRegionModule)
|
|
except TypeError:
|
|
pass
|
|
else:
|
|
if x and getattr(o, 'autoload', None):
|
|
print 'found', name
|
|
regclasses.append(o)
|
|
|
|
print 'instantiating found regions'
|
|
for klass in regclasses:
|
|
ri = klass()
|
|
ri.Initialise(self.scene, self.config)
|
|
self.scene.AddModule(ri.Name, ri)
|
|
print "register instance", ri
|
|
self.reginstances.append(ri)
|
|
ri.PostInitialise()
|
|
print 'reload done'
|
|
|
|
loader = None
|
|
|
|
def sceneinit(scene, config):
|
|
global loader
|
|
loader = PyReloader()
|
|
loader.Initialise(scene, config)
|
|
loader.PostInitialise()
|
|
loader.cmd_py_reload('', [])
|