def run(self): self.print_welcome() self.discoverer.start() #Send something to the discover sock so we can bind it to a port self.discoverer.sock.sendto("HURP DURP", ("<broadcast>", self.broadcast_port)) own_address = self.discoverer.sock.getsockname() zap_debug_print("my udp discovery port is", own_address[1]) ignore_port = own_address[1] b = ZapBroadcast(self.broadcast_port, self.local_files, self.remote_files, self.ip, ignore_port) b.start() tcp_server = ZapTCPServer(port=self.tcp_port, host=self.ip, local_files=self.local_files) tcp_server.start() while True: line = raw_input(self.prompt + " ") if re.match('^quit$', line): self.quit() elif re.match('^name (\w+)$', line): ZapConfig.name = re.match(r"^name (\w+)$", line).group(1) print("Name is now %s" % ZapConfig.name) elif re.match('^list$', line): self.remote_files.clear() query = ZapTorrentProtocolResponse(response_type="files?").as_response() s = self.discoverer.sock length = 0 while length < len(query): sent_length = s.sendto(query, ("<broadcast>", self.broadcast_port)) length += sent_length #now wait for the filesLister to get more info print("Waiting for response from peers. . .") time.sleep(3) for k in self.remote_files.get_files(): print("File: %s" % k) elif re.match('^load ([\w\._\-/]+)$', line): path = re.match('^load ([\w\._\-/]+)$', line).group(1) f = ZapFile() if f.set_path(path): zap_debug_print("Loaded a local file and it is ", f) self.local_files.add(f) print("File at %s loaded for sharing." % path) else: print("File at %s doesn't exist, or it is a directory. Try a different path." % path) elif re.match('^get ([\w\.\-]+)$', line): filename = re.match('^get ([\w\.\-]+)$', line).group(1) remote_files = self.remote_files.get(filename) if remote_files is not None: downloader = ZapDownloader(remote_files, self.local_files) downloader.start() print("Starting to download %s." % filename) else: print("No files by that name. Sorry. Try 'list' to update your list of files.") else: self.print_usage() continue