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) |
|