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))); } } }
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); }
/// <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)); }