runtime/ServicePublisher.py
changeset 217 f3eb35df4d87
parent 203 cb9901076a21
child 262 141a7145c099
--- a/runtime/ServicePublisher.py	Fri Aug 22 15:27:37 2008 +0200
+++ b/runtime/ServicePublisher.py	Fri Aug 22 15:30:09 2008 +0200
@@ -22,20 +22,48 @@
 #License along with this library; if not, write to the Free Software
 #Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 
-import Zeroconf
+import Zeroconf, socket
 
-class PublishService():
-    def __init__(self):
-        self.server = Zeroconf.Zeroconf()
+# type: fully qualified service type name
+service_type = '_PYRO._tcp.local.'
 
-    def ConfigureService(self, type, name, address, port, description):
-        self.newservice = Zeroconf.ServiceInfo(type,
-                                  name,
-                                  address,
+# properties: dictionary of properties (or a string holding the bytes for the text field)
+serviceproperties = {'description':'Beremiz remote PLC'}
+
+def gethostaddr(dst = '224.0.1.41'):
+    s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
+    try:
+        s.connect((dst, 7))
+        (host, port) = s.getsockname()
+        s.close()
+        if host != '0.0.0.0':
+            return host
+    except error:
+        pass
+    return socket.gethostbyname(socket.gethostname())
+
+
+def ServicePublisher(name, ip, port):
+
+        # name: fully qualified service name
+        service_name = 'Beremiz_%s.%s'%(name,service_type)
+
+        # No ip params -> get host ip
+        if ip == "":
+            ip = gethostaddr()
+
+        print "Mon IP est :"+ip
+
+        server = Zeroconf.Zeroconf(ip)
+
+        # address: IP address as unsigned short, network byte order
+        ip_32b = socket.inet_aton(ip)
+
+        server.registerService(
+             Zeroconf.ServiceInfo(service_type,
+                                  service_name,
+                                  ip_32b,
                                   port,
-                                  weight = 0, # weight: weight of the service
-                                  priority= 0, # priority: priority of the service
-                                  properties = description)
-    
-    def PublishService(self):
-        self.server.registerService(self.newservice)
\ No newline at end of file
+                                  properties = serviceproperties))
+        
+        return server
\ No newline at end of file