Parallel Programming WS 2014/2015 - File LicenseServer.java
public class LicenseServer extends Thread {
private Channel reqservChan;
private Channel relservChan;
public static final int N = 4;
public static final int REQUEST = 1;
public static final int RELEASE = 2;
private int avail = N; // number of available licenses
private Queue pending;
private boolean running = true;
public LicenseServer(Channel reqc, Channel relc) {
reqservChan = reqc;
relservChan = relc;
pending = new Queue();
}
public void stopIt() {
running = false;
}
public void run() {
System.out.println("Server started");
Message msg;
while (running || !pending.empty() || avail < N) {
if (!reqservChan.empty()) {
msg = (Message) reqservChan.receive();
System.out.printf("REQ from %s (%d licenses available)\n",
msg.getId(), avail);
if (avail > 0) {
avail--;
// send request reply on client channel:
msg.getChan().send(null);
} else {
pending.enqueue(msg);
System.out.printf("REQ from %s put in queue\n",
msg.getId());
}
}
if (!relservChan.empty()) {
msg = (Message) relservChan.receive();
System.out.printf("REL from %s\n",
msg.getId());
// send release reply on client channel:
msg.getChan().send(null);
if (pending.empty()) {
avail++;
} else {
msg = (Message) pending.front();
pending.dequeue();
System.out.printf("REQ from %s taken from queue\n",
msg.getId());
// send request reply on client channel:
msg.getChan().send(null);
}
}
}
System.out.printf("Server terminates\n");
}
}
Generiert mit Camelot | Probleme mit Camelot? | Geändert am: 26.01.2015


