Projeto FaceDegasBook, mantenha contato com os seus amigos!
Um pequeno sistema de relacionamento. Permite que usuários se cadastrem, incluam amigos, atualizem seus dados (apenas a password, para facilitar), etc.
O que já está pronto.
Voces podem baixar a implementação stand alone do servidor aqui. Alí há uma classe que servirá de fachada. Esta classe responde pelas funções do sistema.
Todas as solicitações que os usuários enviam, através de seus sistemas-cliente, serão respondidas por este pequeno servidor.
Basicamente aqui se implementou as seguintes operações:
Start System: inicia o sistema, disponibilizando remotamente o serviço com os dados dos usuários e seus respectivos amigos.
Create User: recebe o nome e a password de um usuário , e cria seu registro no sistema. Será criado um arquivo .txt com o nome do usuário, bem como uma entrada com seu nome no catálogo de usuários (users.cad) do sistema. No arquivo de usuários estão listados todos os usuários do sistema. No arquivo .txt são listados os amigos do respectivo usuário.
New Friend: estabelece uma relação mútua de amizade entre dois usuários. Isso significa que, se A está na lista de amigos de B, então B também precisa estar na lista de amigos de A. Estas informações devem estar em disco, nos arquivos A.txt e B.txt.
Find Friend: busca, entre os amigos de um usuário, um registro específico e o devolve.
Remove Friend: remove uma relação de amizade entre dois usuários. Esta relação precisa ser removida mutuamente: A não estará mais na lista de B e B também não constará na lista de A. Estas informações estão refletidas nos arquivos A.txt e B.txt.
Remove User: exclui um usuário do sistema, bem como de todas as listas de amizades que ele esteja. O arquivo .txt correspondente é removido, e sua entrada é retirada do arquivo de cadastro de usuários.
Initialize System: Reinicia o sistema. Todos os dados são perdidos, e os arquivos em disco são apagados.
O que vocês farão.
O sistema deve ser capaz de executar várias operações ao mesmo tempo, já que haverão milhões de usuários no mundo todo. Isso será resolvido com o uso de Threads. Cada solicitação a ser atendida inicia um thread. É necessário garantir zonas de acesso exclusivo, para que as alterações não gerem inconsistências dos dados. Pensem no caso de A e B estarem se tornando amigos de C ao mesmo tempo. O que pode dar errado? Como resolver?
Para isso voces terão que modificar o código do servidor. Por este motivo, ele vai totalmente acompanhado de testes de unidade.
O sistema também deve ser acessado remotamente. A idéia é que seja possível se implementar programas diferentes, em plataformas diferentes. O sistema funcionará, desde que se comuniquem corretamente com a fachada, solicitando a execução de operações. Voces deverão implementar um software-cliente, bem como modificar o código do servidor, para que estas operações fiquem remotamente disponíveis em rede.
Já dá para ir começando...