def identificar_resposta(self, id, resp): msg = None estado = None if resp is None: return estado, msg elif resp[0] == '1': try: resp = resp[resp.index('-') + 1:] tempo = int(resp[:resp.index('/')]) o_id = int(resp[resp.index('/') + 1:]) except ValueError: raise RuntimeError( "berkeleysub: Recebido valor inesperado !int = {}".format( resp[resp.index('-') + 1:])) if PID == o_id: relogio.corrigir_tempo(tempo) print("TEMPO CORRIGIDO:", relogio.get_tempo()) # msg = "final" estado = BerkeleySub() elif PID != id: if resp == "eleicao": if PID > id: msg = "eleicao" estado = BullyInit() else: # msg = "OK" estado = BullySub() return estado, msg
def main(): print("Eu sou", PID) comunicacao.bind() executor = Sistema() executor.iniciar_bully() on = True while on: resp = comunicacao.receber() if resp and int(resp[:resp.index('/')]) != PID: print("recebido:", resp) msg = executor.responder(resp) if msg: if msg != "final": comunicacao.enviar(str(PID) + '/' + msg) print("enviado:", str(PID) + '/' + msg) else: on = False print("tempo atual:", relogio.get_tempo()) time.sleep(1) relogio.finalizar_relogio()
def identificar_resposta(id, resp): msg = None estado = None if resp is None: return estado, msg elif resp[0] == '1': try: tempo = int(resp[resp.index('-') + 1:]) except ValueError: pass # raise RuntimeError("berkeleysub: Recebido valor inesperado !int = {}".format(resp[resp.index('-') + 1:])) else: msg = "0-" + str(relogio.get_tempo() - tempo) estado = BerkeleySub2() if PID != id: if resp == "eleicao": if PID > id: msg = "eleicao" estado = BullyInit() else: # msg = "OK" estado = BullySub() return estado, msg
def identificar_resposta(self, id, resp): msg = None estado = None if resp is None: if len(self.tempos) > 1: # cont = 0 # for i in self.tempos: # if (self.tempos[PID] - i) >= 100: # # if cont estado = BerkeleyLider3( int(sum(self.tempos.values()) / len(self.tempos)), self.tempos) else: estado = BullyInit() elif resp[0] == '1' or resp[0] == '0': try: tempo = int(resp[resp.index('-') + 1:]) except ValueError: raise RuntimeError( "berkeleysub: Recebido valor inesperado !int = {}".format( resp[resp.index('-') + 1:])) if resp[0] == '1': msg = "0-" + str(relogio.get_tempo() - tempo) elif resp[0] == '0': self.tempos[id] = tempo - int( (relogio.get_tempo() - self.t) / 2) elif PID != id: if resp == "eleicao": if PID > id: msg = "eleicao" estado = BullyInit() else: # msg = "OK" estado = BullySub() return estado, msg
def identificar_resposta(id, resp): msg = None estado = None if resp is None: t = relogio.get_tempo() msg = "1-" + str(t) estado = BerkeleyLider2(t) print("INICIANDO BERKELEY") elif PID != id: if resp == "eleicao": if PID > id: msg = "eleicao" estado = BullyInit() else: # msg = "OK" estado = BullySub() return estado, msg
def identificar_resposta(self, id, resp): msg = None estado = None if resp is None: if not self.fechar: try: o_id, tempo = self.tempos.popitem() except KeyError: self.fechar = True else: msg = "1-" + str(self.t - tempo) + '/' + str(o_id) else: # msg = "final" estado = BerkeleyLider() elif resp[0] == '1': try: resp = resp[resp.index('-') + 1:] tempo = int(resp[:resp.index('/')]) o_id = int(resp[resp.index('/') + 1:]) except ValueError: raise RuntimeError( "berkeleylider3: Recebido valor inesperado !int = {}". format(resp[resp.index('-') + 1:])) if PID == o_id: relogio.corrigir_tempo(tempo) print("TEMPO CORRIGIDO:", relogio.get_tempo()) elif PID != id: if resp == "eleicao": if PID > id: msg = "eleicao" estado = BullyInit() else: # msg = "OK" estado = BullySub() return estado, msg
# on this port, listen ONLY to MCAST_GRP sock.bind(('', MCAST_PORT)) mreq = struct.pack("4sl", inet_aton(MCAST_GRP), INADDR_ANY) sock.setsockopt(IPPROTO_IP, IP_ADD_MEMBERSHIP, mreq) socksend.setsockopt(IPPROTO_IP, IP_MULTICAST_TTL, MULTICAST_TTL) msg = input("msg:").encode("utf-8") relogio.iniciar_relogio() while True: socksend.sendto( str(relogio.get_tempo()).encode("utf-8") + b" - " + msg, (MCAST_GRP, MCAST_PORT)) print('\nenviando {} bytes em multicast no tempo {}'.format( len(msg), relogio.get_tempo())) print(msg) print('\nwaiting to receive message') data, address = sock.recvfrom(1024) time.sleep(5) print('\nrecebido {} bytes de {} no tempo {}'.format( len(data), address, relogio.get_tempo())) print(data)