Beremiz_service.py
changeset 1887 1b9907ef770b
parent 1881 091005ec69c4
child 1888 5b3e17d0957c
equal deleted inserted replaced
1886:e4a656e73aec 1887:1b9907ef770b
   317                 dlg.SetTests([(re.compile('\d{1,3}(?:\.\d{1,3}){3}$').match, _("IP is not valid!")),
   317                 dlg.SetTests([(re.compile('\d{1,3}(?:\.\d{1,3}){3}$').match, _("IP is not valid!")),
   318                               (lambda x:len([x for x in x.split(".") if 0 <= int(x) <= 255]) == 4,
   318                               (lambda x:len([x for x in x.split(".") if 0 <= int(x) <= 255]) == 4,
   319                                _("IP is not valid!"))])
   319                                _("IP is not valid!"))])
   320                 if dlg.ShowModal() == wx.ID_OK:
   320                 if dlg.ShowModal() == wx.ID_OK:
   321                     self.pyroserver.ip_addr = dlg.GetValue()
   321                     self.pyroserver.ip_addr = dlg.GetValue()
   322                     self.pyroserver.Stop()
   322                     self.pyroserver.Restart()
   323 
   323 
   324             def OnTaskBarChangePort(self, evt):
   324             def OnTaskBarChangePort(self, evt):
   325                 dlg = ParamsEntryDialog(None, _("Enter a port number "), defaultValue=str(self.pyroserver.port))
   325                 dlg = ParamsEntryDialog(None, _("Enter a port number "), defaultValue=str(self.pyroserver.port))
   326                 dlg.SetTests([(UnicodeType.isdigit, _("Port number must be an integer!")), (lambda port: 0 <= int(port) <= 65535, _("Port number must be 0 <= port <= 65535!"))])
   326                 dlg.SetTests([(UnicodeType.isdigit, _("Port number must be an integer!")), (lambda port: 0 <= int(port) <= 65535, _("Port number must be 0 <= port <= 65535!"))])
   327                 if dlg.ShowModal() == wx.ID_OK:
   327                 if dlg.ShowModal() == wx.ID_OK:
   328                     self.pyroserver.port = int(dlg.GetValue())
   328                     self.pyroserver.port = int(dlg.GetValue())
   329                     self.pyroserver.Stop()
   329                     self.pyroserver.Restart()
   330 
   330 
   331             def OnTaskBarChangeWorkingDir(self, evt):
   331             def OnTaskBarChangeWorkingDir(self, evt):
   332                 dlg = wx.DirDialog(None, _("Choose a working directory "), self.pyroserver.workdir, wx.DD_NEW_DIR_BUTTON)
   332                 dlg = wx.DirDialog(None, _("Choose a working directory "), self.pyroserver.workdir, wx.DD_NEW_DIR_BUTTON)
   333                 if dlg.ShowModal() == wx.ID_OK:
   333                 if dlg.ShowModal() == wx.ID_OK:
   334                     self.pyroserver.workdir = dlg.GetPath()
   334                     self.pyroserver.workdir = dlg.GetPath()
   335                     self.pyroserver.Stop()
   335                     self.pyroserver.Restart()
   336 
   336 
   337             def OnTaskBarChangeName(self, evt):
   337             def OnTaskBarChangeName(self, evt):
   338                 servicename = self.pyroserver.servicename
   338                 servicename = self.pyroserver.servicename
   339                 servicename = '' if servicename is None else servicename
   339                 servicename = '' if servicename is None else servicename
   340                 dlg = ParamsEntryDialog(None, _("Enter a name "), defaultValue=servicename)
   340                 dlg = ParamsEntryDialog(None, _("Enter a name "), defaultValue=servicename)
   410         self.evaluator = evaluator
   410         self.evaluator = evaluator
   411         self.pyruntimevars = pyruntimevars
   411         self.pyruntimevars = pyruntimevars
   412 
   412 
   413     def Loop(self):
   413     def Loop(self):
   414         while self.continueloop:
   414         while self.continueloop:
       
   415             pyro.initServer()
       
   416             self.daemon = pyro.Daemon(host=self.ip_addr, port=self.port)
   415             self.Start()
   417             self.Start()
       
   418             self.daemon.requestLoop()
       
   419             self.daemon.sock.close()
   416 
   420 
   417     def Restart(self):
   421     def Restart(self):
   418         self.Stop()
   422         self._stop()
   419 
   423 
   420     def Quit(self):
   424     def Quit(self):
   421         self.continueloop = False
   425         self.continueloop = False
   422         if self.plcobj is not None:
   426         if self.plcobj is not None:
   423             self.plcobj.StopPLC()
   427             self.plcobj.StopPLC()
   424             self.plcobj.UnLoadPLC()
   428             self.plcobj.UnLoadPLC()
   425         self.Stop()
   429         self._stop()
   426 
   430 
   427     def Start(self):
   431     def Start(self):
   428         pyro.initServer()
       
   429         self.daemon = pyro.Daemon(host=self.ip_addr, port=self.port)
       
   430         self.plcobj = PLCObject(self.workdir, self.daemon, self.argv,
   432         self.plcobj = PLCObject(self.workdir, self.daemon, self.argv,
   431                                 self.statuschange, self.evaluator,
   433                                     self.statuschange, self.evaluator,
   432                                 self.pyruntimevars)
   434                                     self.pyruntimevars)
   433         uri = self.daemon.connect(self.plcobj, "PLCObject")
   435         uri = self.daemon.connect(self.plcobj, "PLCObject")
   434 
   436 
   435         print(_("Pyro port :"), self.port)
   437         print(_("Pyro port :"), self.port)
   436         print(_("Pyro object's uri :"), uri)
   438         print(_("Pyro object's uri :"), uri)
   437 
   439 
   456                 self.plcobj.StartPLC()
   458                 self.plcobj.StartPLC()
   457         self.plcobj.StatusChange()
   459         self.plcobj.StatusChange()
   458 
   460 
   459         sys.stdout.flush()
   461         sys.stdout.flush()
   460 
   462 
   461         self.daemon.requestLoop()
   463 
   462         self.daemon.sock.close()
   464     def _stop(self):
   463 
       
   464     def Stop(self):
       
   465         if self.plcobj is not None:
   465         if self.plcobj is not None:
   466             self.plcobj.StopPLC()
   466             self.plcobj.StopPLC()
   467         if self.servicepublisher is not None:
   467         if self.servicepublisher is not None:
   468             self.servicepublisher.UnRegisterService()
   468             self.servicepublisher.UnRegisterService()
   469             self.servicepublisher = None
   469             self.servicepublisher = None