private async Task SendEnvelopesAsync(MessageBatch batch, IContext context) { try { await _streamWriter.WriteAsync(batch); } catch (Exception x) { context.Stash(); _logger.LogError($"gRPC Failed to send to address {_address}, reason {x.Message}"); throw; } }
private async Task SendEnvelopesAsync(MessageBatch batch, IContext context) { try { await _streamWriter.WriteAsync(batch); } catch (Exception x) { context.Stash(); Console.WriteLine($"[REMOTING] gRPC Failed to send to address {_address}, reason {x.Message}"); throw; } }
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 Task ReceiveAsync(IContext context) { var task = Actor.Done; switch (context.Message) { case Started _: task = StartedAsync(); break; case Stopped _: task = StoppedAsync(); _logger.LogDebug($"Stopped EndpointWriter at {_address}"); break; case Restarting _: task = RestartingAsync(); break; case EndpointTerminatedEvent _: context.Self.Stop(); 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.ToDictionary()); } 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); task = SendEnvelopesAsync(batch, context); break; } return(task); }
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); } var bytes = Serialization.Serialize(rd.Message, serializerId); var envelope = new MessageEnvelope { MessageData = bytes, Sender = rd.Sender, Target = targetId, TypeId = typeId, SerializerId = serializerId }; envelopes.Add(envelope); } var batch = new MessageBatch(); batch.TargetNames.AddRange(targetNameList); batch.TypeNames.AddRange(typeNameList); batch.Envelopes.AddRange(envelopes); await SendEnvelopesAsync(batch, context); break; } }