Newer
Older
democall3 / src / server / RequestThread.java
package server;

import gui.processors.LabelProcessor;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.ObjectOutputStream;
import java.net.Socket;
import java.util.logging.Level;
import java.util.logging.Logger;

/**
 *
 * @author geoma48p
 */
public class RequestThread extends Thread {

   private final LabelProcessor processor;
   private final Socket socket;

   public RequestThread(LabelProcessor processor, Socket socket) {
      this.setDaemon(true);
      this.processor = processor;
      this.socket = socket;
   }

   @Override
   public void run() {
      try {
         BufferedReader reader = new BufferedReader(new InputStreamReader(socket.getInputStream()));
         String message = reader.readLine();
         processMessage(message);
         socket.close();
      } catch (IOException ex) {
         Logger.getLogger(RequestThread.class.getName()).log(Level.SEVERE, null, ex);
      }
   }

   public void processMessage(String message) {
      String[] messageBits = message.split(" ");

      String performative = messageBits[0];
      int machineId = Integer.parseInt(messageBits[1]);

      if (performative.equals("request")) {
         processor.request(machineId);
      } else if (performative.equals("cancel")) {
         processor.cancel(machineId);
      } else if (performative.equals("queue")) {
         try {
            ObjectOutputStream oos = new ObjectOutputStream(socket.getOutputStream());
            oos.writeObject(processor.getQueue());
            oos.close();
         } catch (IOException ex) {
            Logger.getLogger(RequestThread.class.getName()).log(Level.SEVERE, null, ex);
         } 
      } else {
         Logger.getLogger(RequestThread.class.getName()).log(Level.SEVERE, "Unknown performative: {0}", performative);
      }

   }
}