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--; } } }