private async Task WriteCoreAsync <T>(T message, Func <T, Task> task) where T : ServiceMessage, IMessageWithTracingId { try { await task(message); } catch (Exception ex) { MessageLog.FailedToSendMessage(Logger, message, ex); throw; } if (message.TracingId != null) { MessageLog.SucceededToSendMessage(Logger, message); } }
private async Task <bool> WriteAckableCoreAsync <T>(T message, Func <T, Task <bool> > task) where T : ServiceMessage, IMessageWithTracingId { try { var result = await task(message); if (message.TracingId != null) { MessageLog.SucceededToSendMessage(Logger, message); } return(result); } catch (Exception ex) { MessageLog.FailedToSendMessage(Logger, message, ex); throw; } }
public override async Task SendConnectionAsync(string connectionId, string methodName, object[] args, CancellationToken cancellationToken = default) { if (IsInvalidArgument(connectionId)) { throw new ArgumentException(NullOrEmptyStringErrorMessage, nameof(connectionId)); } if (IsInvalidArgument(methodName)) { throw new ArgumentException(NullOrEmptyStringErrorMessage, nameof(methodName)); } if (_clientConnectionManager.ClientConnections.TryGetValue(connectionId, out var serviceConnectionContext)) { var message = new MultiConnectionDataMessage(new[] { connectionId }, SerializeAllProtocols(methodName, args)).WithTracingId(); if (message.TracingId != null) { MessageLog.StartToSendMessageToConnections(Logger, message); } try { // Write directly to this connection await serviceConnectionContext.ServiceConnection.WriteAsync(message); if (message.TracingId != null) { MessageLog.SucceededToSendMessage(Logger, message); } return; } catch (Exception ex) { MessageLog.FailedToSendMessage(Logger, message, ex); throw; } } await base.SendConnectionAsync(connectionId, methodName, args, cancellationToken); }