Exemple #1
0
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
Exemple #2
0
    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)
Exemple #3
0
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()
Exemple #4
0
    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
Exemple #5
0
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)
Exemple #6
0
 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))
Exemple #7
0
 def __init__(self, tipo, porta):
     Thread.__init__(self)
     self.__camadafisica = CamadaFisica(tipo, '127.0.0.1', porta)
Exemple #8
0
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')
Exemple #9
0
 def adicionar_conexao_router(self, conexao_ip, conexao_porta, endereco):
     self.__conexoes_router[endereco] = CamadaFisica(
         'UDP', conexao_ip, conexao_porta, False, 0)