sexta-feira, 7 de março de 2014

RCP cliente/servidor

O código e a execução do RCP .
Figura 1: telas dos códigos do cliente e servidor.


Figura 2: telas de execução do cliente e do servidor.

Servidor

#********************************************************************
# Autor:        ubiratã uaatsim itza I.
# Data:         07/03/2014
# Hora:         17:40:06
#*********************************************************************
# Arquivo:      servidorchavevalor9.py
#
# Descrição:    O arquivo servidorchavevalor4.py executou bem apareceu
#               os métodos porém, não realiza nunhuma operação sem dar
#               erro.
#
# Uso:          from servidorchavevalor9 import ServidorChaveValor
#               s = ServidorChaveValor
#               s.      --> aparecem os métodos e atributos disponíveis.
#
# Em 27/02/2014:
# 1- no janelas funciona até aparecer os métodos e atributos disponíveis.
# 2- no Ubuntu indica erros básicos.
#*********************************************************************

#!/usr/bin/env python
#-*- coding:utf-8 -*-

from xmlrpc.server import SimpleXMLRPCServer
from xmlrpc.server import SimpleXMLRPCRequestHandler

class RequestHandler(SimpleXMLRPCRequestHandler):
    rpc_paths = ()

# Restringe para um particular caminho.
#class RequestHandler(SimpleXMLRPCRequestHandler):
#    rpc_paths = ('/RPC2',)

v_dicionario = {'tan':88}
v_acesso = {'técnico':77,'administrador':66,'komum':33}
v_conectado = [1,2]

# Cria o servidor, pode ser "127.0.0.1" ou 'localhost'
servilo = SimpleXMLRPCServer(("127.0.0.1", 15000), allow_none = True, requestHandler=RequestHandler)
servilo.register_introspection_functions()

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

        def acesso(nome_terminal):
            """Gerencia o acesso ao terminal.
            """
            v_conectado[0] = nome_terminal
            if nome_terminal == v_acesso['técnico']:
                    print('Conectado:', v_acesso['técnico'])
            elif nome_terminal == v_acesso['administrador']:
                    print('Conectado:', v_acesso['administrador'])
            elif nome_terminal == v_acesso['komum']:
                    print('Conectado:', v_acesso['komum'])
            else:
                    print('Acesso negado! Não conectado.')
        servilo.register_function(acesso, 'acesso')
       
        def versao():
            """Exibe a versão do RPC.
            """
            print('RPC Versão 9.')
        servilo.register_function(versao, 'versao')
           
        def busca(v_chave):
            """Retorna o valor através da chave.
            """
            if v_conectado[0] == v_acesso['administrador']:
                    print('Busca com sucesso!')
                    return v_dicionario[v_chave]
            else:
                    print('Acesso negado! Não buscado.')
        servilo.register_function(busca, 'busca')

        def insere(v_chave, v_valor):
            """Inseri uma chave/valor no dicionário.
            """
            if v_conectado[0] == v_acesso['administrador']:
                    v_dicionario[v_chave] = v_valor
                    print('Dado inserido com sucesso!')
            else:
                    print('Acesso negado! Não inserido.')
        servilo.register_function(insere, 'insere')

        def apaga(v_chave):
            """Apaga uma chave.
            """
            if v_conectado[0] == v_acesso['administrador']:
                    del v_dicionario[v_chave]
                    print('Dado removido com sucesso!')
            else:
                    print('Acesso negado! Não apagado.')
        servilo.register_function(apaga, 'apaga')

        def mostra():
            """Mostra o dicionário.
            """
            if v_conectado[0] == v_acesso['técnico']:
                     print(v_dicionario.keys())
            else:
                    print('Acesso negado! Não mostrado.')
                    return -1
        servilo.register_function(mostra, 'mostra')

        def executa():
            """Executa o servidor infinitamente!
            """
            if v_conectado[0] == v_acesso['administrador']:
                    try:
                            servilo.server_close()
                            print ('Use "Control-C" para encerrar o servidor 2.')
                            servilo.serve_forever()
                    except KeyboardInterrupt:
                            servilo.server_close()
                            print ('Saída 2!')
            else:
                    print('Acesso negado! Não executado.')
        servilo.register_function(executa, 'executa')

        def fecha():
                servilo.server_close()
        servilo.register_function(fecha,'fecha')


servilo.register_instance(ServidorChaveValor())


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

Cliente
#********************************************************************
# Autor:        ubiratã uaatsim itza I.
# Data:         07/03/2014
# Hora:         17:45:06
#*********************************************************************
# Arquivo:      clienteRCP9.py
#
# Descrição:    O arquivo servidorchavevalor9.py executou bem apareceu
#               os métodos porém, não realiza nunhuma operação sem dar
#               erro.
#
# Uso:          import xmlrpc.client
#               s = xmlrpc.client.ServerProxy('http://localhost:15000')
#               s.      --> aparecem os métodos e atributos disponíveis.
#
# Em 27/02/2014:
# 1- no janelas funciona até aparecer os métodos e atributos disponíveis.
# 2- no Ubuntu indica erros básicos.
#*********************************************************************

#!/usr/bin/env python
#-*- coding:utf-8 -*-

import xmlrpc.client
#from xmlrpc.client import ServerProxy

s = xmlrpc.client.ServerProxy('http://localhost:15000')
#s = ServerProxy('http://127.0.0.1', allow_none = True) # pode ser "127.0.0.1" ou 'localhost'

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.

print(s.system.listMethods())
#*********************************************************************
.

Nenhum comentário:

Postar um comentário