quinta-feira, 6 de março de 2014

RPC com Python.

RPC é a comunicação entre processos veja mais em wikipedia. Atente para os detalhes de versões do S.O. e do Python, muitas mudanças no código podem ser necessárias em função das versões.

Figura 1: Ambiente de desenvolvimento.
Este código foi testado e foi comprovado a sua execução dentro dos requisitos das versões.

Figura 2: Programa no editor.

#*********************************************************************
#!/usr/bin/env python
#-*- coding:utf-8 -*-
#
# arquivo: servidorchavevalor8.py
#*********************************************************************
from xmlrpc.server import SimpleXMLRPCServer, list_public_methods
"""
Servidor RPC dos métodos: versão, busca, salva, apaga, sai, chave e executa.
"""

v_dicionario = {'tan':83}
v_acesso = {'tekniko':77,'administranto':66,'komum':33} # privilégios pré definidos.

servilo = SimpleXMLRPCServer(('localhost', 15000), allow_none = True)
servilo.register_introspection_functions()

class ServidorChaveValor():
       
        def __init__(self):
            self.nome = 't'

        def acesso(nome_terminal):
            """Gerencia o acesso ao terminal.
            """
            if nome_terminal == v_acesso['tekniko']:
                    print(v_acesso['tekniko'])
            elif nome_terminal == v_acesso['administranto']:
                    print(v_acesso['administranto'])
            elif nome_terminal == v_acesso['komum']:
                    print(v_acesso['komum'])
            else:
                    print('Acesso negado!')
       
        def versao():
            """Exibe a versão do RPC.
            """
            print('RPC Versão 8.')
           
        def busca(v_chave):
            """Retorna o valor com base na chave do dicionário.
            """
            if v_conectado[0] == v_acesso['administranto']:  # Verificar privilégio de acesso.
                    print('Busca com sucesso!')
                    return v_dicionario[v_chave]
            else:
                    print('Acesso negado! Não buscado.')

        def insere(v_chave, v_valor):
            """Inseri um valor com base na chave do dicionário.
            """
            v_dicionario[v_chave] = v_valor

        def apaga(v_chave):
            """Apaga um dado com base na chave do dicionário.
            """
            del v_dicionario[v_chave]

        def executa():
            """Executa o servidor infinitamente!
            """
            try:
                print ('Use "Control-C" para encerrar o servidor 2.')
                servilo.serve_forever()
            except KeyboardInterrupt:
                print ('Saída 2!')

servilo.register_instance(ServidorChaveValor()) # Registra todos os métodos como público.


if __name__ == '__main__':
     try:
        print ('Use "Control-C" para encerrar o servidor 1.')
        servilo.serve_forever()
     except KeyboardInterrupt:
             print ('Saída 1!')
#************************************************************************

A interação com o utilizador é muito boa e o melhor é que as mensagens apresentados na edição durante a execução esta no controle do programador.

Figura 3: Interação com o utilizador.
Usando o RCP.
#************************************************************************

from servidorchavevalor8 import ServidorChaveValor # biblioteca.
s = ServidorChaveValor  # instância a classe.

s.acesso(66)            # conecta-se ao sistema como usuário administrador.
s.versao()              # verifica a versão do sistema.
print(s.busca('tan'))   # faz uma busca do valor pela chave.
s.insere('x',12)        # insere um elemento.
print(s.busca('x'))     # faz uma busca do valor pela chave.

s.acesso(77)            # conecta-se ao sistema como usuário técnico.
print(s.mostra())       # mostra todo o dicionário.

s.acesso(66)            # conecta-se ao sistema como usuário administrador.
s.apaga('x')            # apaga um item do dicionário pela chave.

s.acesso(77)            # conecta-se ao sistema como usuário técnico.
print(s.mostra())       # mostra todo o dicionário.

s.acesso(66)            # conecta-se ao sistema como usuário administrador.
s.executa()             # executa o RPC infinitamente.

#************************************************************************

Figura 4: Execução do RPC versão 8.



Daí para frente é só implementar mais alguns métodos com funcionalidades práticas.

Nenhum comentário:

Postar um comentário