diff --git a/server/src/main/scala/com/lbs/server/actor/conversation/Conversation.scala b/server/src/main/scala/com/lbs/server/actor/conversation/Conversation.scala index b6463b5..bd3fc49 100644 --- a/server/src/main/scala/com/lbs/server/actor/conversation/Conversation.scala +++ b/server/src/main/scala/com/lbs/server/actor/conversation/Conversation.scala @@ -27,25 +27,21 @@ trait Conversation[D] extends Actor with Domain[D] with Logger { override def receive: Receive = { case InitConversation => init() - case StartConversation | ContinueConversation => - try { - currentStep match { - case qa: QuestionAnswer => qa.question.questionFn(currentData) - case InternalConfiguration(fn) => - val nextStep = fn(currentData) - moveToNextStep(nextStep) - case _ => //do nothing - } - } catch { - case NonFatal(ex) => error("Step execution failed", ex) - } + case StartConversation | ContinueConversation => execute() case any => makeTransition(any) } - private def moveToNextStep(nextStep: NextStep): Unit = { - currentStep = nextStep.step - nextStep.data.foreach { data => - currentData = data + def execute(): Unit = { + try { + currentStep match { + case qa: QuestionAnswer => qa.question.questionFn(currentData) + case InternalConfiguration(fn) => + val nextStep = fn(currentData) + moveToNextStep(nextStep) + case _ => //do nothing + } + } catch { + case NonFatal(ex) => error("Step execution failed", ex) } } @@ -73,6 +69,13 @@ trait Conversation[D] extends Actor with Domain[D] with Logger { } } + private def moveToNextStep(nextStep: NextStep): Unit = { + currentStep = nextStep.step + nextStep.data.foreach { data => + currentData = data + } + } + private def init(): Unit = { require(startWithStep != null, "Entry point must be defined") currentStep = startWithStep