Page History
...
Code Block | ||||
---|---|---|---|---|
| ||||
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#의 문법지원때문인데
개발 언어학 적으로 파악하고자 하면 (람다/함수형/델리게이트) 등 참조 가능합니다.
어쨋든, 우리는 아주 짧은 코드로 액터 메시지 처리기 설계가 끝이났습니다.