package core.musicplayer;
import java.io.IOException;
import java.io.InputStream;
import java.util.HashMap;
import java.util.Map;
final class Wrappler extends InputStream
{
private static boolean currentRunning;
private int currentMark;
private int currentReadPointer;
private int currentWrapplingPointer;
private String currentStreamIdentificer;
private Thread currentLockedThread;
private Thread currentWrappingThread;
private InputStream currentInputStream;
private static Map<String, String[]> bufferMap;
static
{
bufferMap = new HashMap<String, String[]>();
}
public Wrappler(InputStream stream, String identificer, long streamSize, int threadPriority)
{
super();
if(threadPriority < Thread.MIN_PRIORITY ^ threadPriority > Thread.MAX_PRIORITY)
new IllegalArgumentException("Thread Priority is out of range").printStackTrace();
if(currentRunning);//TODO
if(bufferMap.get(identificer) == null)
{
bufferMap.put(identificer, new String[(int) streamSize]);
currentWrapplingPointer = 0;
currentReadPointer = 0;
currentMark = -1;
currentInputStream = stream;
currentStreamIdentificer = identificer;
currentWrappingThread = new Thread(new WrapplerThread());
currentWrappingThread.setPriority(threadPriority);
currentWrappingThread.start();
}
}
public int read() throws IOException
{
String[] wrappledBytes = bufferMap.get(currentStreamIdentificer);
while(wrappledBytes[currentReadPointer] == null)
Thread.yield();
int ret = Integer.parseInt(wrappledBytes[currentReadPointer]);
currentReadPointer++;
return(ret);
}
public void mark(int i)
{
currentMark = currentReadPointer;
}
public void reset()
{
currentReadPointer = currentMark;
}
public void lockThreadUntilCurrentStreamIsReading(Thread t)
{
try
{
currentLockedThread = t;
t.join();
}
catch(InterruptedException e)
{
e.printStackTrace();
}
}
private class WrapplerThread extends Thread
{
public void run()
{
String[] bufferArray = bufferMap.get(currentStreamIdentificer);
try
{
int read = 0;
while((read = currentInputStream.read()) != -1)
{
bufferArray[currentWrapplingPointer] = String.valueOf(read);
currentWrapplingPointer++;
System.out.println(read);
}
if(currentLockedThread != null)
{
currentLockedThread.interrupt();
currentLockedThread = null;
}
System.out.println(read);
}
catch (IOException e)
{
e.printStackTrace();
}
}
}
}