Beremiz_service.py
changeset 1740 b789b695b5c6
parent 1739 ec153828ded2
child 1741 dd94b9a68c61
equal deleted inserted replaced
1739:ec153828ded2 1740:b789b695b5c6
   117 if __name__ == '__main__':
   117 if __name__ == '__main__':
   118     __builtin__.__dict__['_'] = lambda x: x
   118     __builtin__.__dict__['_'] = lambda x: x
   119 
   119 
   120 
   120 
   121 def Bpath(*args):
   121 def Bpath(*args):
   122     return os.path.join(beremiz_dir,*args)
   122     return os.path.join(beremiz_dir, *args)
   123 
   123 
   124 
   124 
   125 def SetupI18n():
   125 def SetupI18n():
   126     # Import module for internationalization
   126     # Import module for internationalization
   127     import gettext
   127     import gettext
   128 
   128 
   129     # Get folder containing translation files
   129     # Get folder containing translation files
   130     localedir = os.path.join(beremiz_dir,"locale")
   130     localedir = os.path.join(beremiz_dir, "locale")
   131     # Get the default language
   131     # Get the default language
   132     langid = wx.LANGUAGE_DEFAULT
   132     langid = wx.LANGUAGE_DEFAULT
   133     # Define translation domain (name of translation files)
   133     # Define translation domain (name of translation files)
   134     domain = "Beremiz"
   134     domain = "Beremiz"
   135 
   135 
   341                     self.pyroserver.servicename = dlg.GetValue()
   341                     self.pyroserver.servicename = dlg.GetValue()
   342                     self.pyroserver.Restart()
   342                     self.pyroserver.Restart()
   343 
   343 
   344             def _LiveShellLocals(self):
   344             def _LiveShellLocals(self):
   345                 if self.pyroserver.plcobj is not None:
   345                 if self.pyroserver.plcobj is not None:
   346                     return {"locals":self.pyroserver.plcobj.python_runtime_vars}
   346                     return {"locals": self.pyroserver.plcobj.python_runtime_vars}
   347                 else:
   347                 else:
   348                     return {}
   348                     return {}
   349 
   349 
   350             def OnTaskBarLiveShell(self, evt):
   350             def OnTaskBarLiveShell(self, evt):
   351                 from wx import py
   351                 from wx import py
   383     os.mkdir(WorkingDir)
   383     os.mkdir(WorkingDir)
   384 
   384 
   385 
   385 
   386 def default_evaluator(tocall, *args, **kwargs):
   386 def default_evaluator(tocall, *args, **kwargs):
   387     try:
   387     try:
   388         res=(tocall(*args,**kwargs), None)
   388         res=(tocall(*args, **kwargs), None)
   389     except Exception:
   389     except Exception:
   390         res=(None, sys.exc_info())
   390         res=(None, sys.exc_info())
   391     return res
   391     return res
   392 
   392 
   393 
   393 
   428         pyro.initServer()
   428         pyro.initServer()
   429         self.daemon=pyro.Daemon(host=self.ip_addr, port=self.port)
   429         self.daemon=pyro.Daemon(host=self.ip_addr, port=self.port)
   430         self.plcobj = PLCObject(self.workdir, self.daemon, self.argv,
   430         self.plcobj = PLCObject(self.workdir, self.daemon, self.argv,
   431                                 self.statuschange, self.evaluator,
   431                                 self.statuschange, self.evaluator,
   432                                 self.pyruntimevars)
   432                                 self.pyruntimevars)
   433         uri = self.daemon.connect(self.plcobj,"PLCObject")
   433         uri = self.daemon.connect(self.plcobj, "PLCObject")
   434 
   434 
   435         print _("Pyro port :"), self.port
   435         print _("Pyro port :"), self.port
   436         print _("Pyro object's uri :"), uri
   436         print _("Pyro object's uri :"), uri
   437 
   437 
   438         # Beremiz IDE detects daemon start by looking
   438         # Beremiz IDE detects daemon start by looking
   497     from threading import Semaphore
   497     from threading import Semaphore
   498     wx_eval_lock = Semaphore(0)
   498     wx_eval_lock = Semaphore(0)
   499     main_thread = currentThread()
   499     main_thread = currentThread()
   500 
   500 
   501     def statuschangeTskBar(status):
   501     def statuschangeTskBar(status):
   502         wx.CallAfter(taskbar_instance.UpdateIcon,status)
   502         wx.CallAfter(taskbar_instance.UpdateIcon, status)
   503 
   503 
   504     statuschange.append(statuschangeTskBar)
   504     statuschange.append(statuschangeTskBar)
   505 
   505 
   506     def wx_evaluator(obj, *args, **kwargs):
   506     def wx_evaluator(obj, *args, **kwargs):
   507         tocall,args,kwargs = obj.call
   507         tocall, args, kwargs = obj.call
   508         obj.res = default_evaluator(tocall, *args, **kwargs)
   508         obj.res = default_evaluator(tocall, *args, **kwargs)
   509         wx_eval_lock.release()
   509         wx_eval_lock.release()
   510 
   510 
   511     def evaluator(tocall, *args, **kwargs):
   511     def evaluator(tocall, *args, **kwargs):
   512         global main_thread
   512         global main_thread
   513         if(main_thread == currentThread()):
   513         if(main_thread == currentThread()):
   514             # avoid dead lock if called from the wx mainloop
   514             # avoid dead lock if called from the wx mainloop
   515             return default_evaluator(tocall, *args, **kwargs)
   515             return default_evaluator(tocall, *args, **kwargs)
   516         else:
   516         else:
   517             o=type('',(object,),dict(call=(tocall, args, kwargs), res=None))
   517             o=type('', (object,), dict(call=(tocall, args, kwargs), res=None))
   518             wx.CallAfter(wx_evaluator,o)
   518             wx.CallAfter(wx_evaluator, o)
   519             wx_eval_lock.acquire()
   519             wx_eval_lock.acquire()
   520             return o.res
   520             return o.res
   521 
   521 
   522     pyroserver = Server(servicename, given_ip, port,
   522     pyroserver = Server(servicename, given_ip, port,
   523                         WorkingDir, argv, autostart,
   523                         WorkingDir, argv, autostart,
   535 import traceback
   535 import traceback
   536 
   536 
   537 
   537 
   538 def LogException(*exp):
   538 def LogException(*exp):
   539     if pyroserver.plcobj is not None:
   539     if pyroserver.plcobj is not None:
   540         pyroserver.plcobj.LogMessage(0,'\n'.join(traceback.format_exception(*exp)))
   540         pyroserver.plcobj.LogMessage(0, '\n'.join(traceback.format_exception(*exp)))
   541     else:
   541     else:
   542         traceback.print_exception(*exp)
   542         traceback.print_exception(*exp)
   543 
   543 
   544 sys.excepthook = LogException
   544 sys.excepthook = LogException
   545 
   545 
   609     elif havewx:
   609     elif havewx:
   610         app.MainLoop()
   610         app.MainLoop()
   611 else:
   611 else:
   612     try:
   612     try:
   613         pyroserver.Loop()
   613         pyroserver.Loop()
   614     except KeyboardInterrupt,e:
   614     except KeyboardInterrupt, e:
   615         pass
   615         pass
   616 pyroserver.Quit()
   616 pyroserver.Quit()
   617 sys.exit(0)
   617 sys.exit(0)