runtime/PyroServer.py
changeset 2476 1881d0ff5ae2
parent 2315 523559fe6352
child 2492 7dd551ac2fa0
equal deleted inserted replaced
2475:39ba6a125a97 2476:1881d0ff5ae2
    17 import Pyro.core as pyro
    17 import Pyro.core as pyro
    18 import runtime
    18 import runtime
    19 from runtime.ServicePublisher import ServicePublisher
    19 from runtime.ServicePublisher import ServicePublisher
    20 
    20 
    21 
    21 
    22 class Server(object):
    22 class PyroServer(object):
    23     def __init__(self, servicename, ip_addr, port):
    23     def __init__(self, servicename, ip_addr, port):
    24         self.continueloop = True
    24         self.continueloop = True
    25         self.daemon = None
    25         self.daemon = None
    26         self.servicename = servicename
    26         self.servicename = servicename
    27         self.ip_addr = ip_addr
    27         self.ip_addr = ip_addr
    39             print(_("Publishing service on local network"))
    39             print(_("Publishing service on local network"))
    40 
    40 
    41         sys.stdout.flush()
    41         sys.stdout.flush()
    42 
    42 
    43     def PyroLoop(self, when_ready):
    43     def PyroLoop(self, when_ready):
       
    44         if self._to_be_published(): self.Publish()
    44         while self.continueloop:
    45         while self.continueloop:
    45             Pyro.config.PYRO_MULTITHREADED = 0
    46             Pyro.config.PYRO_MULTITHREADED = 0
    46             pyro.initServer()
    47             pyro.initServer()
    47             self.daemon = pyro.Daemon(host=self.ip_addr, port=self.port)
    48             self.daemon = pyro.Daemon(host=self.ip_addr, port=self.port)
    48 
    49 
    54             pyro_obj = Pyro.core.ObjBase()
    55             pyro_obj = Pyro.core.ObjBase()
    55             pyro_obj.delegateTo(runtime.GetPLCObjectSingleton())
    56             pyro_obj.delegateTo(runtime.GetPLCObjectSingleton())
    56 
    57 
    57             self.daemon.connect(pyro_obj, "PLCObject")
    58             self.daemon.connect(pyro_obj, "PLCObject")
    58 
    59 
    59             if self._to_be_published():
       
    60                 self.servicepublisher = ServicePublisher()
       
    61                 self.servicepublisher.RegisterService(self.servicename, self.ip_addr, self.port)
       
    62 
       
    63             when_ready()
    60             when_ready()
    64             self.daemon.requestLoop()
    61             self.daemon.requestLoop()
    65             self.daemon.sock.close()
    62             self.daemon.sock.close()
       
    63         self.Unpublish()
    66 
    64 
    67     def Restart(self):
    65     def Restart(self):
    68         self._stop()
    66         self.daemon.shutdown(True)
    69 
    67 
    70     def Quit(self):
    68     def Quit(self):
    71         self.continueloop = False
    69         self.continueloop = False
    72         self._stop()
    70         self.daemon.shutdown(True)
    73 
    71 
    74     def _stop(self):
    72     def Publish(self):
       
    73         self.servicepublisher = ServicePublisher("PYRO")
       
    74         self.servicepublisher.RegisterService(self.servicename,
       
    75                                               self.ip_addr, self.port)
       
    76 
       
    77     def Unpublish(self):
    75         if self.servicepublisher is not None:
    78         if self.servicepublisher is not None:
    76             self.servicepublisher.UnRegisterService()
    79             self.servicepublisher.UnRegisterService()
    77             self.servicepublisher = None
    80             self.servicepublisher = None
    78         self.daemon.shutdown(True)