| 43 | self.cup.db.sync() |
| 44 | |
| 45 | def _sync_server_browser(self, addr, to_delete): |
| 46 | s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) |
| 47 | s.settimeout(5) |
| 48 | s.sendto(b"\x20\x00\x00\x00\x00\x48\xff\xff\xff\xffreqt", addr) |
| 49 | data = s.recvfrom(1024)[0][14:] |
| 50 | s.close() |
| 51 | |
| 52 | for n in range(0, len(data) // 6): |
| 53 | addr = ( |
| 54 | ".".join(map(str, map(ord, data[n * 6 : n * 6 + 4]))), |
| 55 | ord(data[n * 6 + 5]) * 256 + ord(data[n * 6 + 4]), |
| 56 | ) |
| 57 | server_id = f"{addr[0]}:{addr[1]}" |
| 58 | if server_id in self.servers: |
| 59 | if not self.servers[server_id].sync(): |
| 60 | continue |
| 61 | else: |
| 62 | try: |
| 63 | self.servers[server_id] = Server(addr, server_id) |
| 64 | except ServerError: |
| 65 | pass |
| 66 | to_delete.discard(server_id) |
| 67 | |
| 68 | |
| 69 | class Server(Syncable): |