Beispiel #1
0
    def desconectar_jogador(self, nome_canal, nome_jogador):
        if nome_canal not in self.canais_de_comunicacao:
            print(f"CANAL DESCONHECIDO IGNORADO {nome_canal}")
            return

        for (n, c) in self.canais_de_comunicacao[nome_canal]:
            if n == nome_jogador:
                self.canais_de_comunicacao[nome_canal].remove((n, c))
                break

        mensagem_de_conexao = Mensagem(
            tipo="desistencia",
            conteudo=f"\n** {nome_jogador} saiu do jogo **",
            remetente=nome_jogador,
        )
        self.publicar(
            nome_canal,
            "SERVER",
            mensagem_de_conexao.converter_msg_em_dict_para_enviar(),
        )

        if len(self.canais_de_comunicacao[nome_canal]) < 1:
            del self.canais_de_comunicacao[nome_canal]
            print(f"Canal {nome_canal} removido")

        self.nomes_jogadores_conectados.remove(nome_jogador)
        print(f"O jogador {nome_jogador} deixou o canal {nome_canal}")
Beispiel #2
0
    def registrar(self, nome_canal, nome_jogador, objeto_jogador):
        if not nome_canal or not nome_jogador:
            raise ValueError("Nome de canal/jogador inválido!!!")

        if nome_jogador in self.nomes_jogadores_conectados:
            raise ValueError("Esse nome de jogador já está sendo usado!!!")

        if nome_canal not in self.canais_de_comunicacao:
            print(f"Criando novo canal {nome_canal}")
            self.canais_de_comunicacao[nome_canal] = []

        sou_o_primeiro_jogador = False
        if not self.nomes_jogadores_conectados:
            sou_o_primeiro_jogador = True

        self.canais_de_comunicacao[nome_canal].append((nome_jogador, objeto_jogador))
        self.nomes_jogadores_conectados.append(nome_jogador)
        print(f"Jogador {nome_jogador} se conectou no canal {nome_canal}")

        mensagem_de_conexao = Mensagem(
            tipo="conexao_estabelecida",
            conteudo=sou_o_primeiro_jogador,
            remetente="servidor",
        )
        self.publicar(
            nome_canal,
            "SERVER",
            mensagem_de_conexao.converter_msg_em_dict_para_enviar(),
        )

        return [
            nome_jogador for (nome_jogador, c) in self.canais_de_comunicacao[nome_canal]
        ]