Versions Compared

Key

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

...

Code Block
languagec#
linenumberstrue
 
    public class SomeMessage
    {
        public string message { set; get; }

    }

    public class MyActor : ReceiveActor
    {        

        public MyActor()
        {
            Receive<string>(message => {
                Sender.Tell("RE:" + message);                
            });

            Receive<SomeMessage>(message => {
                Sender.Tell("RE:" + message.message);
            });
        }
    }



Actor의 설명과 같이, 메시지를 유연하게 보낼수 있는 기본객체이다.

우리는 Actor설계시 간단하게 다음을 생각하면 된다.

  • 어떠한 메시지(구조체)를 전달할것인가?
  • 특정한 메시지에 어떻게 반응할것인가?


위 정의 코드는 그러한 설계에대해 구현을 한것이다.

  • 어떠한 메시지를 설계하고
  • 메시지를 받게 될시 , 접두어 "RE:" 를 붙여 해당 메시지를 그대로 돌려줘라

 생성자에서 , 패턴 매칭하여 메시지 처리기가 가능한것은 , ReveiveActor의 추상화덕분이며

IF문이나 스위치문없이 생성자에서 , 처리할 패턴별로 처리기가 등록이 가능한것은 C#의 문법지원때문인데

개발 언어학 적으로 파악하고자 하면 (람다/함수형/델리게이트) 등 참조 가능합니다.


어쨋든, 우리는 아주 짧은 코드로 액터 메시지 처리기 설계가 끝이났습니다.

액터 생성