/// <summary>
 /// Send message to specific user(id)
 /// </summary>
 /// <param name="message"></param>
 /// <param name="user">The userid receiving this message. UserId can be (optionally) specified in the constructor of the client</param>
 public async void SendToUser(T message, string user)
 {
     var url     = $"{baseAzureFunctionUrl}api/broadcast";
     var wrapped = new BroadcastMessage()
     {
         toGroupName = "",
         toUser      = user,
         fromUser    = userId,
         jsonmessage = JsonConvert.SerializeObject(message)
     };
     var         msg = JsonConvert.SerializeObject(wrapped);
     HttpContent c   = new StringContent(msg, Encoding.UTF8, "application/json");
     await httpClient.PostAsync(url, c);
 }
        /// <summary>
        /// Setup and connect to SignalR. Starts listening for incoming messages.
        /// </summary>
        public async void Start()
        {
            //Prevent multiple starts.
            if (connection != null)
            {
                return;
            }

            //Get the Azure SignalR service Url and Token.
            var connectionInfo = await GetSignalRConnectionInfo();

            //Build normal SignalR connection, with provided Token.
            connection = new HubConnectionBuilder()
                         .WithUrl(connectionInfo.Url, (options) =>
            {
                options.AccessTokenProvider = () => Task.FromResult(connectionInfo.AccessToken);
            })
                         .Build();

            //Auto reconnected on disconnect
            connection.Closed += async(error) =>
            {
                await Task.Delay(new Random().Next(0, 5) * 1000);

                await connection.StartAsync();
            };

            //Call the delegate when receiving message.
            connection.On <string>("newMessage", (wrappedmessage) =>
            {
                BroadcastMessage messageObject = JsonConvert.DeserializeObject <BroadcastMessage>(wrappedmessage);
                if (!((messageObject.fromUser == userId) & FilterOwnMessages))
                {
                    T message = JsonConvert.DeserializeObject <T>(messageObject.jsonmessage);
                    onMessage?.Invoke(message, messageObject);
                }
            });

            await connection.StartAsync();
        }