def sendTokenOcupado(self, nodoId): #Si soy el generador, cambio temporalmente el timeout para este método if self.ipGenerador == True: self.socketNN.settimeout(5) recibido = False #Armo el paquete msgId = (1).to_bytes(1, "big") nodoIdBytes = nodoId.to_bytes(2, "big") ipAzul = ip_to_bytes(str_ip_to_tuple(self.mapa[str(nodoId)][0])) portAzul = (self.mapa[str(nodoId)][1]).to_bytes(2, byteorder="big") msgFinal = msgId + nodoIdBytes + ipAzul + portAzul #Mientras no reciba respuesta while not recibido: #Envío el token ocupado self.socketNN.sendto(msgFinal, self.nextOrangeAddress) try: #Intento recibir respuesta resp, address = self.socketNN.recvfrom(1024) nodoIdResp = int.from_bytes(resp[1:3], byteorder='big') if nodoId == nodoIdResp: recibido = True if self.NUM_AZULES != 0: self.sendTokenVacio() except socket.timeout: #Si se vence el timeout, vuelvo a enviarlo pass #Si soy el generador, regreso el timeout al tiempo original if self.ipGenerador == True: self.socketNN.settimeout(10)
def recibirTokenVacio(self): if (len(self.cola) != 0 and self.NUM_AZULES != 0): solicitud = self.cola.pop(0) nodoId = int(self.getNodoId()) self.actualizarEstructuras(nodoId, solicitud[0], solicitud[1]) print(self.mapa) nodoIdBytes = nodoId.to_bytes(2, "big") vecinos = self.listaVecinos(nodoId) self.NUM_AZULES -= 1 self.listaAzules.append(solicitud) for n in vecinos: if self.mapa[n] == (0, 0): msgId = (15).to_bytes(1, "big") vecinoBytes = int(n).to_bytes(2, "big") paqueteFinal = msgId + nodoIdBytes + vecinoBytes self.secureUDPBlue.send(paqueteFinal, solicitud[0], solicitud[1]) else: msgId = (16).to_bytes(1, "big") vecinoBytes = int(n).to_bytes(2, "big") vecinoIP = ip_to_bytes( str_ip_to_tuple(self.mapa[str(n)][0])) vecinoPort = self.mapa[str(n)][1].to_bytes(2, "big") paqueteFinal = msgId + nodoIdBytes + vecinoBytes + vecinoIP + vecinoPort self.secureUDPBlue.send(paqueteFinal, solicitud[0], solicitud[1]) return nodoId else: return -1
def sendRequest(self): msgId = (14).to_bytes(1, byteorder="big") msgIP = ip_to_bytes(str_ip_to_tuple(self.localIP)) msgPort = (self.localPort).to_bytes(2, byteorder="big") msgFinal = (msgId + msgIP + msgPort) print("Sending request...") self.secureUDP.send(msgFinal, self.serverIP, self.serverPort)
def helloVecino(self, vecinoIP, vecinoPort): msgId = (1).to_bytes(1, byteorder="big") nodoId = (self.nodoId).to_bytes(2, byteorder="big") msgIP = ip_to_bytes(str_ip_to_tuple(self.localIP)) msgPort = (self.localPort).to_bytes(2, byteorder="big") msgFinal = (msgId + nodoId + msgIP + msgPort) self.secureUDP.send(msgFinal, vecinoIP, vecinoPort)
def enviarPaqIniciales(self, ipNaranja): miDireccion = ipNaranja.split(".") msg = (0).to_bytes(1, byteorder="big") IP = ip_to_bytes(str_ip_to_tuple(ipNaranja)) self.socketNN.sendto(msg + IP, self.nextOrangeAddress)