All pastes #2053528 Raw Edit

Miscellany

public text v1 · immutable
#2053528 ·published 2011-05-03 17:20 UTC
rendered paste body
package 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(47116);
		}
		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();
				System.out.println("Msg:"+msg);
				String[] msgParts=msg.split("\\s");
				if(msgParts[0].equals("Acquire")){
					System.out.println("Hier ist ein Acquire angekommen!");
					if(avail>0){
						System.out.println("Drrrrrrrrin!");
						avail--;
						Integer item=items.first();
						pw.println("Item: "+item+"\n");	
						pw.flush();
						pw.close();
						reader.close();pw.close();sock.close();
					}
					else{
						pending.add(new CommHandle(sock,pw));
						reader.close();
					}
				}
				
				if(msgParts[0].equals("Release")){
					System.out.println("Hier ist ein Release angekommen!");
					int unitId=Integer.parseInt(msgParts[1]);
					if(pending.size()==0){
						avail=avail+1;
						System.out.println(unitId);
						items.add(unitId);
					}
					else{
						CommHandle client=pending.remove();
						client.pw.println(unitId);
						client.pw.close();
						client.sock.close();
					}
				}
			}
		}
		catch(Exception e){
			e.printStackTrace();
		}
	}
}