コード例 #1
0
ファイル: Main.java プロジェクト: pedropaulovc/UFSC
  public static void main(String[] args) {

    int tempoSimulacao = -1;
    int numCelulares = 10;
    int numEstacoes = 5;
    Log.definirNivelDetalhes(0);
    NumCelular.definirMaxNum(numCelulares);

    List<EstacaoBase> estacoes = new ArrayList<EstacaoBase>(numEstacoes);
    List<Celular> celulares = new ArrayList<Celular>(numCelulares);

    for (int i = 1; i <= numEstacoes; i++) {
      EstacaoBase estacao = new EstacaoBase(i);
      estacao.start();
      estacoes.add(estacao);
    }

    for (int i = 0; i < numCelulares; i++)
      celulares.add(new Celular(new NumCelular(i + 1), estacoes.get(i % numEstacoes)));

    for (int i = 0; i < numCelulares; i++) celulares.get(i).start();
    if (tempoSimulacao > 0) {
      try {
        Thread.sleep(tempoSimulacao * 1000);
      } catch (InterruptedException e) {
        e.printStackTrace();
      }

      Log.adicionarLog("\nTempo de simulação: " + tempoSimulacao, 0);
      Log.exibirEstatísticas();

      System.exit(0);
    }
  }
コード例 #2
0
ファイル: TorreControle.java プロジェクト: pedropaulovc/UFSC
 public void run() {
   Mensagem[] msgs = new Mensagem[2]; // Uma mensagem para cada pista
   int avioesCadastrados = 0;
   while (true) {
     dormir();
     for (int i = 0; i < 2; i++) {
       msgs[i] = new Mensagem();
       msgs[i].definirCodigo(TIMEOUT);
       if (caixaPostal.caixaCheia(pid)) msgs[i] = caixaPostal.receive(pid);
       avioesCadastrados++;
       Log.adicionarLog(
           "Torre: recebeu mensagem "
               + i
               + " "
               + msgs[i].obterCodigo()
               + " de "
               + msgs[i].obterId(),
           2);
       switch (msgs[i].obterCodigo()) {
         case REQUISICAO_POUSO:
           requisitarPouso(msgs[i].obterId());
           break;
         case REQUISICAO_DECOLAGEM:
           requisitarDecolagem(msgs[i].obterId());
           break;
       }
     }
     if (avioesCadastrados >= numAvioes) {
       atualizarPistas();
       Log.adicionarLog("Torre: terminou de atualizar as pistas", 1);
     }
     Log.adicionarLog("Estatísticas: ", 0);
     Log.adicionarLog("Aviões para pousar: " + filaEsperaPouso.size(), 0);
     Log.adicionarLog("Aviões para decolar: " + filaEsperaDecolagem.size() + "\n", 0);
   }
 }
コード例 #3
0
ファイル: TorreControle.java プロジェクト: pedropaulovc/UFSC
  private void atualizarPistas() {
    int aviaoAutorizado;
    Mensagem msg = new Mensagem();
    msg.definirCodigo(OPERACAO_AUTORIZADA);

    for (int i = 0; i < 2; i++) {
      msg.definirPista(i);
      if (pistas[i].estaVazia()) {
        Log.adicionarLog("Pista " + i + " está vazia", 2);
        if (!filaEsperaPouso.isEmpty()) {
          pistas[i].tornarModoPouso();
          aviaoAutorizado = filaEsperaPouso.remove();
          caixaPostal.send(aviaoAutorizado, msg);
          Log.adicionarLog(
              "Torre autorizou para POUSO avião " + aviaoAutorizado + " na pista " + i, 0);
          Log.adicionarLog(
              "Pista " + i + " sendo usada para POUSO. Aeronave: " + aviaoAutorizado, 0);
        } else if (!filaEsperaDecolagem.isEmpty()) {
          pistas[i].tornarModoDecolagem();
          int j = 0;
          while (j < 3 && !filaEsperaDecolagem.isEmpty()) {
            aviaoAutorizado = filaEsperaDecolagem.remove();
            Log.adicionarLog(
                "Avião " + aviaoAutorizado + " foi adicionado na fila de decolagem", 1);
            pistas[i].adicionarAviao(aviaoAutorizado);
            j++;
          }
        }
      }

      if (pistas[i].estaModoDecolagem() && !pistas[i].estaVazia()) {
        aviaoAutorizado = pistas[i].desenfileirarAviao();
        Log.adicionarLog(
            "Torre autorizou para DECOLAGEM avião " + aviaoAutorizado + " na pista " + i, 0);
        Log.adicionarLog(
            "Pista "
                + i
                + " sendo usada para DECOLAGEM. Aeronaves: "
                + pistas[i].toString()
                + aviaoAutorizado,
            0);
        caixaPostal.send(aviaoAutorizado, msg);
      }
    }
  }
コード例 #4
0
ファイル: TorreControle.java プロジェクト: pedropaulovc/UFSC
 private void requisitarDecolagem(int idAviao) {
   Log.adicionarLog("Aeronave " + idAviao + " requisitou autorização para DECOLAGEM", 0);
   filaEsperaDecolagem.add(idAviao);
 }
コード例 #5
0
ファイル: TorreControle.java プロジェクト: pedropaulovc/UFSC
 private void requisitarPouso(int idAviao) {
   Log.adicionarLog("Aeronave " + idAviao + " requisitou autorização para POUSO", 0);
   filaEsperaPouso.add(idAviao);
 }