summaryrefslogtreecommitdiff
path: root/test/files/presentation/random
diff options
context:
space:
mode:
Diffstat (limited to 'test/files/presentation/random')
-rw-r--r--test/files/presentation/random/Runner.scala3
-rw-r--r--test/files/presentation/random/src/Random.scala106
2 files changed, 109 insertions, 0 deletions
diff --git a/test/files/presentation/random/Runner.scala b/test/files/presentation/random/Runner.scala
new file mode 100644
index 0000000000..1c03e3d5ba
--- /dev/null
+++ b/test/files/presentation/random/Runner.scala
@@ -0,0 +1,3 @@
+import scala.tools.nsc.interactive.tests._
+
+object Test extends InteractiveTest
diff --git a/test/files/presentation/random/src/Random.scala b/test/files/presentation/random/src/Random.scala
new file mode 100644
index 0000000000..af76a28f47
--- /dev/null
+++ b/test/files/presentation/random/src/Random.scala
@@ -0,0 +1,106 @@
+package examples
+
+import java.io._
+import java.net.{InetAddress,ServerSocket,Socket,SocketException}
+import java.util.Random
+
+/**
+ * Simple client/server application using Java sockets.
+ *
+ * The server simply generates random integer values and
+ * the clients provide a filter function to the server
+ * to get only values they interested in (eg. even or
+ * odd values, and so on).
+ */
+object randomclient {
+
+ def main(args: Array[String]) {
+ val filter/*?*/ = try {
+ Integer.parseInt(args(0)/*?*/) match {
+ case 1 => x: Int => x % 2 != 0
+ case 2 => x: Int => x % 2 == 0
+ case _ => x: Int => x != 0
+ }
+ }
+ catch {
+ case _/*?*/ => x: Int => x < 100
+ }
+
+ try {
+ val ia = InetAddress.getByName("localhost")
+ val socket = new Socket(ia, 9999)
+ val out = new ObjectOutputStream(
+ new DataOutputStream(socket.getOutputStream()))
+ val in = new DataInputStream(socket.getInputStream())
+
+ out.writeObject(filter)
+ out.flush()
+
+ while (true) {
+ val x = in.readInt()
+ println("x = " + x)
+ }
+ out.close()
+ in.close()
+ socket.close()
+ }
+ catch {
+ case e: IOException =>
+ e.printStackTrace()
+ }
+ }
+
+}
+
+object randomserver {
+
+ def main(args: Array[String]): Unit = {
+ try {
+ val listener = new ServerSocket(9999);
+ while (true)
+ new ServerThread(listener.accept()).start();
+ listener.close()
+ }
+ catch {
+ case e: IOException =>
+ System.err.println("Could not listen on port: 9999.");
+ System.exit(-1)
+ }
+ }
+
+}
+
+case class ServerThread(socket: Socket) extends Thread("ServerThread") {
+
+ override def run(): Unit = {
+ val rand = new Random(System.currentTimeMillis());
+ try {
+ val out = new DataOutputStream(socket.getOutputStream());
+ val in = new ObjectInputStream(
+ new DataInputStream(socket.getInputStream()));
+
+ val filter = in.readObject().asInstanceOf[Int => Boolean];
+
+ while (true) {
+ var succeeded = false;
+ do {
+ val x = rand.nextInt(1000);
+ succeeded = filter(x);
+ if (succeeded) out.writeInt(x)
+ } while (! succeeded);
+ Thread.sleep(100)
+ }
+
+ out.close();
+ in.close();
+ socket.close()
+ }
+ catch {
+ case e: SocketException =>
+ () // avoid stack trace when stopping a client with Ctrl-C
+ case e: IOException =>
+ e.printStackTrace();
+ }
+ }
+
+} \ No newline at end of file