Nikky
11/01/2018, 2:35 AMprivate fun ProducerScope<ApiMessage>.deserializer() = object: ResponseDeserializable<Job> {
override fun deserialize(inputStream: InputStream) : Job {
return launch(<http://Dispatchers.IO|Dispatchers.IO>) {
inputStream.use { input ->
<http://logger.info|logger.info>("connection opened")
val buffer = StringBuilder()
while (isActive) {
val buf = ByteArray(1024)
Thread.sleep(10)
while (input.available() <= 0) {
if (isClosedForSend) break
Thread.sleep(10)
}
val chars = input.read(buf)
StreamConnection.logger.trace(String.format("read %d chars", chars))
if (chars > 0) {
val added = String(Arrays.copyOfRange(buf, 0, chars))
logger.debug("json: $added")
buffer.append(added)
while (buffer.toString().contains("\n")) {
val index = buffer.indexOf("\n")
val line = buffer.substring(0, index)
buffer.delete(0, index + 1)
val msg = ApiMessage.decode(line)
send(msg)
}
} else if (chars < 0) {
break
}
}
}
}
}
}