client: contém uma aplicação que utiliza a API de broadcast construída nesse trabalho
lib: contém o algoritmo para o Majority-Ack Reliable Broadcast
utils: contém funções auxiliares que são comuns ao cliente e a biblioteca de comunicação
Certifique de que há algum gerenciador de pacote node instalado na sua máquina como o npm, e rode o seguinte comando para instalar as dependências:
npm install
A comunicação é feita em um grupo fixo, que é descrito no arquivo src/client/index.ts iniciando na linha 6. Para que as instâncias de clientes se comuniquem corretamente é necessário alterar o trecho de código citado anteriormente, adicionando ou removendo novos integrantes ao grupo. Por padrão a aplicação utilizará o localhost e as porta de 3000 a 3003. Para rodar uma instância do projeto utilize o comando:
npm run start [porta]
Nesse ambiente, após inicializar os 4 clientes (nas portas 3000 até 3003), é só digitar as mensagens no terminal. Mensagens recebidas no grupo possuem o formato: [ip:porta do nó que enviou a mensagem originalmente]: . Uma vez que o grupo é composto de 4 nós, ao fechar 2 clientes mais nenhuma mensagem deve ser entregue ao grupo.
Cria e configura um servidor TCP na porta informada para a comunicação com o grupo.
Host tem o formato { address: string, port: number }
Envia mensagem broadcast ao grupo.
Configura uma função de callback que é executada sempre que uma mensagem é entregue no grupo.
Message possui o formato { id: string, data: string, sender: Host }
Encerra o recebimento de novas conexões e fecha o servidor ao finalizar as conexões ativas.