Пример #1
0
                            earliest_join_id = peer_id
                        elif peer_data['joined_at'] < chat_peers[earliest_join_id]['joined_at']:
                            earliest_join_id = peer_id

                if earliest_join_id:
                    # found new peer to be coordinator
                    earliest_join_peer = chat_peers[earliest_join_id]
                    new_server_ip, new_server_port = earliest_join_peer['server_addr']
                    print(Style.info(f'Attempting to make {earliest_join_peer["username"]} the new chat coordinator'))
                else:
                    # no other peers to be coord, make own server coord
                    print(Style.info('Attempting to make you the new chat coordinator...'))
                    new_server_ip, new_server_port = peer.get_server_addr()

                peer.set_chat_coord(new_server_ip, new_server_port)
                peer.set_chat_peers({})


                for retries in range(5):
                    # random delay so less chance of all members trying connection at same time
                    rand_delay = random.uniform(0.0, 5.0)
                    time.sleep(rand_delay)

                    try:
                        client = Client(peer, new_server_ip, new_server_port)
                        break
                    except ConnectionRefusedError:
                        print(Style.warning(f'Failed to connect to new server, retries: {retries}'))
                        # likely failed
                        continue