Versions Compared

Key

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

...

FSM(Finite-state machine) 이라고도 불립니다을 지원하기위한 기능입니다.


Code Block
languagec#
themeEmacs
title처리기가 변하는 Actor
linenumberstrue


	//foo 라고하면 행복해졌다가, bar라고하면 화나는 ACTOR
    public class HotSwapActor : UntypedActor
    {
        private ILoggingAdapter log = Context.GetLogger();  //기본탑재 로그  using Akka.Event

        protected override void OnReceive(object message)
        {
            log.Info("NORMAL:"+message.ToString());
            switch (message as string)
            {
                case "foo":                    
                    log.Info("행복해짐");
                    Become(Happy);
                    break;
                case "bar":
                    log.Info("화남");
                    Become(Angry);
                    break;
            }
        }

        private void Angry(object message)
        {
            log.Info("Angry:" + message.ToString());
            switch (message as string)
            {
                case "foo":
                    log.Info("행복해짐");
                    Become(Happy);
                    break;
                case "bar":                    
                    log.Info("이미 화가났다.");
                    Sender.Tell("이미 화가났다.");
                    break;
            }
        }

        private void Happy(object message)
        {
            log.Info("Happy:" + message.ToString());
            switch (message as string)
            {
                case "foo":
                    log.Info("이미 행복하다.");
                    Sender.Tell("이미 행복하다.");
                    break;
                case "bar":
                    log.Info("화남");
                    Become(Angry);
                    break;
            }
        }
    }

Code Block
languagec#
themeEmacs
titleTestCode
linenumberstrue
        protected void SomeTest3() //BecomeTest
        {
            IActorRef myActor = actorSystem.ActorOf<HotSwapActor>("myactor");            
            myActor.Tell("bar");
            myActor.Tell("foo");
            myActor.Tell("bar");
            myActor.Tell("foo");
            myActor.Tell("bar");
            myActor.Tell("bar");
            myActor.Tell("foo");
        }
Expand
titleResult

[INFO][2017-09-05 오전 6:50:10][Thread 0005][[akka://ServiceA/user/myactor#16204
11193]] NORMAL:bar
[INFO][2017-09-05 오전 6:50:10][Thread 0005][[akka://ServiceA/user/myactor#16204
11193]] 화남
[INFO][2017-09-05 오전 6:50:10][Thread 0005][[akka://ServiceA/user/myactor#16204
11193]] Angry:foo
[INFO][2017-09-05 오전 6:50:10][Thread 0005][[akka://ServiceA/user/myactor#16204
11193]] 행복해짐
[INFO][2017-09-05 오전 6:50:10][Thread 0005][[akka://ServiceA/user/myactor#16204
11193]] Happy:bar
[INFO][2017-09-05 오전 6:50:10][Thread 0005][[akka://ServiceA/user/myactor#16204
11193]] 화남
[INFO][2017-09-05 오전 6:50:10][Thread 0005][[akka://ServiceA/user/myactor#16204
11193]] Angry:foo
[INFO][2017-09-05 오전 6:50:10][Thread 0005][[akka://ServiceA/user/myactor#16204
11193]] 행복해짐
[INFO][2017-09-05 오전 6:50:10][Thread 0005][[akka://ServiceA/user/myactor#16204
11193]] Happy:bar
[INFO][2017-09-05 오전 6:50:10][Thread 0005][[akka://ServiceA/user/myactor#16204
11193]] 화남
[INFO][2017-09-05 오전 6:50:10][Thread 0005][[akka://ServiceA/user/myactor#16204
11193]] Angry:bar
[INFO][2017-09-05 오전 6:50:10][Thread 0005][[akka://ServiceA/user/myactor#16204
11193]] 이미 화가났다.
[INFO][2017-09-05 오전 6:50:10][Thread 0005][[akka://ServiceA/user/myactor#16204
11193]] Angry:foo
[INFO][2017-09-05 오전 6:50:10][Thread 0005][[akka://ServiceA/user/myactor#16204
11193]] 행복해짐
[INFO][2017-09-05 오전 6:50:10][Thread 0006][akka://ServiceA/deadLetters] Messag

...