/// <summary> /// Hub method. Called when client sends a broadcast message. /// </summary> /// <param name="messageId">The messageId generated by client side</param> /// <param name="sender">The client who send the message</param> /// <param name="payload">The message content. Can be string / binary object in base64</param> /// <param name="isImage">Whether incoming message is an image message</param> /// <returns></returns> public async Task OnBroadcastMessageReceived(string messageId, string sender, string payload, bool isImage) { _logger.LogInformation("OnBroadcastMessageReceived {0} {1} payload size={2}", messageId, sender, payload.Length); // Create message Message message = _messageFactory.CreateBroadcastMessage(messageId, sender, payload, isImage, DateTime.UtcNow); // Send back server ack without waiting for method result long receivedTimeInLong = CSharpDateTimeToJavaLong(message.SendTime); _ = Clients.Client(Context.ConnectionId).SendAsync("serverAck", message.MessageId, receivedTimeInLong); // Try to store the message bool success = await _messageStorage.TryStoreMessageAsync(message); // Only send messages out when storage was a success if (success) { await SendBroadCastMessage(message); } }