private async Task WriteMessage()

in src/Microsoft.Azure.SignalR.AspNet/HubHost/ServiceMessageBus.cs [65:124]


    private async Task WriteMessage(IServiceConnectionContainer connection, AppMessage appMessage)
    {
        var message = appMessage.Message;
        try
        {
            switch (message)
            {
                // For group related messages, make sure messages are written to the same partition
                case JoinGroupWithAckMessage joinGroupMessage:
                    try
                    {
                        await connection.WriteAckableMessageAsync(joinGroupMessage);
                    }
                    finally
                    {
                        _ackHandler.TriggerAck(appMessage.RawMessage.CommandId);
                    }
                    break;
                case LeaveGroupWithAckMessage leaveGroupMessage:
                    try
                    {
                        await connection.WriteAckableMessageAsync(leaveGroupMessage);
                    }
                    finally
                    {
                        _ackHandler.TriggerAck(appMessage.RawMessage.CommandId);
                    }
                    break;
                case ConnectionDataMessage connectionDataMessage:
                    var connectionId = connectionDataMessage.ConnectionId;
                    if (_clientConnectionManager.TryGetClientConnection(connectionId, out var clientConnection))
                    {
                        // If the client connection is connected to local server connection,
                        // send back directly from the established server connection
                        await clientConnection.ServiceConnection.WriteAsync(connectionDataMessage);
                    }
                    else
                    {
                        await connection.WriteAsync(message);
                    }
                    break;
                default:
                    await connection.WriteAsync(message);
                    break;
            }

            if (message is IMessageWithTracingId msg && msg.TracingId != null)
            {
                MessageLog.SucceededToSendMessage(_logger, msg);
            }
        }
        catch (Exception ex)
        {
            if (message is IMessageWithTracingId msg && msg.TracingId != null)
            {
                MessageLog.FailedToSendMessage(_logger, msg, ex);
            }
            throw;
        }
    }