segunda-feira, 17 de março de 2014

Andamento RPC.

Evoluindo bem o RPC.

Figura 1: execução 1 do RPC.

 #********************************************************************
# Autor:        ubiratã uaatsim itza I.
# Data:         25/02/2014
# Hora:         10:30:06
#*********************************************************************
# Arquivo:      servidorRCP.py
#
# Descrição:    O arquivo servidorRPC.py executou bem apareceu
#               os métodos porém, não realiza nunhuma operação sem dar
#               erro.
#
# Uso:          from servidorRPC import ServidorRPC
#               s = ServidorRPC
#               s.      --> aparecem os métodos e atributos disponíveis.
#
#
#               Pode ser "127.0.0.1" ou 'localhost' ou 'xxx.xxx.xx.xxx'
#
#*********************************************************************

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

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

from pessoa import Pessoa
from experimento import Experimento
from temperatura import Temperatura
from luminosidade import Luminosidade
from data import Data
from hora import Hora
from maquina import Maquina

class RequestHandler(SimpleXMLRPCRequestHandler):
    rpc_paths = ()

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

servilo = SimpleXMLRPCServer(("localhost", 15000), allow_none = True, requestHandler=RequestHandler)
servilo.register_introspection_functions()

class ServidorRPC():
      
        def __init__(self):
            self.nome = 'RPC'

        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.')
            return nome_terminal
        servilo.register_function(acesso, 'acesso')
      
        def versao():
            """Exibe a versão do RPC.
            """
            print('RPC Versão 9.')
        servilo.register_function(versao, 'versao')
          
        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')

        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 passo1():
            '''Usando a classe Pessoa.
            '''
            if v_conectado[0] == v_acesso['administrador']:
                print('Acessando o cadastrada do grupo.')
                Pessoa.cadastro_informacoes()
                Pessoa.cadastro_senhausuario()
                return('Grupo acadastrado com sucesso!')
               # except:
               #     return('Erro de grupo')
            else:
                print('Acesso negado! Grupo protegido.')
        servilo.register_function(passo1, 'passo1')

        def passo2():
           '''Usando a classe  experimento.
           '''
           if v_conectado[0] == v_acesso['administrador']:
               try:
                   print('Acessando o experimento.')
                   Experimento.cadastro_experimento()
                   return('Experimento cadastrado com sucesso!')
               except:
                   return('Erro experimento.')
           else:
                return('Acesso negado! Experimento protegido.')
        servilo.register_function(passo2, 'passo2')
      
        def passo3():
            '''Usando a classe data.
            '''
            if v_conectado[0] == v_acesso['administrador']:
               try:
                   print('Acessando a data.')
                   datainicio = input('Entre com a data inicial : ')
                   Data.define_datainicio(datainicio)
                   datafinal = input('Entre com a data final: ')
                   Data.define_datafinal(datafinal)
                   return('Datado com sucesso!')
               except:
                   return('Erro data.')
            else:
                return('Acesso negado! Data protegido.')
        servilo.register_function(passo3, 'passo3')

        def passo4():
            '''Usando a classe temperatura.
            '''
            if v_conectado[0] == v_acesso['administrador']:
               try:
                    print('Acessando a temperatura.')
                    horasx = int(input('Entre quantidade de horas/dia T: '))
                    Temperatura.quantidade_horasdiaT(horasx)
                    Temperatura.define_temperaturaprogramada()
                    return('Quantidade de temperaturas definidas.')
               except:
                   return('Erro temperatura.')
            else:
               return ('Acesso negado! Temperatura protegido.')
        servilo.register_function(passo4, 'passo4')

        def passo5():
            '''Usando a classe luminosidade.
            '''
            if v_conectado[0] == v_acesso['administrador']:
               try:
                   print('Acessando a luminosidade.')
                   horasy = int(input('Entre quantidade de horas/dia L: '))
                   Luminosidade.quantidade_horasdiaL(horasy)
                   Luminosidade.define_luminosidadeprogramada()
                   return('Quantidade de luminosidades definidas.')
               except:
                   return ('Erro luminosidade.')
            else:
                return('Acesso negado! Luminosidade protegido.')
        servilo.register_function(passo5, 'passo5')

        def passo6():
            '''Usando a classe máquina.
            '''
            if v_conectado[0] == v_acesso['administrador']:
               print('Acessando a máquina.')
           #    Maquina.verifica_temperatura()
           #    Maquina.verifica_luminosidade()
           #    Maquina.verifica_horario()
           #    Maquina.verifica_data()
               return('Máquina executando.')
            else:
                return('Acesso negado! Máquina protegido.')
        servilo.register_function(passo6, 'passo6')

servilo.register_instance(ServidorRPC())


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!')
#************************************************************************

Figura 2: execução 2 do RPC
#********************************************************************
# Autor:        ubiratã uaatsim itza I.
# Data:         07/03/2014
# Hora:         17:45:06
#*********************************************************************
# Arquivo:      clienteRCP.py
#
# Descrição:    O arquivo clienteRCP.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.
#
# ('http://xxx.xxx.xx.xxx': 15000) ou ("http://127.0.0.1": 15000) ou ('http://localhost':15000)
#
#*********************************************************************

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

import xmlrpc.client

s = xmlrpc.client.ServerProxy('http://localhost:15000')

print(s.acesso(66))            # conecta-se ao sistema como usuário administrador.
s.versao()              # verifica a versão do sistema.

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

print(s.acesso(66))            # conecta-se ao sistema como usuário administrador.

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

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

print(s.system.listMethods())

s.acesso(66)
print(s.passo1())
s.versao()
print(s.passo2())
print(s.passo3())
print(s.acesso(77))
print(s.mostra())
s.acesso(66)
print(s.passo4())
s.acesso(66)
print(s.passo5())
s.acesso(66)
print(s.passo6())

print('Final de sequência')


Desenvolvidos algumas classes para solucionar o problema.
Figura 3: arquivamento das classes.
O RPC acessa com precisão as classes e executa bem as suas funções como vemos nas figuras 1 e 2.
.