''' ------------------------------------ HEADER ------------------------------------ Autores: Michel Brasil Cordeiro (GRR20172663) Vinícius Teixeira Vieira dos Santos (GRR20186716) Descrição: Módulo python contendo valores constantes e clesses que são utilizados em outros arquivos. Última atualização: 22/04/2022 -------------------------------------------------------------------------------- ''' #----------------- CONSTANTES ----------------- # Endereço e porta de cada um dos servidores HOST_CACHE = "127.0.0.1" PORT_CACHE = 3000 HOST_SERVER_0 = "127.0.0.1" PORT_SERVER_0 = 8000 HOST_SERVER_1 = "127.0.0.1" PORT_SERVER_1 = 8001 HOST_SERVER_2 = "127.0.0.1" PORT_SERVER_2 = 8002 # Tipos de mensagem MSG_REQ = int(0) MSG_RESP = int(1) MSG_END = int(2) MSG_ERR = int(3) # Nome dos lugares onde estão os servidores com a temperatura PLACE_0 = "Oymyakon, Sibéria" PLACE_1 = "Vale da Morte" PLACE_2 = "Fairbanks, Alasca" LINK_0 = "https://wttr.in/Oymyakon?format=\"%t\"" LINK_1 = "https://wttr.in/Death Valley?format=\"%t\"" LINK_2 = "https://wttr.in/Fairbanks?format=\"%t\"" #Tempo em segundos para expirar a entrada da tabela cache TIMEOUT = 30 #----------------- CLASSE MESSAGE ----------------- #Classe que armazena uma mensagem #Possui 3 campos: #server_id -> Diz para qual servidor é a mensagem #message_type -> Diz o tipo da mensagem (0 - request,1 - reposta, 2 - close.) #data -> Armazena a temperatura enviada pelos servidores class Message: #Construtor da classe def __init__(self, server_id = -1, message_type = -1, data = 0): self.server_id = server_id self.message_type = message_type self.data = data #Transforma a mensagem em vetor de bytes, para que possa ser enviada pelo socket def message_to_bytes(self): return self.server_id.to_bytes(4,'big', signed=True) + self.message_type.to_bytes(4,'big', signed=True) + self.data.to_bytes(4,'big', signed=True) #Função para depuração def print_message(self): print(f"server_id = {self.server_id}") print(f"message_type = {self.message_type}") print(f"data = {self.data}") #Constrói uma instância da classe Message a partir de um vetor de bytes recebido def bytes_to_message(data): m = Message() m.server_id = int.from_bytes(data[0:4],'big') m.message_type = int.from_bytes(data[4:8],'big') m.data = int.from_bytes(data[8:12],'big', signed=True) return m