Example #1
0
def atualizaAPI(notificaSocket):
    i = 0
    global notificacoes
    while condicao == True:
        #Recebe empty ou continue
        mensagem = recv_msg(notificaSocket)
        if mensagem == 'Empty':
            continue
        #else(recebeu a lista das notificaoes)
        if mensagem == 'Nothing changed':
            pass
        else:
            #Este try/except serve para quando o socket e fechado(opcao SAIR) no servidor nao dar erro de NoType. Simplesmente ignora os erros.
            try:
                #juntar as notificacoes, ordenar e selecionar apenas os elementos unicos
                listaNoti = list(mensagem.split(" "))
                novasNotificacoes = notificacoes
                novasNotificacoes.extend(listaNoti)
                notificacoes = novasNotificacoes
                notificacoes = list(set(notificacoes))
                notificacoes.sort()
            except:
                pass
        #Da o 'OK' ao servidor
        send_msg(notificaSocket, 'Keep')
    return
Example #2
0
def login(c, notificaSocket, Num_cliente):
    tentativas = 2
    while tentativas >= 0:
        ID = recv_msg(c)
        i = verificaID(ID)
        if i != False:
            send_msg(c, 'Success')
            return i
        else:
            str(tentativas)
            send_msg(c, str(tentativas))
        tentativas -= 1

    print Num_cliente, curr_time(), 'Numero maximo de tentativas excedido!'
    #Caso o cliente exceda o numero maximo de tentativas(3), entao termina a sua thread de servidor
    terminate(c, notificaSocket)
Example #3
0
def login(s):
    print 'Bem-vindo ao servidor de privacidade ISABELA'
    #so para inicializar
    ID = 'a'
    #Obtem o ID que o utilizador introduz, envia-o para o servidor ver se e valido, recebe a resposta do utilizador e avalia se continua a perguntar ou nao
    while True:
        ID = raw_input('Introduza o seu ID: ')
        send_msg(s, ID)
        result = recv_msg(s)
        if result == 'Success':
            return ID
        else:
            result = int(result)
            if result != 0:
                print 'Introduza um ID existente. Tem', result, 'tentativas'
            else:
                print 'Numero maximo de tentativas atingido! Terminando o cliente...'
        result = int(result)
        if result == 0:
            s.close
            sys.exit(0)
Example #4
0
def main(s, notificaSocket):
    ID = login(s)
    print "Login bem sucedido!"

    #Cria a thread para atualizar a API
    try:
        Thread(target=atualizaAPI, args=(notificaSocket, )).start()
    except:
        print "Erro ao iniciar a thread para atualizar!"
        sys.exit()

    #Ciclo principal
    while True:
        #Para nao haver conflito de envio de dados
        time.sleep(0.001)
        #Recebe as subscricoes para depois as impirmir
        subscricoes = recv_msg(s)
        subscricoes = list(subscricoes.split(" "))

        if subscricoes == ['']:
            subscricoes = []

        opcao = menu()
        #Verifica qual a opcao escolhida e executa a sua funcao
        if opcao == 1:
            opcao_menu_op1 = menu_op('opcao1')
            if opcao_menu_op1 == 11:
                continue
            #else
            #Receber o dado pedido
            print 'Valor = ', recv_msg(s)
            raw_input('\n[Introduza qualquer coisa para continuar]')
        elif opcao == 2:
            for i in range(11):
                print recv_msg(s)
            raw_input('\n[Introduza qualquer coisa para continuar]')
        elif opcao == 3:
            opcao_menu_op3 = menu_op('opcao3')
            if opcao_menu_op3 == 10:
                continue
            #else
            #Receber o dado pedido
            print 'Media = ', recv_msg(s)
            raw_input('\n[Introduza qualquer coisa para continuar]')
        elif opcao == 4:
            for i in range(10):
                print recv_msg(s)
            raw_input('\n[Introduza qualquer coisa para continuar]')
        elif opcao == 5:
            #Listar subscricoes e obter a opcao selecionada
            opcao_sub = menu_sub(subscricoes)
            if opcao_sub == 7:
                continue
            elif opcao_sub == 1:
                sub = menu_op('opcao5.1')
                if sub == 10:
                    continue
                #else
                print 'Subscricao criada com sucesso!'
                raw_input('\n[Introduza qualquer coisa para continuar]')
            elif opcao_sub == 2:
                sub = menu_op('opcao5.2')
                if sub == 10:
                    continue
                #else
                print 'Subscricao criada com sucesso!'
                raw_input('\n[Introduza qualquer coisa para continuar]')
            elif opcao_sub == 3:
                maximo = printSubs(subscricoes, 1)

                #Nao existe nenhuma subscricao
                if maximo == -1:
                    raw_input('\n[Introduza qualquer coisa para continuar]')
                    continue
                #else
                print '\n'
                if verifica_valor(1, maximo) == maximo:
                    send_msg(s, 'Voltar')
                    continue
                #else
                #enviar o parametro a remover
                indiceElementoRemover = maximo - 2
                send_msg(s, str(indiceElementoRemover))
            elif opcao_sub == 4:
                print 'Subscricoes individuais efetuadas com sucesso!'
                raw_input('\n[Introduza qualquer coisa para continuar]')
            elif opcao_sub == 5:
                print 'Subscricoes de grupo efetuadas com sucesso!'
                raw_input('\n[Introduza qualquer coisa para continuar]')
            elif opcao_sub == 6:
                print 'Todas as subscricoes foram removidas com sucesso!'
                raw_input('\n[Introduza qualquer coisa para continuar]')
        elif opcao == 6:
            global notificaoes
            del notificacoes[:]
        elif opcao == 7:
            global condicao
            #Terminar a Thread que atualiza a API
            condicao = False
            s.close
            notificaSocket.close
            sys.exit(0)
