Giter Site home page Giter Site logo

projetosd2022's Introduction

ProjetoSD2022

Repositório para o projeto de desenvolvimento de aplicação distribuída, para a matéria de sistemas distribuídos, 2022/2.

Tema:

Um jogo da memória multijogador - local. Com jogadores conectados em uma mesma rede local, e um servidor, que armazena os dados da partida, e envia as informações para os clientes, que são as telas do jogo. Podendo haver diversos jogadores conectados ao mesmo tempo, e cada um com sua própria tela de jogo. Usando o RabbitMQ como serviço de mensagens, para a comunicação entre o servidor e os clientes.

Diagrama de Arquitetura de Sistema:

alt text
O programa vai consistir de um servidor, onde ficam armazenados os dados de partida, com as cartas, jogadores conectados e suas respectivas pontuações, e diversos clientes, onde será mostrado a tela do jogo para o usuário, e onde ele irá interagir com o jogo.

alt text
A comunicação entre o servidor e os clientes será feita através de uma serviço de mensagem, contendo duas filas de mensagens, uma para o servidor enviar mensagens para os clientes, e outra para os clientes enviarem mensagens para o servidor.

  1. Usuario utiliza uma fila de mensagens para enviar uma mensagem para o servidor, atravez de uma publicação simples.
  2. Uma fila de mensagens para o servidor receber mensagens dos clientes, atravez de uma publicação simples.
  3. A mensagem consiste no formato json, com a ação que sera realizada, e os dados necessários para a ação.
  4. O servidor recebe a mensagem, e realiza a ação, e envia uma mensagem para o cliente, atravez de uma publicação simples.
  5. Uma fila de mensagens pra o servidor enviar mensagens para os clientes, que se inscrevem nela atravez de um bind.
  6. A mensagem consiste no formato json, com a ação que sera realizada, e os dados necessários para a ação.

Interface de Serviço:

Servidor

alt text O servidor escuta as reuisições dos clientes atraves de uma fila de mensagens, então executa uma função com o corpo da mensagem recebida, esta função verifica o tipo de ação a ser executada e executa a funcao de acordo com a requisição. Caso a reuisição nao seja reconhecido mostra uma mensagem de aviso.

alt text De acordo com a ação requisitada o servidor as realiza e retorna uma mensagem para tdos os clientes informando a ação realizada e atualizando os dados do jogo e dos clientes.

Cliente

alt text O cliente está inscrito na fila de comunicacação do servidor. Assim como o sevidor, ele recebe amensagem e executa uma função com o corpo da mensagem, e de acordo com a atualização ele executa sua função correspondente.

alt text Após o usuario realizar uma ação dentro do jogo, esta informação é encapsulada em uma mensagem e enviada para o servidor, que controla o jogo, poder gerenciar as ações e atualizar todos os cliente.

Diagrama de Telas:

alt text

Tecnologias:

Para desenvolver essa aplicação usamos a linguagem python, com a biblioteca gráfica Tkinter. Com isso, conseguimos criar uma aplicação distribuída, com um servidor e vários clientes, que se comunicam através de uma fila de mensagens, criada com o RabbitMQ.

  • Python 3.10 - Linguagem de Programação: Para desenvolvimento da aplicação, tanto do servidor, quanto do cliente.
  • Tkinter - Biblioteca gráfica do Python: Para desenvolvimento da interface gráfica.
  • RabbitMQ - Serviço de Mensagem: Para criar um canal de comunicação com duas filas entre o servidor e os clientes.

Alunos:

João Vitor Zavatin - Ra: 1923242
Vinicius Vieira - Ra: 2046474

Inicialmente o projeto foi desenvolvido em dupla, mas, por motivos de desistência, o projeto foi finalizado por apenas um aluno, Vinicius Vieira.

Executar o projeto:

Pré-requisitos:

  • Python 3.10
  • RabbitMQ

Servidor:

Para iniciar o servidor, basta executar o arquivo server.py através do diretorio raíz do projeto python3 src/servidor/servidor.py.

Cliente:

Para iniciar o cliente, basta executar o arquivo client.py através do diretorio raíz do projeto python3 src/cliente/cliente.py.

Professor:

Prof. Rodrigo Campiolo

projetosd2022's People

Contributors

vanakaus avatar jvzavatin avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.