From fe0dadbb0a441b5627cad73e1e3cbff1ca389db7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cl=C3=A9ment=20Pit-Claudel?= <clement.pit-claudel@epfl.ch> Date: Sun, 22 Dec 2024 11:04:23 +0100 Subject: [PATCH] server: Refactor wordlist loading --- .../cs214/webapp/server/web/WebServer.scala | 23 +++++++++++-------- 1 file changed, 13 insertions(+), 10 deletions(-) diff --git a/jvm/src/main/scala/cs214/webapp/server/web/WebServer.scala b/jvm/src/main/scala/cs214/webapp/server/web/WebServer.scala index 27dffdd..5906c37 100644 --- a/jvm/src/main/scala/cs214/webapp/server/web/WebServer.scala +++ b/jvm/src/main/scala/cs214/webapp/server/web/WebServer.scala @@ -4,18 +4,22 @@ package web import scala.collection.{concurrent, mutable} import scala.util.{Failure, Success, Try} +import scala.io.{Source} + import cask.endpoints.WsChannelActor +private def withResource[T](fname: String)(body: Option[Source] => T) = + Option(this.getClass.getResourceAsStream(f"/$fname")) match + case Some(stream) => + try body(Some(Source.fromInputStream(stream)(scala.io.Codec.UTF8))) + finally stream.close() + case None => body(None) + private case class Wordlist(fname: String): val words: Seq[String] = - import scala.io.{Source, Codec} - val wordstream = - Option(this.getClass.getResourceAsStream(f"/$fname")) - .getOrElse(sys.error(f"File not found: $fname")) - try - Source.fromInputStream(wordstream)(Codec.UTF8) - .getLines().map(_.split("\t").last).to(Vector) - finally wordstream.close() + withResource(fname): src => + src.getOrElse(sys.error(f"File not found: $fname")) + .getLines().map(_.split("\t").last).to(Seq) def randomWord: String = import scala.util.Random @@ -27,9 +31,8 @@ class TooManyInstances extends Exception("Too many instances.") object WebServer: val MAX_INSTANCES = 64000 - private val instanceIdsFileName = "eff_short_wordlist_1.txt" // Where to find the list of possible instance ids private val instanceIdLength = 4 // How many words do we concatenate for the instance id - private val instanceIdWords = Wordlist(instanceIdsFileName) + private val instanceIdWords = Wordlist("eff_short_wordlist_1.txt") private[web] val debug = false -- GitLab