def run(self): self.sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) self.sock.setsockopt(socket.SOL_SOCKET, socket.SO_BROADCAST, 1) self.sock.settimeout(10) self.new_servers = {} while True: try : self.sock.sendto("info", ('<broadcast>', s.SQUIDNET_BROADCAST_PORT)) while True : if self.callback: self.callback(self, self.servers) self.servers = self.new_servers if self.deleteold: self.new_servers = {} (message, address) = self.sock.recvfrom(4096) if len(message) : try : xs = sexp.read_all(message) for x in xs : serv = s.SquidServer.load_sexp(x) # hopefully server names are unique self.new_servers[serv.name] = serv except socket.error : pass #timeout except : print "bad server response. ignoring: "+message traceback.print_exc() except socket.error : pass # timeout except : traceback.print_exc() self.sock.close()
def _get_info(self): if not hasattr(self, '_info'): try: self._info = squidprotocol.SquidServer.load_sexp(sexp.read_all(str(self.pickled_data))[0]) except int: raise ValueError("No data set yet") return self._info
def run(self) : print "Starting handler server." self.s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) self.s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) self.s.bind(("", self.server_info.port)) self.s.settimeout(5) while self.go: try : message, address = self.s.recvfrom(8192 << 8) print "Got data from", address # Acknowledge it. xs = sexp.read_all(message) for x in xs : # try to interpret it as a message! print "Message:", x print self.server_info.handle(x) # we don't try to talk to the client. Like a remote controller except socket.error : pass # just a timeout except : traceback.print_exc() self.s.close()
def run(self) : print "Starting broadcast server." self.s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) self.s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) self.s.setsockopt(socket.SOL_SOCKET, socket.SO_BROADCAST, 1) self.s.bind(("", s.SQUIDNET_BROADCAST_PORT)) self.s.settimeout(5) while self.go : try : message, address = self.s.recvfrom(4096 << 10) print "Got data from", address # Acknowledge it. xs = sexp.read_all(message) for x in xs : if x == sexp.Symbol("info") : print "Giving info" self.s.sendto(sexp.write(self.server_info.get_sexp()), address) else : print "Ignoring" except socket.error : pass # just a timeout except : traceback.print_exc() self.s.close()
print "Pinging",l[1] info.ping(l[1]) #info.ping(l[1]) elif l[0] == "servers" : for serv in info.servers.keys() : print serv elif l[0] == "devices" : for d in info.servers[l[1]].devices : print "%s\t%s" % (d.name, d.desc) elif l[0] == "messages" : for m in info.servers[l[1]].get_device(l[2]).messages : print "%s %s - %s" % (m.name, ''.join("(%s, %s)" % (a.name, a.argtype.clssquidtype()) for a in m.arguments), m.desc) elif l[0] == "request" : c = i.split(" ", 4) if len(c) < 5 : c.append("") m = info.servers[c[1]].get_device(c[2]).get_message(c[3]) args = m.decode_sexp_args(sexp.read_all(c[4])) info.request(c[1], c[2], c[3], args) elif l[0] == "dump" : print sexp.write(info.servers[l[1]].get_sexp()) elif l[0] in ('quit', 'exit'): break except (KeyboardInterrupt, EOFError) : break except : traceback.print_exc() pass