diff -r a6e7dd8bac36 -r 34da877021d5 Beremiz_service.py --- a/Beremiz_service.py Sat Dec 09 01:03:43 2023 +0100 +++ b/Beremiz_service.py Wed Jan 17 22:09:32 2024 +0100 @@ -36,7 +36,7 @@ from functools import partial import runtime -from runtime.PyroServer import PyroServer +from runtime.eRPCServer import eRPCServer as RPCServer from runtime.xenomai import TryPreloadXenomai from runtime import LogMessageAndException from runtime import PlcStatus @@ -270,12 +270,12 @@ TBMENU_CHANGE_INTERFACE = wx.NewIdRef() TBMENU_LIVE_SHELL = wx.NewIdRef() TBMENU_WXINSPECTOR = wx.NewIdRef() - TBMENU_CHANGE_WD = wx.NewIdRef() + # TBMENU_CHANGE_WD = wx.NewIdRef() TBMENU_QUIT = wx.NewIdRef() - def __init__(self, pyroserver): + def __init__(self, rpc_server): wx.adv.TaskBarIcon.__init__(self) - self.pyroserver = pyroserver + self.rpc_server = rpc_server # Set the image self.UpdateIcon(None) @@ -287,7 +287,7 @@ self.Bind(wx.EVT_MENU, self.OnTaskBarLiveShell, id=self.TBMENU_LIVE_SHELL) self.Bind(wx.EVT_MENU, self.OnTaskBarWXInspector, id=self.TBMENU_WXINSPECTOR) self.Bind(wx.EVT_MENU, self.OnTaskBarChangePort, id=self.TBMENU_CHANGE_PORT) - self.Bind(wx.EVT_MENU, self.OnTaskBarChangeWorkingDir, id=self.TBMENU_CHANGE_WD) + # self.Bind(wx.EVT_MENU, self.OnTaskBarChangeWorkingDir, id=self.TBMENU_CHANGE_WD) self.Bind(wx.EVT_MENU, self.OnTaskBarQuit, id=self.TBMENU_QUIT) def CreatePopupMenu(self): @@ -304,7 +304,7 @@ menu.Append(self.TBMENU_CHANGE_NAME, _("Change Name")) menu.Append(self.TBMENU_CHANGE_INTERFACE, _("Change IP of interface to bind")) menu.Append(self.TBMENU_CHANGE_PORT, _("Change Port Number")) - menu.Append(self.TBMENU_CHANGE_WD, _("Change working directory")) + # menu.Append(self.TBMENU_CHANGE_WD, _("Change working directory")) menu.AppendSeparator() menu.Append(self.TBMENU_LIVE_SHELL, _("Launch a live Python shell")) menu.Append(self.TBMENU_WXINSPECTOR, _("Launch WX GUI inspector")) @@ -332,37 +332,37 @@ runtime.GetPLCObjectSingleton().StopPLC() def OnTaskBarChangeInterface(self, evt): - ip_addr = self.pyroserver.ip_addr + ip_addr = self.rpc_server.ip_addr ip_addr = '' if ip_addr is None else ip_addr dlg = ParamsEntryDialog(None, _("Enter the IP of the interface to bind"), defaultValue=ip_addr) dlg.SetTests([(re.compile(r'\d{1,3}(?:\.\d{1,3}){3}$').match, _("IP is not valid!")), (lambda x:len([x for x in x.split(".") if 0 <= int(x) <= 255]) == 4, _("IP is not valid!"))]) if dlg.ShowModal() == wx.ID_OK: - self.pyroserver.ip_addr = dlg.GetValue() - self.pyroserver.Restart() + self.rpc_server.ip_addr = dlg.GetValue() + self.rpc_server.Restart() def OnTaskBarChangePort(self, evt): - dlg = ParamsEntryDialog(None, _("Enter a port number "), defaultValue=str(self.pyroserver.port)) + dlg = ParamsEntryDialog(None, _("Enter a port number "), defaultValue=str(self.rpc_server.port)) dlg.SetTests([(str.isdigit, _("Port number must be an integer!")), (lambda port: 0 <= int(port) <= 65535, _("Port number must be 0 <= port <= 65535!"))]) if dlg.ShowModal() == wx.ID_OK: - self.pyroserver.port = int(dlg.GetValue()) - self.pyroserver.Restart() - - def OnTaskBarChangeWorkingDir(self, evt): - dlg = wx.DirDialog(None, _("Choose a working directory "), self.pyroserver.workdir, wx.DD_NEW_DIR_BUTTON) - if dlg.ShowModal() == wx.ID_OK: - self.pyroserver.workdir = dlg.GetPath() - self.pyroserver.Restart() + self.rpc_server.port = int(dlg.GetValue()) + self.rpc_server.Restart() + + # def OnTaskBarChangeWorkingDir(self, evt): + # dlg = wx.DirDialog(None, _("Choose a working directory "), self.rpc_server.workdir, wx.DD_NEW_DIR_BUTTON) + # if dlg.ShowModal() == wx.ID_OK: + # self.rpc_server.workdir = dlg.GetPath() + # self.rpc_server.Restart() def OnTaskBarChangeName(self, evt): - _servicename = self.pyroserver.servicename + _servicename = self.rpc_server.servicename _servicename = '' if _servicename is None else _servicename dlg = ParamsEntryDialog(None, _("Enter a name "), defaultValue=_servicename) dlg.SetTests([(lambda name: len(name) != 0, _("Name must not be null!"))]) if dlg.ShowModal() == wx.ID_OK: - self.pyroserver.servicename = dlg.GetValue() - self.pyroserver.Restart() + self.rpc_server.servicename = dlg.GetValue() + self.rpc_server.Restart() def _LiveShellLocals(self): return {"locals": runtime.GetPLCObjectSingleton().python_runtime_vars} @@ -383,7 +383,7 @@ def OnTaskBarQuit(self, evt): if wx.Platform == '__WXMSW__': - Thread(target=self.pyroserver.Quit).start() + Thread(target=self.rpc_server.Quit).start() self.RemoveIcon() wx.CallAfter(wx.GetApp().ExitMainLoop) @@ -513,10 +513,10 @@ runtime.CreatePLCObjectSingleton( WorkingDir, argv, statuschange, evaluator, pyruntimevars) -pyroserver = PyroServer(servicename, interface, port) +rpc_server = RPCServer(servicename, interface, port) if havewx: - taskbar_instance = BeremizTaskBarIcon(pyroserver) + taskbar_instance = BeremizTaskBarIcon(rpc_server) if havetwisted: if webport is not None: @@ -533,28 +533,28 @@ except Exception: LogMessageAndException(_("WAMP client startup failed. ")) -pyro_thread = None +rpc_server_thread = None def FirstWorkerJob(): """ - RPC through pyro/wamp/UI may lead to delegation to Worker, + RPC through rpc/wamp/UI may lead to delegation to Worker, then this function ensures that Worker is already - created when pyro starts + created when rpc starts """ - global pyro_thread, pyroserver - - pyro_thread_started = Lock() - pyro_thread_started.acquire() - pyro_thread = Thread(target=pyroserver.PyroLoop, - kwargs=dict(when_ready=pyro_thread_started.release), - name="PyroThread") - - pyro_thread.start() - - # Wait for pyro thread to be effective - pyro_thread_started.acquire() - - pyroserver.PrintServerInfo() + global rpc_server_thread, rpc_server + + rpc_thread_started = Lock() + rpc_thread_started.acquire() + rpc_server_thread = Thread(target=rpc_server.Loop, + kwargs=dict(when_ready=rpc_thread_started.release), + name="RPCThread") + + rpc_server_thread.start() + + # Wait for rpc thread to be effective + rpc_thread_started.acquire() + + rpc_server.PrintServerInfo() # Beremiz IDE detects LOCAL:// runtime is ready by looking # for self.workdir in the daemon's stdout. @@ -616,8 +616,8 @@ pass -pyroserver.Quit() -pyro_thread.join() +rpc_server.Quit() +rpc_server_thread.join() plcobj = runtime.GetPLCObjectSingleton() try: