admin.scala: Start on understanding the administration protocol.
[tripe-android] / main.scala
CommitLineData
3a2f1a4b
MW
1package uk.org.distorted;
2
3import java.io.{InputStreamReader, OutputStreamWriter};
4import scala.collection.mutable.StringBuilder;
5import scala.util.control.Breaks;
6
7package object tripe {
8 def main(args: Array[String])
9 {
10 println("Hello from Scala");
11 JNI.test();
12 val toy = JNI.make();
13 for (i <- 0 until args.length) println(f"$i%2d: ${args(i)}%s");
14 //toy match { case toy: Array[Byte] => toy(1) = -1; case _ => () }
15 JNI.check(toy);
16
17 val conn = new Connection;
18 try {
19 val rd = new InputStreamReader(new ConnectionInputStream(conn));
20 val wr = new OutputStreamWriter(new ConnectionOutputStream(conn));
21
22 wr.write("Hello, world!\n"); wr.flush();
23
24 val buf = new Array[Char](4096);
25 val line = new StringBuilder;
26
27 val R = new Breaks;
28 val L = new Breaks;
29 var any = false;
30 R.breakable {
31 while (true) {
32 val n = rd.read(buf);
33 if (n <= 0) R.break;
34 var pos = 0;
35 L.breakable {
36 while (true) {
37 val nl = buf.indexOf('\n', pos);
38 if (nl == -1 || nl >= n) {
39 if (pos < n)
40 { line.appendAll(buf, pos, n - pos); any = true; }
41 L.break;
42 }
43 val s = if (!any)
44 new String(buf, pos, nl - pos);
45 else {
46 line.appendAll(buf, pos, nl - pos);
47 val s = line.mkString;
48 line.clear(); any = false;
49 s
50 };
51 println(s"found line `$s'");
52 pos = nl + 1;
53 }
54 }
55 }
56 }
57
58 rd.close();
59 wr.close();
60 } finally {
61 conn.close();
62 }
63 }
64}