public async Task ReceiveAsync(IContext context) { switch (context.Message) { case Started m: await StartedAsync(); break; case Stopped m: await StoppedAsync(); break; case Restarting m: await RestartingAsync(); break; case IEnumerable <RemoteDeliver> m: var envelopes = new List <MessageEnvelope>(); var typeNames = new Dictionary <string, int>(); var targetNames = new Dictionary <string, int>(); var typeNameList = new List <string>(); var targetNameList = new List <string>(); foreach (var rd in m) { var targetName = rd.Target.Id; if (!targetNames.ContainsKey(targetName)) { targetNames.Add(targetName, typeNames.Count); targetNameList.Add(targetName); } var targetId = targetNames[targetName]; var typeName = rd.Message.Descriptor.File.Package + "." + rd.Message.Descriptor.Name; if (!typeNames.ContainsKey(typeName)) { typeNames.Add(typeName, typeNames.Count); typeNameList.Add(typeName); } var typeId = typeNames[typeName]; var bytes = Serialization.Serialize(rd.Message); var envelope = new MessageEnvelope { MessageData = bytes, Sender = rd.Sender, Target = targetId, TypeId = typeId, }; envelopes.Add(envelope); } var batch = new MessageBatch(); batch.TargetNames.AddRange(targetNameList); batch.TypeNames.AddRange(typeNameList); batch.Envelopes.AddRange(envelopes); await SendEnvelopesAsync(batch, context); break; } }
public async Task ReceiveAsync(IContext context) { switch (context.Message) { case Started _: await StartedAsync(); break; case Stopped _: await StoppedAsync(); _logger.LogDebug($"Stopped EndpointWriter at {_address}"); break; case Restarting _: await RestartingAsync(); break; case IEnumerable <RemoteDeliver> m: var envelopes = new List <MessageEnvelope>(); var typeNames = new Dictionary <string, int>(); var targetNames = new Dictionary <string, int>(); var typeNameList = new List <string>(); var targetNameList = new List <string>(); foreach (var rd in m) { var targetName = rd.Target.Id; var serializerId = rd.SerializerId == -1 ? _serializerId : rd.SerializerId; if (!targetNames.TryGetValue(targetName, out var targetId)) { targetId = targetNames[targetName] = targetNames.Count; targetNameList.Add(targetName); } var typeName = Serialization.GetTypeName(rd.Message, serializerId); if (!typeNames.TryGetValue(typeName, out var typeId)) { typeId = typeNames[typeName] = typeNames.Count; typeNameList.Add(typeName); } MessageHeader header = null; if (rd.Header != null && rd.Header.Count > 0) { header = new MessageHeader(); header.HeaderData.Add(rd.Header); } var bytes = Serialization.Serialize(rd.Message, serializerId); var envelope = new MessageEnvelope { MessageData = bytes, Sender = rd.Sender, Target = targetId, TypeId = typeId, SerializerId = serializerId, MessageHeader = header, }; envelopes.Add(envelope); } var batch = new MessageBatch(); batch.TargetNames.AddRange(targetNameList); batch.TypeNames.AddRange(typeNameList); batch.Envelopes.AddRange(envelopes); await SendEnvelopesAsync(batch, context); break; } }