From ec0fe7bb213c0d8ee45dd8cd52bbf197155e8598 Mon Sep 17 00:00:00 2001 From: Eugene Yokota Date: Tue, 1 Mar 2016 20:58:48 +0100 Subject: [PATCH] Split using newline. Also more error handling. --- .../scala/sbt/server/ClientConnection.scala | 2 +- .../main/scala/sbt/server/Serialization.scala | 22 +++++++++++-------- .../src/main/scala/sbt/server/Server.scala | 1 + 3 files changed, 15 insertions(+), 10 deletions(-) diff --git a/main/server/src/main/scala/sbt/server/ClientConnection.scala b/main/server/src/main/scala/sbt/server/ClientConnection.scala index 493c223a0..2e6426b51 100644 --- a/main/server/src/main/scala/sbt/server/ClientConnection.scala +++ b/main/server/src/main/scala/sbt/server/ClientConnection.scala @@ -10,7 +10,7 @@ abstract class ClientConnection(connection: Socket) { // TODO handle client disconnect private val running = new AtomicBoolean(true) - private val delimiter = '\0'.toByte + private val delimiter: Byte = '\n'.toByte private val out = connection.getOutputStream diff --git a/main/server/src/main/scala/sbt/server/Serialization.scala b/main/server/src/main/scala/sbt/server/Serialization.scala index fbb98fbc2..50730798b 100644 --- a/main/server/src/main/scala/sbt/server/Serialization.scala +++ b/main/server/src/main/scala/sbt/server/Serialization.scala @@ -7,6 +7,7 @@ import org.json4s.JsonAST.{ JArray, JString } import org.json4s._ import org.json4s.JsonDSL._ import org.json4s.native.JsonMethods._ +import org.json4s.ParserUtil.ParseException object Serialization { @@ -40,15 +41,18 @@ object Serialization { /** * @return A command or an invalid input description */ - def deserialize(bytes: Seq[Byte]): Either[String, Command] = { - val json = parse(new String(bytes.toArray, "UTF-8")) + def deserialize(bytes: Seq[Byte]): Either[String, Command] = + try { + val json = parse(new String(bytes.toArray, "UTF-8")) + implicit val formats = DefaultFormats - implicit val formats = DefaultFormats - - (json \ "type").extract[String] match { - case "command" => Right(Execution((json \ "command_line").extract[String])) - case cmd => Left(s"Unknown command type $cmd") + // TODO: is using extract safe? + (json \ "type").extract[String] match { + case "execution" => Right(Execution((json \ "command_line").extract[String])) + case cmd => Left(s"Unknown command type $cmd") + } + } catch { + case e: ParseException => Left(s"Parse error: ${e.getMessage}") + case e: MappingException => Left(s"Missing type field") } - } - } diff --git a/main/server/src/main/scala/sbt/server/Server.scala b/main/server/src/main/scala/sbt/server/Server.scala index bb2610db2..15a99f3a1 100644 --- a/main/server/src/main/scala/sbt/server/Server.scala +++ b/main/server/src/main/scala/sbt/server/Server.scala @@ -36,6 +36,7 @@ object Server { val connection = new ClientConnection(socket) { override def onCommand(command: Command): Unit = { + println(s"onCommand $command") commandQueue.add(command) } }