10 # See COPYING file for copyrights details. |
10 # See COPYING file for copyrights details. |
11 |
11 |
12 from __future__ import absolute_import |
12 from __future__ import absolute_import |
13 from __future__ import print_function |
13 from __future__ import print_function |
14 import sys |
14 import sys |
|
15 import os |
15 |
16 |
16 import Pyro |
17 import Pyro |
17 import Pyro.core as pyro |
18 import Pyro.core as pyro |
18 import runtime |
19 import runtime |
19 from runtime.ServicePublisher import ServicePublisher |
20 from runtime.ServicePublisher import ServicePublisher |
25 self.daemon = None |
26 self.daemon = None |
26 self.servicename = servicename |
27 self.servicename = servicename |
27 self.ip_addr = ip_addr |
28 self.ip_addr = ip_addr |
28 self.port = port |
29 self.port = port |
29 self.servicepublisher = None |
30 self.servicepublisher = None |
|
31 self.piper, self.pipew = None, None |
30 |
32 |
31 def _to_be_published(self): |
33 def _to_be_published(self): |
32 return self.servicename is not None and \ |
34 return self.servicename is not None and \ |
33 self.ip_addr not in ["", "localhost", "127.0.0.1"] |
35 self.ip_addr not in ["", "localhost", "127.0.0.1"] |
34 |
36 |
58 pyro_obj.delegateTo(runtime.GetPLCObjectSingleton()) |
60 pyro_obj.delegateTo(runtime.GetPLCObjectSingleton()) |
59 |
61 |
60 self.daemon.connect(pyro_obj, "PLCObject") |
62 self.daemon.connect(pyro_obj, "PLCObject") |
61 |
63 |
62 when_ready() |
64 when_ready() |
63 self.daemon.requestLoop() |
65 self.piper,self.pipew = os.pipe() |
64 self.daemon.sock.close() |
66 self.daemon.requestLoop(others=[self.piper], callback=lambda x:None) |
|
67 self.piper, self.pipew = None, None |
|
68 if hasattr(self,'sock'): |
|
69 self.daemon.sock.close() |
65 self.Unpublish() |
70 self.Unpublish() |
66 |
71 |
67 def Restart(self): |
72 def Restart(self): |
68 self.daemon.shutdown(True) |
73 self.daemon.shutdown(True) |
69 |
74 |
70 def Quit(self): |
75 def Quit(self): |
71 self.continueloop = False |
76 self.continueloop = False |
72 self.daemon.shutdown(True) |
77 self.daemon.shutdown(True) |
|
78 self.daemon.closedown() |
|
79 if self.pipew is not None: |
|
80 os.write(self.pipew, "goodbye") |
73 |
81 |
74 def Publish(self): |
82 def Publish(self): |
75 self.servicepublisher = ServicePublisher("PYRO") |
83 self.servicepublisher = ServicePublisher("PYRO") |
76 self.servicepublisher.RegisterService(self.servicename, |
84 self.servicepublisher.RegisterService(self.servicename, |
77 self.ip_addr, self.port) |
85 self.ip_addr, self.port) |