public async Task ProcessEventsAsync(PartitionContext context, IEnumerable <EventData> messages) { foreach (var @event in messages) { var args = new EventReceivedArgs(@event, context.PartitionId); Callback.Receive(args); } await context.CheckpointAsync(); }
private void Receive(object sender, EventReceivedArgs args) { Channel ch = OpenChannel(args.Event); bool isFirst = true; void Reply(ErrorInformation error, object value, bool more) { if (error != null) { SendError(ch, error); } else { if (isFirst && !more) { ch.Send("OK", new object[] { new[] { value } }); // Wrap into an array for backwards compatibility } else if (value != null) { ch.Send("STREAM", value); } if (!more) { if (!isFirst) { ch.Send("STREAM_DONE"); } CloseChannel(ch); } } isFirst = false; } ch.Error += (o, errorArgs) => RaiseError(errorArgs.Info); try { if (CoreServices.HasEvent(args.Event.Name)) { CoreServices.Invoke(this, args.Event.Name, ArgumentUnpacker.Unpack(args.Event.Args), Reply); } else { Service.Invoke(args.Event.Name, ArgumentUnpacker.Unpack(args.Event.Args), Reply); } } catch (Exception e) { SendError(ch, new ErrorInformation(e.GetType().Name, e.Message, e.StackTrace)); } }
protected virtual void OnEventReceived(EventReceivedArgs args) => EventReceived?.Invoke(this, args);