RosettaCodeData/Task/Echo-server/Scala/echo-server.scala

31 lines
1.0 KiB
Scala

import java.io.PrintWriter
import java.net.{ServerSocket, Socket}
import scala.io.Source
object EchoServer extends App {
private val serverSocket = new ServerSocket(23)
private var numConnections = 0
class ClientHandler(clientSocket: Socket) extends Runnable {
private val (connectionId, closeCmd) = ({numConnections += 1; numConnections}, ":exit")
override def run(): Unit =
new PrintWriter(clientSocket.getOutputStream, true) {
println(s"Connection opened, close with entering '$closeCmd'.")
Source.fromInputStream(clientSocket.getInputStream).getLines
.takeWhile(!_.toLowerCase.startsWith(closeCmd))
.foreach { line =>
Console.println(s"Received on #$connectionId: $line")
println(line) // Echo
}
Console.println(s"Gracefully closing connection, #$connectionId")
clientSocket.close()
}
println(s"Handling connection, $connectionId")
}
while (true) new Thread(new ClientHandler(serverSocket.accept())).start()
}