Я изучаю, как создать простой сервер сокетов для вещания в Akka и Scala, я до сих пор закончил и может обрабатывать базовое подключение сокета от моего клиента тестирования. Вот код.Простой широковещательный сервер сокетов в Akka и Scala
import akka.actor.{Actor,ActorRef,Props,Inbox,ActorSystem}
import akka.io.{IO,Tcp}
import java.net.InetSocketAddress
class TestHandler extends Actor{
import Tcp._
def receive={
case Received(data) =>
println (data received in TestHandler")
// How can I broadcast the message to all connected client here?
case PeerClosed =>
println ("Client closed the connection")
context stop self
}
}
class SocketServer extends Actor{
import Tcp._
import context.system
val connections = new HashMap[String,ActorRef]
IO(Tcp) ! Bind(self,new InetSocketAddress("localhost",8000))
def receive ={
case Connected(remote,local) => //new connection
println("connected")
//create new handler and register it
val handler = context.actorOf(Props[TestHandler])
val connection = sender()
println (s"new connection from $connection")
// Add the new connection to the HashMap
connection ! Tcp.Register(handler)
}
}
object SocketServerTest extends App {
val system = ActorSystem("SocketServer")
val server = system.actorOf(Props[SocketServer],"Myserver")
val inbox = Inbox.create(system)
}
Для того, чтобы сделать радиопередачу я собираюсь реализовать HashMap и добавить ActorRef любого нового подключения к HashMap. Проблема i m сталкивается: я создал HashMap в классе SocketServer, и я не могу просто получить доступ к нему внутри класса TestHandler, где находится полученный (данные).
Я новичок в Scala/Akka, поэтому простите меня, если я попробую что-то глупое.
Если ответ полезным сделает голосование, если не комментировать по-крайней мере, не оставить его как пустой. – aravindKrishna