Esempio n. 1
0
    def verificaRecebimento(self, pacoteRecebido, janela, endereco):
        confirma = False

        if pacoteRecebido.identificador < janela.inicio < janela.fim:
            confirma = True
        elif janela.fim < pacoteRecebido.identificador < janela.inicio:
            confirma = True

        if janela.dentroDosLimites(pacoteRecebido.identificador):
            confirma = True
            janela.insereOrdenado(pacoteRecebido.identificador, pacoteRecebido)

        while not janela.temEspaco():
            self.filaDeEscrita.put(janela.dados[0].mensagem, block=True)
            janela.removePrimeiro()

        if confirma:
            erro = random.random()
            pacoteParaEnvio = Pacote(pacoteRecebido.identificador,
                                     pacoteRecebido.timestampSec,
                                     pacoteRecebido.timestampNs)

            if erro > self.pError:
                self.sock.sendto(pacoteParaEnvio.pacoteParaRede(erro=False),
                                 endereco)
            else:
                self.sock.sendto(pacoteParaEnvio.pacoteParaRede(erro=True),
                                 endereco)

        return
Esempio n. 2
0
    def recebendoPacotes(self):
        while self.rodando:
            entrada = None
            endereco = None
            dados = None
            md5 = None

            entrada, saida, excecao = select.select([self.sock], [], [], 10)
            if entrada:
                dados, endereco = self.sock.recvfrom(TAM_MAX)

            if entrada:
                pacoteDoCliente, md5Recebido = Pacote.redeParaPacote(
                    dados, texto=True)

                if not (endereco
                        in self.clientes):  #verifica se é um cliente novo
                    self.clientes[endereco] = Buffer(self.tamanhoJanela)

                if pacoteDoCliente.verificaMD5(
                        md5Recebido):  #verifica a integridade do pacote
                    threadingCliente = threading.Thread(
                        target=self.verificaRecebimento,
                        args=[
                            pacoteDoCliente, self.clientes[endereco], endereco
                        ])
                    threadingCliente.start()

        return
 def enviaRREP(self, macDestino, sequencia, rota):
     #Cria um pacote e inseri o cabeçalho da camada de rede
     cabecalho = Cabecalho("REDE", self._camadaEnlace._camadaFisica._id,
                           macDestino, -1, 1, -1, sequencia)
     pacote = Pacote(rota, 1)
     pacote.addCabecalho(cabecalho)
     msg = "Enviando um RREP com destino para"
     #exibe pacote criado
     self.exibePacote(msg, self._camadaEnlace._camadaFisica._id, macDestino)
     #Define a rota requisitada
     for indice, mac in enumerate(cabecalho._sequenList):
         if (mac == self._camadaEnlace._camadaFisica._id):
             proximoDestino = cabecalho._sequenList[indice + 1]
             proximoPacote = pacote
             self._camadaEnlace.addPacote(proximoPacote, proximoDestino)
             break
 def enviaRREQ(self, macDestino):
     # Inicializa uma sequencia e coloca o seu ID como primeiro
     sequencia = []
     # add o proprio endereço da camada fisica no pacote
     sequencia.append(self._camadaEnlace._camadaFisica._id)
     # numero do pacote
     sequenNum = random.randint(1, 128733788)
     self._listaRREQS.append(sequenNum)
     # Cria um pacote e inseri o cabeçalho da camada de rede
     cabecalho = Cabecalho("REDE", self._camadaEnlace._camadaFisica._id,
                           macDestino, -1, 0, sequenNum, sequencia)
     pacote = Pacote("", 1)
     pacote.addCabecalho(cabecalho)
     msg = "Enviando um RREQ "
     # exibe pacote criado
     self.exibePacoteMacNum(msg, self._camadaEnlace._camadaFisica._id, None)
     # add a camada de enlace o pacote
     self._camadaEnlace.addPacote(pacote, -1)
