From a43812ed462630850edbf29bda182fbf1e5e1263 Mon Sep 17 00:00:00 2001 From: Joel Kronqvist Date: Thu, 14 Nov 2024 19:25:19 +0200 Subject: Immediate printing of actions & no prompt on blocking action & refactoring --- src/main/scala/utils.scala | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) (limited to 'src/main/scala/utils.scala') diff --git a/src/main/scala/utils.scala b/src/main/scala/utils.scala index f230be7..cfca568 100644 --- a/src/main/scala/utils.scala +++ b/src/main/scala/utils.scala @@ -1,5 +1,7 @@ package o1game.utils +import java.io.InputStream + /** Converts this string to an array of bytes (probably for transmission). * * @param str the string to convert @@ -7,3 +9,20 @@ package o1game.utils */ def stringToByteArray(str: String): Array[Byte] = str.toVector.map(_.toByte).toArray + +/** Reads n characters from the given InputStream blockingly. + * + * @param input the InputStream to read from + * @param n the number of bytes to read + * @return The read result, or None in case of failure + */ +def getNCharsFromSocket(input: InputStream, n: Int): Option[String] = + val buffer: Array[Byte] = Array.ofDim(n) + var i = 0 + var failed = false + while i < n && !failed do + val res = input.read(buffer, i, n - i) + if res < 0 then failed = true + i += res + // TODO: better error handling + if failed then None else Some(String(buffer)) -- cgit v1.2.3