22 #License along with this library; if not, write to the Free Software |
22 #License along with this library; if not, write to the Free Software |
23 #Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA |
23 #Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA |
24 |
24 |
25 import Zeroconf, socket |
25 import Zeroconf, socket |
26 |
26 |
27 # type: fully qualified service type name |
27 class ServicePublisher(): |
28 service_type = '_PYRO._tcp.local.' |
28 def __init__(self): |
29 |
29 # type: fully qualified service type name |
30 # properties: dictionary of properties (or a string holding the bytes for the text field) |
30 self.service_type = '_PYRO._tcp.local.' |
31 serviceproperties = {'description':'Beremiz remote PLC'} |
31 # properties: dictionary of properties (or a string holding the bytes for the text field) |
32 |
32 self.serviceproperties = {'description':'Beremiz remote PLC'} |
33 def gethostaddr(dst = '224.0.1.41'): |
33 |
34 s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) |
34 self.name = None |
35 try: |
35 self.ip_32b = None |
36 s.connect((dst, 7)) |
36 self.port = None |
37 (host, port) = s.getsockname() |
37 self.server = None |
38 s.close() |
38 self.service_name = None |
39 if host != '0.0.0.0': |
39 |
40 return host |
40 def RegisterService(self, name, ip, port): |
41 except error: |
|
42 pass |
|
43 return socket.gethostbyname(socket.gethostname()) |
|
44 |
|
45 |
|
46 def ServicePublisher(name, ip, port): |
|
47 |
41 |
48 # name: fully qualified service name |
42 # name: fully qualified service name |
49 service_name = 'Beremiz_%s.%s'%(name,service_type) |
43 self.service_name = 'Beremiz_%s.%s'%(name,self.service_type) |
50 |
44 self.name = name |
|
45 self.port = port |
51 # No ip params -> get host ip |
46 # No ip params -> get host ip |
52 if ip == "": |
47 if ip == "": |
53 ip = gethostaddr() |
48 ip = self.gethostaddr() |
54 |
49 |
55 print "Mon IP est :"+ip |
50 print "My IP is :"+ip |
56 |
51 |
57 server = Zeroconf.Zeroconf(ip) |
52 self.server = Zeroconf.Zeroconf(ip) |
58 |
53 |
59 # address: IP address as unsigned short, network byte order |
54 # address: IP address as unsigned short, network byte order |
60 ip_32b = socket.inet_aton(ip) |
55 self.ip_32b = socket.inet_aton(ip) |
61 |
56 |
62 server.registerService( |
57 self.server.registerService( |
63 Zeroconf.ServiceInfo(service_type, |
58 Zeroconf.ServiceInfo(self.service_type, |
64 service_name, |
59 self.service_name, |
65 ip_32b, |
60 self.ip_32b, |
66 port, |
61 self.port, |
67 properties = serviceproperties)) |
62 properties = self.serviceproperties)) |
68 |
63 |
69 return server |
64 def UnRegisterService(self): |
|
65 self.server.unregisterService( |
|
66 Zeroconf.ServiceInfo(self.service_type, |
|
67 self.service_name, |
|
68 self.ip_32b, |
|
69 self.port, |
|
70 properties = self.serviceproperties)) |
|
71 self.server.close() |
|
72 del self.server |
|
73 |
|
74 def gethostaddr(self, dst = '224.0.1.41'): |
|
75 s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) |
|
76 try: |
|
77 s.connect((dst, 7)) |
|
78 (host, port) = s.getsockname() |
|
79 s.close() |
|
80 if host != '0.0.0.0': |
|
81 return host |
|
82 except error: |
|
83 pass |
|
84 return socket.gethostbyname(socket.gethostname()) |