''' ------------------------------------ HEADER ------------------------------------ Autores: Michel Brasil Cordeiro (GRR20172663) Vinícius Teixeira Vieira dos Santos (GRR20186716) Descrição: Arquivo contendo a implementação do cliente seguindo as especificações do trabalho prático da discipliba Redes De Computadores II. Requisitos de uso: Para que o cliente funcione corretamente, é necessário que o servidor com a tabela cache esteja no modo de escuta. Última atualização: 22/04/2022 -------------------------------------------------------------------------------- ''' import socket from lib import * #função que imprime as instruções na tela def print_instruction(): print("------------------------- INTRUÇÕES -------------------------") print(f"Entre com 0 para requisitar a temperatura do {PLACE_0}.") print(f"Entre com 1 para requisitar a temperatura do {PLACE_1}.") print(f"Entre com 2 para requisitar a temperatura do {PLACE_2}.") print("Entre com h para exibir essa mensagem com as intruções.") print("Entre com q para sair.") print("-----------------------------------------------------------------") #função que envia a mensagem requisitando a temperatura def request_temp(server_id, sock): m = Message(server_id, MSG_REQ) sock.sendall(m.message_to_bytes()) #função que recebe a resposta def recive_answer(sock): #print("Esperando resposta...") r = sock.recv(12) m = bytes_to_message(r) if m.message_type == MSG_ERR: return None return m.data #manda requisição de encerramento def close_servers(sock): print("Fechando servidores.") m = Message(0, 2) sock.sendall(m.message_to_bytes()) def read_input(): while True: command = input('Entre com um comando: ') if command in ['0', '1', '2']: address = int(command) places = [PLACE_0, PLACE_1, PLACE_2] place = places[address] print(f"Requisitando temperatura de {place}...") request_temp(address,s) temp = recive_answer(s) if temp == None: print(f"A temperatura em {place} não pôde ser verificada.") else: print(f"A temperatura em {place} é {temp}°C") elif command == 'h': print_instruction() elif command == 'q': print("Saindo.") break else: print("Comando não existe, digite 'h' para ler sobre os comandos válidos.") #--- Programa principal --- #Abre o socket e inicia a conexão com a tabela cache s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) while True: try: s.connect((HOST_CACHE, PORT_CACHE)) break except socket.error as e: print(f"Erro ao conectar: {e}") input("Aperte enter para tentar de novo.") #Imprime as instruções print_instruction() read_input() close_servers(s) print("Fechando o socket.") s.close() print("Fim")