Escolar Documentos
Profissional Documentos
Cultura Documentos
Pré-requisitos
IDE Qt Creator 5.6.0 for Windows 32 bits (MinGW 4.9.2), que pode ser baixado através do
link: http://download.qt.io/official_releases/qt/5.6/5.6.0/qt-opensource-windows-x86-mingw492-
5.6.0.exe.
Configuração
A IDE Qt Creator será utilizada como ambiente de desenvolvimento para a linguagem C++. A versão
supracitada já possui o compilador MinGW (versão minimalista do GCC para Windows) integrada.
Já a biblioteca Boost será utilizada com o intuito de abstrair a utilização de métodos e funções que
utilizam a API do sistema operacional (por exemplo, sockets de conexão, threads, seções críticas,
etc.).
Para a instalação e configuração da IDE Qt Creator, o candidato poderá se basear na documentação
online da ferramenta no site: http://www.qt.io/ide/.
Para a configuração e integração da biblioteca Boost à IDE Qt Creator, o candidato poderá se basear
na documentação online da biblioteca no site: http://www.boost.org/.
Ademais, qualquer fórum de internet pode ser utilizado como referência de ajuda para a realização
das configurações.
Projeto
Abaixo seguem as especificações que o candidato deverá considerar para o desenvolvimento dos
aplicativos servidor e cliente. Ao ser mencionada a criação de classes, entenda que será necessário
instanciá-las como objetos em tempo de execução. Ademais, o formato das mensagens utilizadas
para comunicação entre os clientes que estarão conectados ao servidor, ficará a critério do
candidato.
Aplicativo Cliente:
Para a realização de conexão junto ao aplicativo servidor, o aplicativo cliente deverá criar uma classe
que represente a conexão. Esta classe será responsável por alocar e desalocar um socket nos
eventos de conexão e desconexão, respectivamente, bem como escutar as respostas vindas do
servidor em um novo fluxo paralelo. Sempre que houver um evento de conexão e desconexão, o
cliente deverá emitir um aviso ao usuário do aplicativo cliente, utilizando a classe de conexão, que
poderá ser desenvolvida a critério do candidato. Antes de enviar uma mensagem, o cliente deve se
certificar de que o socket esteja realmente conectado e caso contrário emitir um alerta ao usuário do
aplicativo.
Aplicativo Servidor:
Para o gerenciamento de conexões vindas dos aplicativos clientes, o aplicativo servidor deverá criar
uma classe para representar o gerenciamento de conexões. Para isso a referida classe deverá
escutar novas requisições de conexão vinda dos clientes em um novo fluxo paralelo.
Uma vez que uma requisição de conexão seja recebida e seu nickname seja autenticado, uma nova
task de socket deverá ser criada, alocada dinamicamente em memória e armazenada na classe de
gerenciamento de conexões através do uso de dicionário de dados onde o identificador da conexão
será o nickname enviado pelo cliente. Além disso, a classe gerenciadora de conexões deverá
notificar as demais tasks acerca da nova task criada e autenticada.
A comunicação entre cada task de socket e o gerenciador de conexões deverá acontecer sob o
modelo Publish/Subscribe, no qual cada task irá ler a mensagem chegada ao socket e inserí-la em
uma fila única protegida (Publish). O serviço do gerenciador de conexões, por sua vez, deverá
consumir as mensagens postadas na fila e despachar aos respectivos destinos (Subscribe).
Por fim deverá ser criada uma classe responsável por gravar em disco as informações de conexão,
desconexão e envios de mensagens ocorridos no servidor. Esta classe, doravante chamada de
classe de log, deverá possuir uma fila de acesso protegido e rodar em mais um novo fluxo paralelo
que ficará responsável por consumir as mensagens da fila e persisti-las em disco. Portanto, sempre
que um evento de conexão, desconexão e envios de mensagens ocorrer no servidor, a classe de log
deverá ser acionada.
Lembre-se que uma fila de acesso protegido não pode ser acessada (seja para produção ou
consumação) por mais de um recurso simultaneamente. Portanto um mecanismo de exclusão mútua
deverá ser utilizado.