admin.scala: Make `Connection' be its own publisher type.
[tripe-android] / admin.scala
index 01d7995..fab8305 100644 (file)
@@ -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);