X-Git-Url: https://git.distorted.org.uk/~mdw/tripe-android/blobdiff_plain/25c3546915ef2105c0d53983939da840ddbde795..fd8dac1452773b24b9f7a5d8d9e3d5cf1abdcf2f:/admin.scala diff --git a/admin.scala b/admin.scala index 01d7995..fab8305 100644 --- a/admin.scala +++ b/admin.scala @@ -42,33 +42,30 @@ sealed abstract class Message; sealed abstract class JobMessage extends Message; case object JobOK extends JobMessage; -case class JobInfo(info: Seq[String]) extends JobMessage; -case class JobFail(err: Seq[String]) extends JobMessage; +final case class JobInfo(info: Seq[String]) extends JobMessage; +final case class JobFail(err: Seq[String]) extends JobMessage; case object JobLostConnection extends JobMessage; -case class BackgroundJobMessage(tag: String, msg: JobMessage) +final case class BackgroundJobMessage(tag: String, msg: JobMessage) extends Message; -case class JobDetached(tag: String) extends Message; +final case class JobDetached(tag: String) extends Message; sealed abstract class AsyncMessage extends Message; -case class Trace(msg: String) extends AsyncMessage; -case class Warning(err: Seq[String]) extends AsyncMessage; -case class Notify(note: Seq[String]) extends AsyncMessage; +final case class Trace(msg: String) extends AsyncMessage; +final case class Warning(err: Seq[String]) extends AsyncMessage; +final case class Notify(note: Seq[String]) extends AsyncMessage; case object ConnectionLost extends AsyncMessage; sealed abstract class ServiceMessage extends Message; -case class ServiceCancel(jobid: String) extends ServiceMessage; -case class ServiceClaim(svc: String, version: String) +final case class ServiceCancel(jobid: String) extends ServiceMessage; +final case class ServiceClaim(svc: String, version: String) extends ServiceMessage; -case class ServiceJob(jobid: String, svc: String, +final case class ServiceJob(jobid: String, svc: String, cmd: String, args: Seq[String]) extends ServiceMessage; /*----- Main code ---------------------------------------------------------*/ -object Connection { -} - class ConnectionClosed extends Exception; class ServerFailed(msg: String) extends Exception(msg); @@ -95,6 +92,8 @@ class Connection(val in: Reader, val out: Writer) val jobmap = new HashMap[String, this.Job]; // Maps tags to extant jobs. var bgseq = 0; // Next background job tag. + type Pub = Connection; + class Job extends Iterator[Seq[String]] { private[Connection] val ch = new Channel[JobMessage]; private[this] var nextmsg: Option[JobMessage] = None; @@ -250,7 +249,7 @@ println(s";; line: $line"); case msg: AsyncMessage => publish(msg); case _: ServiceMessage => - (); + ok; } } } catch { @@ -264,7 +263,7 @@ println(s";; line: $line"); j.ch.write(JobLostConnection); fgjob = None; notifyAll(); - case None => (); + case None => ok; } } publish(ConnectionLost);