Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

  • 민수야 너의 나이가 몇이니? :  민수야(액터선택)  너의 나이가 몇이니?( ASK )  - 응답을 기달림
  • 영희야 선생님이 찾으셔 교무실에 가봐 :  영희야(액터선택) 선생님이 찾으셔 교무실에 가봐( Tell) - 전달만함, 교무실제 교무실에 실제로 갔는지 알필요없음


토너 액터 구현

Code Block
languagec#
themeEmacs
public class TonerActor : ReceiveActor
{
    private readonly ILoggingAdapter logger = Context.GetLogger();
    private readonly string id;
    private int tonerAmount = 5;

    public TonerActor()
    {
        id = Guid.NewGuid().ToString();
        logger.Info($"토너 액터 생성:{id}");
        ReceiveAsync<int>(async usageAmount =>
        {
            logger.Info($"토너 소모 :{usageAmount}");

            if (tonerAmount < 1)
            {
                //송신자 에게 이야기하기
                Sender.Tell("토너가 모두 소모되었습니다.");
            }
            tonerAmount -= usageAmount;                
        });

        ReceiveAsync<string>(async msg =>
        {
            if (msg == "남은용량?")
            {
                Sender.Tell($"남은 용량은 {tonerAmount} 입니다.");
            }
        });
    }
}

...

  • 토너소모를 하기위해 int를 전송하는것이아닌 → 토너소모객체(TonerConsumption)를 정의하여 Tell 하는것이 권장됩니다.
  • Sender : 민수→영희 에게 질문을 하였다고 해봅시다. 최초 대화시작에서 민수는 영희를 지정할 필요가 있지만(액터선택) , 그것에 대한 영희의 응답은 대상지정이 아닌 나에게 질문을 한 대상자 즉 Sender이며 민수를 찾을 필요가 없습니다.


작동결과


git : 액터를 추가하고 상호 메지시 교환을 추가한 변경코드

...