This commit is contained in:
yumoqing 2021-01-23 15:55:38 +08:00
parent b87cd5af45
commit 13fdea6429
2 changed files with 44 additions and 22 deletions

View File

@ -298,7 +298,7 @@ class Blocks(EventDispatcher):
raise Exception(desc)
widgetClass = desc['widgettype']
opts = desc.get('options',{}).copy()
opts = self.valueExpr(desc.get('options',{}).copy())
widget = None
try:
klass = wrap_ready(widgetClass)
@ -329,26 +329,23 @@ class Blocks(EventDispatcher):
continue
setattr(widget,k,w)
continue
setattr(widget,k,v)
setattr(widget,k,self.valueExpr(v,\
localnamespace={'self':widget}))
def build_rest(self, widget,desc,t=None):
self.subwidget_total = len(desc.get('subwidgets',[]))
self.subwidgets = [ None for i in range(self.subwidget_total)]
pos = 0
for pos,sw in enumerate(desc.get('subwidgets',[])):
params={
'desc':desc,
'widget':widget,
'pos':pos
}
b = Blocks()
kw = sw.copy()
w = b.widgetBuild(kw)
widget.add_widget(w)
for b in desc.get('binds',[]):
kw = b.copy()
self.buildBind(widget,b)
kw = self.valueExpr(b.copy(), \
localnamespace={'self':widget})
self.buildBind(widget,kw)
def buildBind(self,widget,desc):
wid = desc.get('wid','self')
@ -545,7 +542,7 @@ class Blocks(EventDispatcher):
desc,type(desc))
return None
desc = self.valueExpr(desc)
# desc = self.valueExpr(desc)
widget = self.w_build(desc)
self.dispatch('on_built',widget)
if hasattr(widget,'ready'):

View File

@ -5,33 +5,58 @@ from oscpy.server import OSCThreadServer
from oscpy.client import OSCClient
class OSCServer(EventDispatcher):
def __init__(self,addr='0.0.0.0', port=60405,apis=[]):
def __init__(self,addr='0.0.0.0',
port=60405,
apis=[]):
self.port = port
self.addr = addr
self.clients = []
self.osc_server = OSCThreadServer()
self.osc_server.listen(self.addr,port=self.port,default=True)
EventDispatcher.__init__(self)
apis.append('broadcast')
for api in apis:
self.register_event_type(api)
event_name = 'on_%s' % api
f = partial(self.handle, api)
setattr(self, api, f)
setattr(self, event_name, f)
self.register_event_type(event_name)
api_f = partial(self.apihandle,api)
bstr = '/%s' % api
bstr.encode('utf-8')
self.osc_server.bind(bstr, api_f)
def info(self):
return {
"address":self.osc_server.getaddress()
}
def __del__(self):
self.osc_server.stop_all()
self.osc_server.terminate_server()
self.osc_server.join_server()
def handle(self,api,o,*args):
print(api, *args)
def apihandle(self, api, *args):
self.dispatch(api,*args)
data = json.loads(args[0])
sock, ip_address, response_port = self.osc_server.get_sender()
self.dispatch(api,
{'address':address,
'data':data
})
if api == 'broadcast':
return
if not address in self.clients:
self.clients.append([ip_address, response_port])
def sendMessage(self,api='', addr=None, port=None, *args):
try:
bstr = '/%s' % api
bstr = bstr.encode('utf-8')
client = OSCClient(addr, port)
client.sendMessage(bstr, args)
except:
print('sendMessage error:',api, addr,port,args)
def send_message(self,api, data, addr, port):
data = json.dumps(data)
bstr = '/%s' % api
bstr = bstr.encode('utf-8')
self.osc_server.send_message(b'/broadcast', [data], addr, port)
def broadcast(self, data):
for address in self.clients:
self.osc_server.send_message('broadcast', data, *address)