Um aeroporto tem 2 pistas para decolagem e pouso de
aeronave, e 10 portões de desembarque. Sabendo que somente uma aeronave pode
utilizar uma pista por vez do aeroporto em um determinado instante, utilize
um objeto servidor Java RMI para implementar uma torre de controle. Esta
torre deve utilizar o mecanismo semáforo do Java para controlar o acesso
concorrente às duas pistas do aeroporto. O objeto servidor Torre_de_Controle deverá possuir métodos para:
· Pouso(): Solicitar
autorização para pousar;
·
PousoUrgencia(): Solicitar pouso
com urgência (aeronave com problemas mecânicos ou com pouco combustível);
·
Portao(): perguntar o
número do portão no qual os passageiros devem desembarcar;
· Autorizacao(): solicitar autorização para
decolar;
As aeronaves serão implementadas como objetos clientes
Java RMI que irão pousar e decolar do aeroporto. Como várias aeronaves
irão solicitar permissão para uso de cada pista simultaneamente, é necessário
gerenciar uma fila de acesso às pistas. As aeronaves em voo terão sempre
prioridade sobre as aeronaves em solo, de modo a evitar o consumo
desnecessário de combustível. Outra fila deve ser criada caso, após o pouso,
seja informado à aeronave que não há portões de desembarque disponíveis. As
aeronaves que quiserem pousar e não estiverem com falta de combustível devem
usar boolean tryAcquire(long timeout, TimeUnit unit) no método Pouso(). Isso fará com
que a aeronave espere um timeout pela pista. Se não conseguir, esta aeronave
deve verificar seu combustível e, se estiver em falta, a aeronave deve
aumentar sua prioridade e usar acquire() no método PousoUrgencia(). Defina prioridade 0 para as aeronaves
que quiserem decolar, 5 para as que quiserem pousar e tiverem combustível de
sobra e prioridade 10 para as que tiverem combustível no limite para
pouso.
Imprima uma mensagem na tela sempre que uma aeronave se comunicar
com a torre de controle: pousar, atracar em um portão ou decolar.
.