From 4de67b497e0e229fe4a42f66f833640b6e50fd5a Mon Sep 17 00:00:00 2001 From: Joel Kronqvist Date: Sun, 17 Nov 2024 13:45:44 +0200 Subject: Moved the project to an IDEA project & wrote part of README.txt --- .../Client/StdinLineReader.scala | 31 ++++++++++++++++++++++ 1 file changed, 31 insertions(+) create mode 100644 src/scalevalapokalypsi/Client/StdinLineReader.scala (limited to 'src/scalevalapokalypsi/Client/StdinLineReader.scala') diff --git a/src/scalevalapokalypsi/Client/StdinLineReader.scala b/src/scalevalapokalypsi/Client/StdinLineReader.scala new file mode 100644 index 0000000..6ba8761 --- /dev/null +++ b/src/scalevalapokalypsi/Client/StdinLineReader.scala @@ -0,0 +1,31 @@ +package scalevalapokalypsi.Client + +import scala.concurrent.Future +import scala.concurrent.ExecutionContext.Implicits.global +import scala.io.StdIn.readLine +import scala.util.{Try, Success, Failure} + +/** This class is for taking new lines from stdin when they are available. + * reading starts when either newLine or clear or startReading are called. + */ +class StdinLineReader: + + private var nextLine: Future[String] = Future.failed(Exception()) + + /** Returns a new line of input if there are any. */ + def newLine(): Option[String] = + this.nextLine.value match + case Some(Success(s)) => + this.startReading() + Some(s) + case Some(Failure(e)) => + this.startReading() + None + case None => None + + /** Discards the line that is currently being read and restarts reading */ + def startReading(): Unit = + this.nextLine = Future(readLine()) + + +end StdinLineReader -- cgit v1.2.3