示例#1
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);
        }
示例#2
0
        private async Task AsyncEventingBasicConsumerOnReceived(object sender,
                                                                BasicDeliverEventArgs args,
                                                                IClaptrapDesign minionDesign)
        {
            _logger.LogDebug("message received from rabbit mq, exchange : {exchange} ,routeKey : {routeKey}",
                             args.Exchange,
                             args.RoutingKey);
            var consumer = (IAsyncBasicConsumer)sender;

            consumer.Model.BasicAck(args.DeliveryTag, false);
            var payload     = Decompress(args);
            var data        = _messageSerializer.Deserialize(payload);
            var evt         = _eventStringSerializer.Deserialize(data);
            var minionId    = new ClaptrapIdentity(evt.ClaptrapIdentity.Id, minionDesign.ClaptrapTypeCode);
            var minionProxy = _minionLocator.CreateProxy(minionId);

            _logger.LogTrace("create minion proxy for {id}", minionId);
            await minionProxy.MasterEventReceivedAsync(new[] { evt });

            _logger.LogDebug("a message sent to minion {minionId}", minionId);
        }