runtime/PyroServer.py
branchwxPython4
changeset 3308 358ccd42e052
parent 2625 e5ce6c4a8672
child 3311 d73af2eeea05
equal deleted inserted replaced
3307:eeec6e0ea269 3308:358ccd42e052
    60             pyro_obj.delegateTo(runtime.GetPLCObjectSingleton())
    60             pyro_obj.delegateTo(runtime.GetPLCObjectSingleton())
    61 
    61 
    62             self.daemon.connect(pyro_obj, "PLCObject")
    62             self.daemon.connect(pyro_obj, "PLCObject")
    63 
    63 
    64             when_ready()
    64             when_ready()
    65             self.piper, self.pipew = os.pipe()
    65 
    66             self.daemon.requestLoop(others=[self.piper], callback=lambda x: None)
    66             # "pipe to self" trick to to accelerate runtime shutdown 
       
    67             # instead of waiting for arbitrary pyro timeout.
       
    68             others = []
       
    69             if not sys.platform.startswith('win'):
       
    70                 self.piper, self.pipew = os.pipe()
       
    71                 others.append = self.piper
       
    72 
       
    73             self.daemon.requestLoop(others=others, callback=lambda x: None)
    67             self.piper, self.pipew = None, None
    74             self.piper, self.pipew = None, None
    68             if hasattr(self, 'sock'):
    75             if hasattr(self, 'sock'):
    69                 self.daemon.sock.close()
    76                 self.daemon.sock.close()
    70         self.Unpublish()
    77         self.Unpublish()
    71 
    78 
    74 
    81 
    75     def Quit(self):
    82     def Quit(self):
    76         self.continueloop = False
    83         self.continueloop = False
    77         self.daemon.shutdown(True)
    84         self.daemon.shutdown(True)
    78         self.daemon.closedown()
    85         self.daemon.closedown()
    79         if self.pipew is not None:
    86         if not sys.platform.startswith('win'):
    80             os.write(self.pipew, "goodbye")
    87             if self.pipew is not None:
       
    88                 os.write(self.pipew, "goodbye")
    81 
    89 
    82     def Publish(self):
    90     def Publish(self):
    83         self.servicepublisher = ServicePublisher("PYRO")
    91         self.servicepublisher = ServicePublisher("PYRO")
    84         self.servicepublisher.RegisterService(self.servicename,
    92         self.servicepublisher.RegisterService(self.servicename,
    85                                               self.ip_addr, self.port)
    93                                               self.ip_addr, self.port)