class RoteadorConsumer(Thread): def __init__(self, porta): print('porta {}'.format(porta)) self.__pacotes = [] self.__transporte = CamadaTransporte() self.__fisica = CamadaFisica('UDP', '0.0.0.0', porta, False, 0) self.__receiving_lock = False Thread.__init__(self) def coletar_pacotes(self): while self.__receiving_lock: pass pacotes = self.__pacotes self.__pacotes = [] return pacotes def run(self): while True: msg, cliente = self.__fisica.receber(ack=True) print(msg) if msg == 'REPASS': msg, cliente = self.__fisica.receber() print(msg) while msg != 'DONE': self.__receiving_lock = True source, target, foo = self.__transporte.desenpacotar_mensagem( msg) self.__pacotes.append({'msg': msg, 'target': target}) msg, cliente = self.__fisica.receber() self.__receiving_lock = False
def __init__(self, porta): print('porta {}'.format(porta)) self.__pacotes = [] self.__transporte = CamadaTransporte() self.__fisica = CamadaFisica('UDP', '0.0.0.0', porta, False, 0) self.__receiving_lock = False Thread.__init__(self)
class Servidor(Thread): """ Thread para simular um servidor """ def __init__(self, tipo, porta): Thread.__init__(self) self.__camadafisica = CamadaFisica(tipo, '127.0.0.1', porta) def run(self): self.__camadafisica.servir()
def __init__(self, porta): self.__lock = Lock() self.__fisica = CamadaFisica('UDP', '0.0.0.0', porta, False, 0) self.__enlace = CamadaEnlace(0.000, 0.0000, 0.000, 32, (10, 20)) self.__fisica.servir() Thread.__init__(self) self.__killme = False self.__pacote = None self.__pacotes_recebidos = [] self.__pacotes_enviar = [] self.__ultimo_pacote = None
class Cliente(Thread): """ Thread para simular um cliente """ def __init__(self, tipo, endereco, porta): Thread.__init__(self) self.__camadafisica = CamadaFisica(tipo, endereco, porta) self.__camadaenlace = CamadaEnlace(0.1, 0.01, 0.01, 32, (10, 20)) def run(self): while True: frame = self.__camadaenlace.gerar_frame() frame = self.__camadaenlace.aplicar_ruido(frame) frame = self.__camadaenlace.check_sum(frame) msg = ''.join([str(bit) for bit in frame]) self.__camadafisica.enviar_msg(msg) sleep(0.5)
def __init__(self, tipo, endereco, porta): Thread.__init__(self) self.__camadafisica = CamadaFisica(tipo, endereco, porta) self.__camadaenlace = CamadaEnlace(0.1, 0.01, 0.01, 32, (10, 20))
def __init__(self, tipo, porta): Thread.__init__(self) self.__camadafisica = CamadaFisica(tipo, '127.0.0.1', porta)
class HostConsumer(Thread): def __init__(self, porta): self.__lock = Lock() self.__fisica = CamadaFisica('UDP', '0.0.0.0', porta, False, 0) self.__enlace = CamadaEnlace(0.000, 0.0000, 0.000, 32, (10, 20)) self.__fisica.servir() Thread.__init__(self) self.__killme = False self.__pacote = None self.__pacotes_recebidos = [] self.__pacotes_enviar = [] self.__ultimo_pacote = None def killme(self): self.__killme = True def send_message(self, packet): self.__pacotes_enviar.append(packet) def collect_packets(self): packets = self.__pacotes_recebidos self.__pacotes_recebidos = [] return packets def processar_pacote(self, pacote): pacote = self.__enlace.gera_check_sum([int(i) for i in pacote]) pacote = ''.join(map(str, self.__enlace.aplicar_ruido(pacote))) return pacote def enviar_pacote(self, pacote, cliente, ack=False): if ack: self.__fisica.enviar_msg(pacote, cliente) else: self.__fisica.enviar_msg(self.processar_pacote(pacote), cliente) def run(self): while not self.__killme: # print('Esperando roteador') __msg, __cliente = self.__fisica.receber(ack=True) # self.__get_shared_values() # # print(str(__msg)) if __msg is None: continue if __msg == 'SEND_AGAIN': if self.__ultimo_pacote is None: self.enviar_pacote('', __cliente) else: self.enviar_pacote(self.__ultimo_pacote, __cliente) msg, cliente = self.__fisica.receber(ack=True) while msg != 'OK': self.enviar_pacote(self.__ultimo_pacote, __cliente) msg, cliente = self.__fisica.receber() self.__ultimo_pacote = None if __msg == 'SEND': # pergunta ao host se ele tem algo para mandar #print('Enviando mensagem com pacotes') if len(self.__pacotes_enviar) > 0: self.__ultimo_pacote = self.__pacotes_enviar.pop() self.enviar_pacote(self.__ultimo_pacote, __cliente) else: self.enviar_pacote('', __cliente, ack=True) # self.__get_shared_values() # self.__set_shared_values('') if __msg == 'RECV': # pede ao host para que ele receba um pacote # print("Recebendo pacote do roteador") msg, cliente = self.__fisica.receber() self.__pacotes_recebidos.append(msg) # print('Pacote recebido {} - {}'.format(msg_sender, msg)) print('morri host')
def adicionar_conexao_router(self, conexao_ip, conexao_porta, endereco): self.__conexoes_router[endereco] = CamadaFisica( 'UDP', conexao_ip, conexao_porta, False, 0)