public static string Serialize(IKernelEventEnvelope eventEnvelope) { KernelCommandEnvelope.SerializationModel commandSerializationModel = null; if (eventEnvelope.Event.Command is not null && eventEnvelope.Event.Command is not NoCommand) { var commandEnvelope = KernelCommandEnvelope.Create(eventEnvelope.Event.Command); commandSerializationModel = new KernelCommandEnvelope.SerializationModel { command = commandEnvelope.Command, commandType = commandEnvelope.CommandType, token = eventEnvelope.Event.Command.GetToken() }; } var serializationModel = new SerializationModel { @event = eventEnvelope.Event, eventType = eventEnvelope.EventType, command = commandSerializationModel }; return(JsonSerializer.Serialize( serializationModel, Serializer.JsonSerializerOptions)); }
public async Task SendAsync(KernelCommand command, string token = null) { if (!string.IsNullOrWhiteSpace(token)) { command.SetToken(token); } var completionSource = new TaskCompletionSource <bool>(); token = command.GetToken(); var sub = _kernelEvents .Where(e => e.Command.GetToken() == token) .Subscribe(kernelEvent => { switch (kernelEvent) { case CommandFailed _: case CommandSucceeded _: completionSource.SetResult(true); break; } }); var envelope = KernelCommandEnvelope.Create(command); var serialized = KernelCommandEnvelope.Serialize(envelope); _output.Write(serialized); await completionSource.Task; sub.Dispose(); }