Example #5
0
def main(c, notificaSocket, Num_cliente):
    global utilizadores
    global subscricoes

    #Este e o indice do ID no array
    index_ID = login(c, notificaSocket, Num_cliente)

    print Num_cliente, curr_time(), 'Login bem sucedido!'

    #Cria a Thread que atualiza a API
    try:
        Thread(target=atulizaAPI, args=(notificaSocket, index_ID)).start()
    except:
        print "Erro ao iniciar a thread para atualizar!"
        sys.exit()

    while True:
        #Arranjar o array das subscricoes e enviar para o cliente
        auxSet = set(subscricoes)
        subscricoes = list(auxSet)
        subscricoes.sort()
        enviaSubs = ' '.join(subscricoes)
        send_msg(c, enviaSubs)

        #Obter a opcao selecionada pelo cliente
        mensagem = recv_msg(c)
        mensagem = int(mensagem)

        if mensagem == 1:
            print Num_cliente, curr_time(
            ), 'Opcao 1. (ver uma das minhas informacoes) selecionada'
            #Receber a opcao do outro menu
            mensagem = recv_msg(c)
            mensagem = int(mensagem)
            if mensagem == 11:
                print Num_cliente, curr_time(
                ), 'Opcao 1.11. (voltar) selecionada'
                continue
            #else
            print Num_cliente, curr_time(), 'Opcao 1.%d selecionada' % mensagem
            key = num_to_key(mensagem)
            result = search_key(key, index_ID)
            if result == 'ERROR':
                print Num_cliente, 'Ocorreu um ERRO!'
                c.close  # Close connection
                sys.exit(0)

            #Enviar os dados
            send_msg(c, str(result))

        elif mensagem == 2:
            print Num_cliente, curr_time(
            ), 'Opcao 2. (ver todas as minhas informacoes) selecionada'
            for key, value in data[index_ID].items():
                mensagem = '%s = %s' % (key, value)
                send_msg(c, mensagem)
                #Para nao haver conflito de envio de dados
                time.sleep(0.001)

        elif mensagem == 3:
            print Num_cliente, curr_time(
            ), 'Opcao 3. (ver a media de uma das informacoes do grupo) selecionada'
            #Receber a opcao do outro menu
            mensagem = recv_msg(c)
            mensagem = int(mensagem)
            if mensagem == 10:
                print Num_cliente, curr_time(
                ), 'Opcao 3.11. (voltar) selecionada'
                continue
            #else
            print Num_cliente, curr_time(
            ), 'Opcao 3.%d.. selecionada' % mensagem
            key = num_to_key(mensagem)
            #Temos o parametro que queremos a media, agora calcular a media
            med = media(key)
            #Enviar a media para o cliente
            send_msg(c, str(med))

        elif mensagem == 4:
            print Num_cliente, curr_time(
            ), 'Opcao 4. (ver a media de todas das informacoes do grupo) selecionada'
            #Pegar num id qualquer qualquer(porque todos tem todos os parametros)
            for key, value in data[index_ID].items():
                if key == 'id':
                    break
                med = media(key)
                mensagem = '%s = %s' % (key, med)
                send_msg(c, mensagem)
                #Para nao haver conflito de envio de dados
                time.sleep(0.001)

        elif mensagem == 5:
            print Num_cliente, curr_time(
            ), 'Opcao 5. (subscricoes) selecionada'
            #Recebe a opcao do menu das subscricoes
            sub = recv_msg(c)
            sub = int(sub[0])
            if sub == 7:
                print Num_cliente, curr_time(
                ), 'Opcao 5.7. (voltar) selecionada'
                continue
            elif sub == 1:
                print Num_cliente, curr_time(
                ), 'Opcao 5.1. (criar subscricao individual) selecionada'
                #Recebe qual a subscricao individual a fazer
                sub2 = recv_msg(c)
                sub2 = int(sub2)

                if sub2 == 10:
                    print Num_cliente, curr_time(
                    ), 'Opcao 5.1.10. (voltar) selecionada'
                    continue
                #else
                #Formata para colocar no array
                subNo = "1.%d" % sub2
                subscricoes.append(subNo)
                print Num_cliente, curr_time(
                ), 'Subscricao individual criada para', num_to_key(sub2)
            elif sub == 2:
                print Num_cliente, curr_time(
                ), 'Opcao 5.2. (criar subscricao de grupo) selecionada'
                #Recebe qual a subscricao de grupo a fazer
                sub2 = recv_msg(c)
                sub2 = int(sub2)
                if sub2 == 10:
                    print Num_cliente, curr_time(
                    ), 'Opcao 5.2.10. (voltar) selecionada'
                    continue
                #Formata para colocar no array
                subNo = "2.%d" % sub2
                if subNo not in subscricoes:
                    subscricoes.append(subNo)
                    print Num_cliente, curr_time(
                    ), 'Subscricao de grupo criada para', num_to_key(sub2)
            elif sub == 3:
                print Num_cliente, curr_time(
                ), 'Opcao 5.3. (remover subscricao) selecionada'
                if not subscricoes:
                    continue
                #Recebe o elemento a remover
                elementoRemover = recv_msg(c)
                if elementoRemover == 'Voltar':
                    print Num_cliente, curr_time(
                    ), 'Opcao 5.3.4. (voltar) selecionada)'
                    continue

                elementoRemover = int(elementoRemover)
                #Remove o elemento escolhido
                del subscricoes[elementoRemover]
            elif sub == 4:
                print Num_cliente, curr_time(
                ), 'Opcao 5.4. (subscrever todos os parametros individuais) selecionada'
                subsIndividuais = [
                    '1.1', '1.2', '1.3', '1.4', '1.5', '1.6', '1.7', '1.8',
                    '1.9'
                ]
                subscricoes.extend(subsIndividuais)
            elif sub == 5:
                print Num_cliente, curr_time(
                ), 'Opcao 5.5. (subscrever todos os parametros de grupo) selecionada'
                subsGrupo = [
                    '2.1', '2.2', '2.3', '2.4', '2.5', '2.6', '2.7', '2.8',
                    '2.9'
                ]
                subscricoes.extend(subsGrupo)
            elif sub == 6:
                print Num_cliente, curr_time(
                ), 'Opcao 5.6. (remover todas as subscricoes) selecionada'
                del subscricoes[:]
        elif mensagem == 6:
            print Num_cliente, curr_time(
            ), 'Opcao 6. (limpar notificacoes) selecionada'
            continue
        elif mensagem == 7:
            print Num_cliente, curr_time(), 'Cliente saiu'
            terminate(c, notificaSocket)
