runtime/ServicePublisher.py
changeset 646 3b48c7ed7837
parent 645 616f86c13443
child 647 edce87412f5a
equal deleted inserted replaced
645:616f86c13443 646:3b48c7ed7837
    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,