Ejemplo n.º 1
0
def run_diner(is_payer):
    worker = Diner()
    worker.start()
    worker.ready.wait()
    worker.listen_to_channel('/diners/ready')
    worker.listen_to_channel('/diners/done')
    name = str(uuid.uuid4())
    data = {
        'name': name
    }
    data = json.dumps(data)
    diners_entity = entity('diners')
    requests.post(diners_entity, data=data)
    worker.diners_ready.wait()
    resp = requests.get(diners_entity)
    diner_data = resp.json
    others = get_names(name, diner_data)
    secrets, to_watch = establish_secrets(name, others)
    worker.get_secrets(to_watch)
    worker.secrets_ready.wait()
    secrets = secrets + worker.secrets
    announce_bit(secrets, is_payer)
    print 'waiting for bits'
    worker.bits_ready.wait()
    print 'got bits'
    resp = requests.get(entity('announce'))
    bits = []
    for _, data in resp.json.iteritems():
        bits.append(data['bit'])
    result = xor_list(bits)
    if result:
        print 'A diner paid'
    else:
        print 'The NSA paid'
    worker.join()
Ejemplo n.º 2
0
def announce_bit(secrets, is_payer):
    bit = xor_list(secrets)
    if is_payer:
        bit = int(not bit)
    data = {'bit': bit}
    requests.post(entity('announce'), data=json.dumps(data))