Example #6
0
def atulizaAPI(notificaSocket, index_ID):
    global data
    while condicao == True:
        if not subscricoes:
            send_msg(notificaSocket, 'Empty')
            continue

        #Recebe a API
        #url = "http://10.3.4.75:9014/v2/entities?options=keyValues&type=student&attrs=activity,calls_duration,calls_made,calls_missed,calls_received,department,location,sms_received,sms_sent"
        url = "http://socialiteorion2.dei.uc.pt:9014/v2/entities?options=keyValues&type=student&attrs=activity,calls_duration,calls_made,calls_missed,calls_received,department,location,sms_received,sms_sent&limit=100"
        headers = {
            'cache-control': "no-cache",
            "fiware-servicepath": "/",
            "fiware-service": "socialite"
        }
        r = requests.get(url, headers=headers)
        newData = r.json()

        lista = []
        #Notificacoes individuais
        if data[index_ID] != newData[index_ID]:
            #Obtemos as keys dos paramentros alterados
            diferenca = DictDiffer(newData[index_ID], data[index_ID])
            for e in diferenca:
                #Transformar a key em valor
                num = key_to_num(str(e))
                #Formatar para a nossa lista de notificacoes e adicionar o elemento
                notificao = "1.%d" % num
                lista.append(notificao)

        #Notificacoes de grupo
        for i in range(len(data)):
            #Obtemos as keys dos paramentros alterados
            diferenca = DictDiffer(newData[i], data[i])
            for e in diferenca:
                num = key_to_num(str(e))
                #Formatar para a nossa lista de notificacoes e adicionar o elemento
                notificao = "2.%d" % num
                lista.append(notificao)
        #Deepcopy para alterar o valor
        data = copy.deepcopy(newData)

        #Ver quais os elementos em comum da lista das subscricoes e notificacoes
        comuns = list(set(lista) & set(subscricoes))
        comuns_enviar = ' '.join(comuns)

        #Enviar para o cliente a lista das notificacoes
        if comuns_enviar == '':
            send_msg(notificaSocket, 'Nothing changed')
        #se tiver alguma coisa
        else:
            send_msg(notificaSocket, comuns_enviar)

        control = recv_msg(notificaSocket)
        if control == 'Stop':
            notificaSocket.close()
            sys.exit()
        #else(Keep) continua a executar

        #Indica de quanto em quanto tempo a API vai ser alterada
        time.sleep(tempo)
    return