20 # |
20 # |
21 #You should have received a copy of the GNU General Public |
21 #You should have received a copy of the GNU General Public |
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, threading |
26 |
26 |
27 class ServicePublisher(): |
27 class ServicePublisher(): |
28 def __init__(self): |
28 def __init__(self): |
29 # type: fully qualified service type name |
29 # type: fully qualified service type name |
30 self.service_type = '_PYRO._tcp.local.' |
30 self.service_type = '_PYRO._tcp.local.' |
34 self.name = None |
34 self.name = None |
35 self.ip_32b = None |
35 self.ip_32b = None |
36 self.port = None |
36 self.port = None |
37 self.server = None |
37 self.server = None |
38 self.service_name = None |
38 self.service_name = None |
|
39 self.retrytimer = None |
39 |
40 |
40 def RegisterService(self, name, ip, port): |
41 def RegisterService(self, name, ip, port): |
|
42 try: |
|
43 self._RegisterService(name, ip, port) |
|
44 except Exception,e: |
|
45 self.retrytimer = threading.Timer(2,self.RegisterService,[name, ip, port]) |
|
46 self.retrytimer.start() |
41 |
47 |
|
48 def _RegisterService(self, name, ip, port): |
42 # name: fully qualified service name |
49 # name: fully qualified service name |
43 self.service_name = 'Beremiz_%s.%s'%(name,self.service_type) |
50 self.service_name = 'Beremiz_%s.%s'%(name,self.service_type) |
44 self.name = name |
51 self.name = name |
45 self.port = port |
52 self.port = port |
46 # No ip params -> get host ip |
53 # No ip params -> get host ip |
47 if ip is None: |
54 if ip is None: |
48 ip = self.gethostaddr() |
55 ip = self.gethostaddr() |
49 |
|
50 print "My IP is :"+ip |
|
51 |
56 |
52 self.server = Zeroconf.Zeroconf(ip) |
57 self.server = Zeroconf.Zeroconf(ip) |
53 |
58 |
54 # address: IP address as unsigned short, network byte order |
59 # address: IP address as unsigned short, network byte order |
55 self.ip_32b = socket.inet_aton(ip) |
60 self.ip_32b = socket.inet_aton(ip) |
58 Zeroconf.ServiceInfo(self.service_type, |
63 Zeroconf.ServiceInfo(self.service_type, |
59 self.service_name, |
64 self.service_name, |
60 self.ip_32b, |
65 self.ip_32b, |
61 self.port, |
66 self.port, |
62 properties = self.serviceproperties)) |
67 properties = self.serviceproperties)) |
|
68 print "MDNS brodcasting on :"+ip |
|
69 self.retrytimer=None |
63 |
70 |
64 def UnRegisterService(self): |
71 def UnRegisterService(self): |
|
72 if self.retrytimer is not None: |
|
73 self.retrytimer.cancel() |
|
74 |
65 self.server.unregisterService( |
75 self.server.unregisterService( |
66 Zeroconf.ServiceInfo(self.service_type, |
76 Zeroconf.ServiceInfo(self.service_type, |
67 self.service_name, |
77 self.service_name, |
68 self.ip_32b, |
78 self.ip_32b, |
69 self.port, |
79 self.port, |