forked from scala/scala
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathRandom.scala
106 lines (90 loc) · 2.44 KB
/
Random.scala
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
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();
}
}
}