def enviar_mensagem_para_o_servidor(self): while True: mensagem_para_enviar = "" try: mensagem_para_enviar = input(f"{self.nome} > ") except KeyboardInterrupt: self.encerrar_conexao_servidor() if mensagem_para_enviar: if mensagem_para_enviar in ["sair do jogo", "desconectar"]: mensagem_desistencia = Mensagem( tipo="desistencia", conteudo="Você ganhou a partida", remetente=self.nome, ) mensagem_em_bytes = (mensagem_desistencia. converter_msg_em_bytes_para_enviar()) self.conexao.send(mensagem_em_bytes) self.encerrar_conexao_servidor() break else: mensagem = Mensagem(tipo="chat", conteudo=mensagem_para_enviar, remetente=self.nome) mensagem_em_bytes = mensagem.converter_msg_em_bytes_para_enviar( ) self.conexao.send(mensagem_em_bytes)
def iniciar_conexao_com_servidor(self): self.conexao = socket.socket(socket.AF_INET, socket.SOCK_STREAM) self.conexao.connect((self.endereco_ip, self.porta)) self.conexao.setblocking(False) mensagem_inicial = Mensagem(tipo="chat", conteudo=self.nome, remetente=self.nome) mensagem_em_bytes = mensagem_inicial.converter_msg_em_bytes_para_enviar( ) self.conexao.send(mensagem_em_bytes)
def escutar_conexoes(self): while True: try: sockets_leitura, _, sockets_excecoes = select( self.lista_conexoes, [], self.lista_conexoes ) except KeyboardInterrupt: sys.exit("\nChat encerrado!") for conexao in sockets_leitura: if conexao == self.socket_servidor: novo_cliente, infos_conexao = self.socket_servidor.accept() mensagem = self.receber_mensagem_cliente(novo_cliente) if mensagem is None: continue quantidade_conexoes = len(self.lista_conexoes) self.lista_conexoes.append(novo_cliente) self.clientes_conectados[novo_cliente] = novo_cliente print( "Nova conexão aceita {}:{}, username: {}".format( *infos_conexao, mensagem.get("remetente") ) ) conteudo_msg = "" if ( not self.primeiro_jogador_se_conectou and quantidade_conexoes == 1 ): conteudo_msg = "Sim" self.primeiro_jogador_se_conectou = True print("o primeiro jogador conectou!") mensagem_nova_conexao = Mensagem( tipo="conexao_estabelecida", conteudo=conteudo_msg, remetente="servidor", ) mensagem_nova_conexao = ( mensagem_nova_conexao.converter_msg_em_bytes_para_enviar() ) novo_cliente.send(mensagem_nova_conexao) print("mensagem enviada para a nova conexão") else: mensagem_recebida = self.receber_mensagem_cliente(conexao) if mensagem_recebida is None: print("Fechando conexão de {}".format(conexao)) self.remover_conexao(conexao) continue print( "Recebendo mensagem de {}: {}".format( mensagem_recebida.get("remetente"), mensagem_recebida.get("conteudo"), ) ) for cliente in self.clientes_conectados: if cliente != conexao: cliente.send( json.dumps(mensagem_recebida).encode(CODIFICACAO) ) for conexao in sockets_excecoes: self.remover_conexao(conexao)