public void Bootup()
        {
            _log.InfoFormat("Claim local actor [{0}].", this.LocalActor);
            _log.InfoFormat("Register center actor [{0}].", this.CenterActor);

            var centerChannel = BuildActorCenterChannel(this.CenterActor, this.LocalActor);

            _directory             = new ActorDirectory(this.CenterActor, centerChannel, this.Encoder, this.Decoder);
            _factory               = new ActorChannelFactory(_directory, this.Encoder, this.Decoder);
            _manager               = new ActorChannelManager(_factory);
            _manager.Connected    += OnActorConnected;
            _manager.Disconnected += OnActorDisconnected;
            _manager.DataReceived += OnActorDataReceived;

            _manager.ActivateLocalActor(this.LocalActor);
            centerChannel.Open();

            int retryTimes = 0;

            while (true)
            {
                if (centerChannel.Active)
                {
                    break;
                }

                Task.Delay(TimeSpan.FromMilliseconds(100)).Wait();
                retryTimes++;
                if (retryTimes > 300)
                {
                    Shutdown();
                    throw new InvalidOperationException("Cannot connect to center actor.");
                }
            }
        }
示例#2
0
        public ActorChannelManager(ActorChannelFactory factory)
        {
            if (factory == null)
            {
                throw new ArgumentNullException("factory");
            }

            _factory = factory;
        }