2013-12-15 4 views

답변

3

akka를 배우는 것이 좋습니다. 작업은 시작하기 좋은 곳입니다.

시작하기 전에 몇 가지 사항을 살펴보십시오. 현재 코드와 모델링에 대해 몇 군데 질문 할 수 있습니다.

  1. AddComponent에는 wireName이 필요합니까? 배우 이름으로 전선을 찾으려고합니까? 일반적으로 이름 대신 ActorRef을 사용합니다.
  2. 또한 StateChangewireName이 필요한 이유는 무엇입니까? 정말 중요합니까? 상태 전파가 단순한 메시지를 사용하여 수행 될 수 있다고 말합니다. ActorRef 세트가 정상이므로 배우의 이름을 저장할 때 어떤 이점도 있다고 생각하지 않습니다.
  3. current: Boolean과 같은 기본 유형을 처리하는 것이 일반적으로 좋은 생각이 아니므로 StateChange과 마찬가지로 우리의 메시지에 의미 론적 의미를 부여하고 싶습니다.

내가 생각 해낸 일부 코드 : 필요에 따라

import akka.actor.{ActorLogging, Actor, ActorRef} 

case class AddComponent(actor: ActorRef) 
case class StateChange(state: Boolean) 

class Wire(var currentState: Boolean) extends Actor with ActorLogging { 
    var connections = Set.empty[ActorRef] 

    def receive: Actor.Receive = { 
    case AddComponent(actor) => 
     connections += actor 

    case StateChange(state) => 
     currentState = state 
     val connectionsToPropagateTo = connections - sender // Don't propagate back to sender 
     connectionsToPropagateTo.foreach { component => 
     component ! StateChange(currentState) // Send the component a StateChange message. 
     } 
    } 
} 

당신은 단순히 RemoveComponent과 다른 물건이를 확장 할 수 있습니다.

+0

나는 그것을 얻지 못한다 ... – user2947615

+0

무엇을 얻지 마라? 너 좀 정교 할 수있어. –