Пример #1
0
def connect(endereco_local, endereco_remoto):
  ''' 
  O usuario deseja se conectar ao endereco_remoto a partir do seu 
  endereco local fornecido em endereco_local. Sera enviado um 
  pacote de requisicao de conexao.
  Retorna o id da conexao estabelecida ou um erro
  '''
  _log.logar('Iniciando tentativa de conexao entre ' + endereco_local + ' com ' + endereco_remoto)
  
  for i in range(_NUMERO_MAX_CONEXOES):
    con = _pool_conexoes.obterConexao(i)
    if(con.obterEstado() == EstadosConexao.PARADO):
      con.setEstado(EstadosConexao.ESPERANDO)
      con.setEnderecoLocal(endereco_local)
      con.setEnderecoRemoto(endereco_remoto)
      con.setTimer(0)
      con.setCreditos(0)
      con.setReqLiberarRecebida(False)
      con_id = con.obterId()
      str_con = str(con)
      _pool_conexoes.liberarConexao(con)
      
      chave = endereco_local + endereco_remoto
  
      camada_rede.esperar_dados_no_endereco(endereco_local)
      _log.logar('Esperando pela aceitacao ou recusa do pedido de conexao: ' + str_con)
      _aguardar_por_evento(chave, _conectsEmEspera, ' adcionando evento para esperar aceitacao da conexao ',
                          camada_rede.enviar_requisicao_con, [con_id , endereco_local, endereco_remoto])
        
      con = _pool_conexoes.obterConexao(i)
      _log.logar('Aceitacao ou recusa do pedido de conexao chegou, estado da conexao: ' + str(con))
      
      if(con.obterEstado() == EstadosConexao.ESTABELECIDA):
        _pool_conexoes.liberarConexao(con)
        _log.logar('Conexao estabelecida: ' + str(con))
        return con.obterId()
      
      if(con.obterReqLiberarRecebida()):
        con.setEstado(EstadosConexao.PARADO)
        camada_rede.enviar_confirmacao_clear(con.obterId(), endereco_local, endereco_remoto)
        _pool_conexoes.liberarConexao(con)
        _log.logar('Conexao rejeitada')
        return ErrosTransporte.CONEXAO_REJEITADA
      
      _log.logar('Ops o codigo nao devia chegar aqui, soh Deus sabe o que aconteceu !!')
      _log.logar('Debug Info da Conexao: ' + str(con))
      _pool_conexoes.liberarConexao(con)
      
    else:
      _pool_conexoes.liberarConexao(con)
      
  _log.logar('Tabela de conexoes esta cheia, impossivel realizar connect')
  return ErrosTransporte.TABELA_CHEIA                                             
Пример #2
0
def disconnect(con_id):
  '''
  Encerra a conexao
  '''
  con = _pool_conexoes.obterConexao(con_id)
  
  if(con.obterReqLiberarRecebida()):
    _log.logar('Usuario remoto ja desconectou')
    con.setEstado(EstadosConexao.PARADO)
    _log.logar('Conexao desconectada: ' + str(con))
    camada_rede.enviar_confirmacao_clear(con_id, con.obterEnderecoLocal(), con.obterEnderecoRemoto())
    _pool_conexoes.liberarConexao(con)
    return ErrosTransporte.OK

  con.setEstado(EstadosConexao.DESCONECTANDO)
  _log.logar('Desconectando conexao: ' + str(con))
  camada_rede.enviar_requisicao_clear(con_id, con.obterEnderecoLocal(), con.obterEnderecoRemoto())
  _pool_conexoes.liberarConexao(con)
  return ErrosTransporte.OK