runtime/ServicePublisher.py
changeset 262 141a7145c099
parent 217 f3eb35df4d87
child 606 780bd150ebba
equal deleted inserted replaced
261:5299c6746fa8 262:141a7145c099
    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())