public void All_event_types_are_round_trip_serializable(KernelEvent @event) { var originalEnvelope = KernelEventEnvelope.Create(@event); var json = KernelEventEnvelope.Serialize(originalEnvelope); _output.WriteLine($"{Environment.NewLine}{@event.GetType().Name}: {Environment.NewLine}{json}"); var deserializedEnvelope = KernelEventEnvelope.Deserialize(json); // ignore these specific properties because they're not serialized var ignoredProperties = new HashSet <string> { $"{nameof(CommandFailed)}.{nameof(CommandFailed.Exception)}", $"{nameof(DisplayEvent)}.{nameof(DisplayEvent.Value)}" }; deserializedEnvelope .Should() .BeEquivalentToRespectingRuntimeTypes( originalEnvelope, o => o.Excluding(envelope => envelope.Event.Command.Properties) .Excluding(envelope => ignoredProperties.Contains($"{envelope.SelectedMemberInfo.DeclaringType.Name}.{envelope.SelectedMemberInfo.Name}")) ); }
public async Task SendAsync(KernelEvent kernelEvent, CancellationToken cancellationToken) { cancellationToken.ThrowIfCancellationRequested(); _sender.WriteMessage(KernelEventEnvelope.Serialize(KernelEventEnvelope.Create(kernelEvent))); await _sender.FlushAsync(cancellationToken); }
public async Task SendAsync(KernelEvent kernelEvent, CancellationToken cancellationToken) { cancellationToken.ThrowIfCancellationRequested(); await _writer.WriteAsync(KernelEventEnvelope.Serialize(KernelEventEnvelope.Create(kernelEvent))); await _writer.WriteAsync(Delimiter); await _writer.FlushAsync(); }
public void Create_creates_envelope_with_reference_to_original_event() { IKernelEvent @event = new DisplayedValueProduced( 123, new SubmitCode("display(123)")); var envelope = KernelEventEnvelope.Create(@event); envelope.Event.Should().BeSameAs(@event); }
public void Create_creates_envelope_of_the_correct_type() { IKernelEvent @event = new DisplayedValueProduced( 123, new SubmitCode("display(123)")); var envelope = KernelEventEnvelope.Create(@event); envelope.Should().BeOfType <KernelEventEnvelope <DisplayedValueProduced> >(); }
public async Task when_a_KernelEventEnvelope_is_received_it_publishes_the_event() { var kernelEvent = new CommandSucceeded(new SubmitCode("x=1")); var message = KernelEventEnvelope.Serialize(KernelEventEnvelope.Create(kernelEvent)); using var stringReader = new StringReader(message); var receiver = new KernelCommandAndEventTextReceiver(stringReader); var d = await receiver.CommandsAndEventsAsync(CancellationToken.None).FirstAsync(); d.Event.Should().BeEquivalentTo(kernelEvent); }
public async Task when_a_KernelEvent_is_sent_it_writes_a_KernelEventEnvelope() { var kernelEvent = new CommandSucceeded(new SubmitCode("x=1")); var buffer = new StringBuilder(); var sender = new KernelCommandAndEventTextStreamSender(new StringWriter(buffer)); await sender.SendAsync(kernelEvent, CancellationToken.None); var envelopeMessage = buffer.ToString(); envelopeMessage.Should() .BeEquivalentTo(KernelEventEnvelope.Serialize(KernelEventEnvelope.Create(kernelEvent)) + KernelCommandAndEventTextStreamSender.Delimiter); }
public void All_event_types_are_round_trip_serializable(IKernelEvent @event) { var originalEnvelope = KernelEventEnvelope.Create(@event); var json = KernelEventEnvelope.Serialize(originalEnvelope); _output.WriteLine($"{Environment.NewLine}{@event.GetType().Name}: {Environment.NewLine}{json}"); var deserializedEnvelope = KernelEventEnvelope.Deserialize(json); deserializedEnvelope .Should() .BeEquivalentTo(originalEnvelope); }
public async Task SendAsync(KernelEvent kernelEvent, CancellationToken cancellationToken) { await _sender.SendAsync("kernelEventFromServer", KernelEventEnvelope.Serialize(KernelEventEnvelope.Create(kernelEvent)), cancellationToken : cancellationToken); }
private async Task PublishEventToContext(IKernelEvent kernelEvent, IHubContext <KernelHub> hubContext) { var eventEnvelope = KernelEventEnvelope.Create(kernelEvent); await hubContext.Clients.All.SendAsync("kernelEvent", KernelEventEnvelope.Serialize(eventEnvelope)); }