diff -r 7f7912ae5ee8 -r 87c925eaaa3a Beremiz_service.py --- a/Beremiz_service.py Sat Jan 17 02:34:45 2009 +0100 +++ b/Beremiz_service.py Sat Jan 17 02:36:46 2009 +0100 @@ -38,7 +38,7 @@ """%sys.argv[0] try: - opts, args = getopt.getopt(sys.argv[1:], "i:p:n:x:h") + opts, argv = getopt.getopt(sys.argv[1:], "i:p:n:x:h") except getopt.GetoptError, err: # print help information and exit: print str(err) # will print something like "option -a not recognized" @@ -73,14 +73,14 @@ usage() sys.exit() -if len(args) > 1: +if len(argv) > 1: usage() sys.exit() -elif len(args) == 1: - WorkingDir = args[0] -elif len(args) == 0: +elif len(argv) == 1: + WorkingDir = argv[0] +elif len(argv) == 0: WorkingDir = os.getcwd() - args=[WorkingDir] + argv=[WorkingDir] if enablewx: try: @@ -351,20 +351,20 @@ os.mkdir(WorkingDir) class Server(): - def __init__(self, name, ip, port, workdir, args): + def __init__(self, name, ip, port, workdir, argv, statuschange=None, evaluator=eval): self.continueloop = True self.daemon = None self.name = name self.ip = ip self.port = port self.workdir = workdir - self.args = args + self.argv = argv self.plcobj = None self.servicepublisher = None - self.statuschange = None - - def Loop(self, statuschange=None): self.statuschange = statuschange + self.evaluator = evaluator + + def Loop(self): while self.continueloop: self.Start() @@ -378,7 +378,7 @@ def Start(self): pyro.initServer() self.daemon=pyro.Daemon(host=self.ip, port=self.port) - self.plcobj = PLCObject(self.workdir, self.daemon, self.args, self.statuschange) + self.plcobj = PLCObject(self.workdir, self.daemon, self.argv, self.statuschange, self.evaluator) uri = self.daemon.connect(self.plcobj,"PLCObject") print "The daemon runs on port :",self.port @@ -402,15 +402,32 @@ del self.servicepublisher self.daemon.shutdown(True) -pyroserver = Server(name, ip, port, WorkingDir, args) if havewx: + from threading import Semaphore + wx_eval_lock = Semaphore(0) app=wx.App(redirect=False) - taskbar_instance = BeremizTaskBarIcon(pyroserver) def statuschange(status): wx.CallAfter(taskbar_instance.UpdateIcon,status) - pyro_thread=Thread(target=pyroserver.Loop, args=[statuschange]) + + eval_res = None + def wx_evaluator(callable, *args, **kwargs): + global eval_res + eval_res=callable(*args,**kwargs) + #print eval_res + wx_eval_lock.release() + + def evaluator(callable, *args, **kwargs): + wx.CallAfter(wx_evaluator,callable,*args,**kwargs) + wx_eval_lock.acquire() + return eval_res + + pyroserver = Server(name, ip, port, WorkingDir, argv, statuschange, evaluator) + taskbar_instance = BeremizTaskBarIcon(pyroserver) + + pyro_thread=Thread(target=pyroserver.Loop) pyro_thread.start() app.MainLoop() else: + pyroserver = Server(name, ip, port, WorkingDir, argv) pyroserver.Loop()