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
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)
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)
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)
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
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)