/// <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(); }