Esempio n. 1
0
        /// <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);
            }
        }