Я изучаю Akka и Scala и пытаюсь создать с ним простой чат-сервер. Я написал приведенный ниже код, чтобы создать простой диспетчер сеансов для управления новыми созданными Актерами. Я могу создать новых актеров и поставить ActorRef на HashMap, однако, когда я пытаюсь отправить сообщение конкретному Актеру, сообщение просто не может быть получено Актером.Реализовать простой чат-сервер с akka и scala
Вот код.
import akka.actor.{ ActorRef, ActorSystem, Props, Actor, Inbox }
import scala.concurrent.duration._
import scala.collection.mutable.HashMap
case class ChatMsg(from:String,message:String)
case class Login(username:String)
class Session(userID:String) extends Actor{
val loginTime = System.currentTimeMillis
println(s"Session created time :$loginTime")
def receive ={
case ChatMsg(from,message) => println(s"message :$message from $from !")
}
}
class SessionManager extends Actor{
val system = ActorSystem("ChatSession")
val sessions = new HashMap[String,ActorRef]
val inbox = Inbox.create(system)
def receive ={
case Login(username) =>
println(s"$username Login, now create Actor")
val session = system.actorOf(Props(new Session(username)))
sessions += (username->session)
println(s"session added $sessions")
case ChatMsg(from,message) =>
sessions(from) ! message
}
}
object MyAkkaTest extends App {
val system = ActorSystem("MyAkkaTest")
val user = system.actorOf(Props[SessionManager],"MyActor")
val inbox = Inbox.create(system)
user ! Login("Mary")
user ! Login("John")
user ! ChatMsg("Mary","this is a testing message") //this message can never sent...
}
Это помогло! Благодаря! –