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. |
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. |
#************************************************************************
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