Exemple #1
0
        public IMinionProxy CreateProxy(IClaptrapIdentity minionId)
        {
            var actorProxy = _actorProxyFactory.Create(new ActorId(minionId.Id), minionId.TypeCode);
            var proxy      = _factory.Invoke(actorProxy);

            return(proxy);
        }
        public async Task WakeAsync(IClaptrapIdentity identity)
        {
            if (!_minionLookUp.TryGetValue(identity.TypeCode, out var minions))
            {
                _logger.LogDebug($"There is no minions for {identity}", identity);
                return;
            }

            try
            {
                await Task.WhenAll(WakeAllAsync());
            }
            catch (Exception e)
            {
                _logger.LogError(e, "Failed to wake all minions");
            }

            IEnumerable <Task> WakeAllAsync()
            {
                foreach (var minionDesign in minions)
                {
                    var actorProxy = _actorProxyFactory.Create(new ActorId(identity.Id), minionDesign.ClaptrapTypeCode);
                    yield return(actorProxy.InvokeMethodAsync(nameof(IClaptrapMinionActor.WakeAsync)));
                }
            }
        }
Exemple #3
0
        public async Task HandleAsync(HttpContext context)
        {
            var sr   = new StreamReader(context.Request.Body);
            var body = await sr.ReadToEndAsync();

            var e         = _eventStringSerializer.Deserialize(body);
            var jsonModel = _eventSerializer.Serialize(e);

            var minionTypeCode = _minionTypeCodes[e.ClaptrapIdentity.TypeCode];

            var tasks = minionTypeCode.Select(async x =>
            {
                var minionId   = new ClaptrapIdentity(e.ClaptrapIdentity.Id, x);
                var actorProxy = _actorProxyFactory.Create(new ActorId(minionId.Id), minionId.TypeCode);
                await actorProxy.InvokeMethodAsync(nameof(IClaptrapMinionActor.MasterEventReceivedJsonAsync),
                                                   new[] { jsonModel });
            });

            await Task.WhenAll(tasks);
        }
Exemple #4
0
 /// <summary>
 /// Creates an Actor Proxy for making calls without Remoting.
 /// </summary>
 /// <param name="actorId">Actor Id.</param>
 /// <param name="actorType">Type of actor.</param>
 /// <returns>Actor proxy to interact with remote actor object.</returns>
 public static ActorProxy Create(ActorId actorId, string actorType)
 {
     return(DefaultProxyFactory.Create(actorId, actorType));
 }