Este projeto simula um sistema de concessionárias que recebem veículos de uma fábrica externa e os vendem para clientes. A comunicação com a fábrica é realizada via sockets, e o estoque da concessionária é gerenciado por um buffer circular, representando a esteira de veículos.
- Java Development Kit (JDK) 16 ou superior
Clone o repositório:
git clone https://github.com/allanrodigo/auto_service_stream.git
Compile o código:
javac *.java
Execute a simulação (assumindo que a fábrica está rodando em outro computador):
java Main
O sistema é composto por três componentes principais:
- Executa em outro computador e escuta conexões de sockets.
- Envia dados de veículos (tipo, cor, IDs) em formato JSON para as concessionárias.
- Implementadas como classes
Dealership
que herdam de uma classe base abstrata. - Cada concessionária possui:
- Um nome (
name
). - Um
Client
para conectar com a fábrica. - Um
Buffer
(circular) para armazenar veículos. - Métodos
add_vehicle()
para receber veículos da fábrica esell_vehicle()
para vender aos clientes.
- Um nome (
- Implementados como threads (
Customer
). - Cada cliente:
- Tenta comprar um veículo aleatoriamente de uma das concessionárias.
- Se a concessionária não tiver veículos, o cliente entra em espera.
Client
: Estabelece a conexão com a fábrica via socket e recebe os dados dos veículos.Dealership
: Classe base abstrata para as concessionárias. Gerencia o estoque de veículos e a comunicação com a fábrica.MercedesDealership
,PorscheDealership
,BmwDealership
: Classes concretas que implementam as concessionárias de cada marca.Customer
: Representa um cliente que tenta comprar um veículo.Buffer
: Implementa um buffer circular para armazenar os veículos na esteira.Vehicle
: Representa um veículo com seus atributos (tipo, cor, IDs).Main
: Inicializa a simulação e cria as concessionárias e os clientes.
A classe Main
cria as concessionárias e os clientes. Cada concessionária inicia uma thread que se conecta à fábrica e recebe veículos continuamente, adicionando-os ao seu buffer. Cada cliente inicia uma thread que tenta comprar um veículo aleatoriamente de uma concessionária. Se a concessionária tiver veículos disponíveis, o cliente compra um e a concessionária remove o veículo do buffer. Se a concessionária não tiver veículos, o cliente entra em espera até que um veículo esteja disponível.
O sistema registra eventos importantes, como a chegada de veículos nas concessionárias e a venda de veículos aos clientes, em um arquivo de log (dealership_logs.txt
).
Este projeto demonstra a aplicação de conceitos de programação concorrente em Java, como threads, semáforos e sockets. A simulação assume que a fábrica está rodando em outro computador e enviando dados de veículos via socket. O projeto pode ser expandido para incluir mais funcionalidades, como diferentes tipos de veículos, estatísticas da simulação e interface gráfica.