Esempio n. 5
0
 def enviaRREQ(self, macDestino):
     # Inicializa uma sequencia e coloca o seu ID como primeiro
     # add o proprio endereço da camada fisica no pacote
     sequencia = []
     sequencia.append(self._camadaEnlace._camadaFisica._id)
     # numero do pacote
     sequenNum = random.randint(1, 4412349)
     self._listaRREQS.append(sequenNum)
     # Cria um pacote e inseri o cabeçalho da camada de rede
     cabecalho = Cabecalho("REDE", self._camadaEnlace._camadaFisica._id,
                           macDestino, -1, 0, sequenNum, sequencia)
     pacote = Pacote("", 1)
     pacote.addCabecalho(cabecalho)
     msg = "Enviando um RREQ"
     # exibe pacote criado
     # TROQUEI CABEÇALHO._SEQUENNUM por sequenNUM
     self.exibePacote(msg, self._camadaEnlace._camadaFisica._id, macDestino,
                      sequenNum)
     # add a camada de enlace o pacote
     self._camadaEnlace.addPacote(pacote, -1)
Esempio n. 6
0
def iniciar():
    global jogador, passar_turno, turno_atual, dicionario, dicionario_ordenado, modo_jogo
    
    tabuleiro = Tabuleiro(DL, TL, DP, TP)
    pacote = Pacote()
    jogador = []
    passar_turno = 0
    turno_atual = 1

    dicionario = set()
    dicionario_ordenado = {}
    
    pkl_file = open('dicionario.pkl', 'rb')
    dicionario = pickle.load(pkl_file)
    pkl_file.close()

    pkl_file = open('dicionario_ordenado.pkl', 'rb')
    dicionario_ordenado = pickle.load(pkl_file)
    pkl_file.close()


    if dicionario == "":
        print("ERRO - Dicionario não foi carregado corretamente")

    # MENU DE INICIO
    os.system('cls' if os.name == 'nt' else 'clear')
    print("#-----------------------------------------------#")
    print("|  SCRABBLE - PROJETO E ANÁLISE DE ALGORITIMOS  |")
    print("|                     TeamR                     |")
    print("|         Luiz Eduardo Pereira - 0021619        |")
    print("|        Rafaela Martins Vieira - 0002852       |")
    print("#-----------------------------------------------#")
    print("\n\n\n")
    print("Modos de Jogo:")
    print("    1 - Jogador vs Jogador")
    print("    2 - Jogador vs Computador")
    modo_jogo = int(input("Escolha uma opção: "))
    while ((modo_jogo < 1) or (modo_jogo > 2)):
        modo_jogo = int(input("Escolha uma opção válida (1 / 2): "))

    # ESCOLHA DE NOMES DOS JOGADORES
    jogador.append(Jogador(pacote))
    jogador[0].setNome(input("Nome do Jogador 1: "))
    jogador.append(Jogador(pacote))
    if (modo_jogo == 1):    
        jogador[1].setNome(input("Nome do Jogador 2: "))
    else:
        jogador[1].setNome("Computador")

    jogador_atual = jogador[0]
    turno(jogador_atual, tabuleiro, pacote)
Esempio n. 7
0
    def escutarServidor(self):
        dados = None
        while not self.confirmados:
            entrada = None
            entrada, saida, excecao = select.select([self.sock], [], [], 10)

            if entrada:
                dados, _ = self.sock.recvfrom(36)  #36 é o tamanho do cabeçalho
                pacoteRecebido, md5Recebido = Pacote.redeParaPacote(
                    dados, texto=False)
                if pacoteRecebido.verificaMD5(md5Recebido):
                    self.confirmarPacote(pacoteRecebido.identificador)

        return
Esempio n. 8
0
    def lerArquivoLog(self):
        identificador = 0
        linhas = self.abrirArquivo(self.nomeLog)

        for linha, timesatamp in linhas:
            segundos, nanosegundos = timesatamp.split('.')
            pacote = Pacote(identificador, segundos, nanosegundos,
                            linha[:-1])  #linha[:-1] retira o \n
            self.filaDeEspera.put(pacote, block=True)
            identificador += 1

        self.enviando = False

        return
 def addPacote(self, macDestino, mensage, tempo):
     pacote = Pacote(mensage, tempo)
     cabecalho = Cabecalho("REDE", self._camadaEnlace._camadaFisica._id,
                           macDestino, -1, -1, -1, None)
     pacote.addCabecalho(cabecalho)
     self._listaPacotes.append(pacote)