rendered paste bodypackage dje.act.res;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.LinkedList;
import java.util.Queue;
import java.util.SortedSet;
import java.util.TreeSet;
public class ActiveResourceManager extends Thread {
SortedSet<Integer> items=new TreeSet<Integer>();
ServerSocket serverSocket;
int avail;
static class CommHandle{
Socket sock; PrintWriter pw;
public CommHandle(Socket sock, PrintWriter pw){
this.sock=sock; this.pw=pw;
}
}
Queue<CommHandle> pending=new LinkedList<CommHandle>();{
try{
for(int i=0;i<10;i++){
items.add(i);
}
avail=items.size();
serverSocket=new ServerSocket(4711);
}
catch(IOException ie){
ie.printStackTrace();
}
}
public void run(){
try{
while(true){
Socket sock=serverSocket.accept();
PrintWriter pw=new PrintWriter(sock.getOutputStream());
InputStreamReader stream=new InputStreamReader(sock.getInputStream());
BufferedReader reader=new BufferedReader(stream);
String msg=reader.readLine();
String[] msgParts=msg.split("\\s");
if(msgParts[0].equals("Acquire")){
if(avail>0){
avail--;
Integer item=items.first();
pw.println(item);
pw.flush();
reader.close();pw.close();sock.close();
}
else{
pending.add(new CommHandle(sock,pw));
reader.close();
}
}
if(msgParts[0].equals("Release")){
int unitId=Integer.parseInt(msgParts[1]);
if(pending.size()==0){
avail=avail+1;
items.add(unitId);
}
else{
CommHandle client=pending.remove();
client.pw.println(unitId);
client.pw.close();
client.sock.close();
}
}
}
}
catch(Exception e){
e.printStackTrace();
}
}
}