All pastes #212615 Raw Edit

Miscellany

public text v1 · immutable
#212615 ·published 2006-10-20 23:24 UTC
rendered paste body
private void runAvaliable() throws IOException
	{
		boolean firstAvaliable = true;
		while (true)
		{
			int avaliable = waitForAvaliable(firstAvaliable);
			if (avaliable == -1)
			{
				return;
			}

			if (shutDown)
			{
				return;
			}

			avaliableTimeOut = socketTimeout;
			firstAvaliable = false;

			readFromStream(avaliable);
		}
	}


	private int waitForAvaliable(boolean firstAvaliable) throws IOException
	{
		long startWait = System.currentTimeMillis();
		while (true && !shutDown)	//todo: denna ser konstig ut
		{
			int avaliable = inputStream.available();
			if (avaliable > 0)
			{
				return avaliable;
			}

			if (System.currentTimeMillis() - startWait >= avaliableTimeOut * 1000)
			{
				if (firstAvaliable)
				{
					setAvailableFailed(true);
					return -1;
				}
				else
				{
					throw new IOException("timeout");
				}
			}
			Logger.log("...");
			safeSleep(2000);
		}
		return -2;
	}

	private void readFromStream(int available) throws IOException
	{
		while (!timeout && (available > 0 || available == -1))
		{
			int b = inputStream.read();
			lastReadTime = System.currentTimeMillis();
			char c = (char) b;


			if (b == -1)
			{
				break;
			}
			else if (c == '\n')
			{
				byteOutputStream.close();
				byte[] bytes = byteOutputStream.toByteArray();
				byteOutputStream = new ByteArrayOutputStream();
				StringBuffer stringBuffer = new StringBuffer();
				InputStreamReader inputStreamReader = new InputStreamReader(new ByteArrayInputStream(bytes), ENCODING);
				while (true)
				{
					int t = inputStreamReader.read();
					if (t == -1)
					{
						break;
					}
					stringBuffer.append((char) t);
				}

				handleLine(stringBuffer.toString());
			}
			else
			{
				byteOutputStream.write(c);
			}
			if (available > 0)
			{
				available--;
			}
		}
	}