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
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