Esempio n. 1
0
    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
Esempio n. 2
0
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()
Esempio n. 3
0
    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
Esempio n. 4
0
    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
Esempio n. 5
0
    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
Esempio n. 6
0
    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
Esempio n. 7
0
# 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)