public async Task Post(string topic, SignalrMessage data) { if (topic == null || data == null) { return; } var pendingTasks = new List <Task>(); SubscriptionsByTopic subscriptionsByTopic; SignalrDataStore.SubscriptionsByTopic.TryGetValue(topic, out subscriptionsByTopic); if (subscriptionsByTopic != null) { var subscribedUsers = subscriptionsByTopic.SubscriptionsByUser; foreach (var subscribedUser in subscribedUsers) { if (subscribedUser.Key == null) { return; } var newTask = _dataHubContext.Clients.Client(subscribedUser.Key).Sync(data); pendingTasks.Add(newTask); } } await Task.WhenAll(pendingTasks); }
private async Task SendToSignalrHub(Message message) { var messageBytes = message.GetBytes(); var messageString = Encoding.UTF8.GetString(messageBytes); if (!string.IsNullOrEmpty(messageString)) { var messageBody = JsonConvert.DeserializeObject <MessageBody>(messageString); SignalrMessage signalrMessage = new SignalrMessage { machine_temperature = messageBody.machine.temperature, ambient_temperature = messageBody.ambient.temperature }; await hubConnection.InvokeAsync("Broadcast", "tempSensor", signalrMessage); } }
public async Task Push(string topic, SignalrMessage data) { try { if (topic == null || data == null) { return; } var response = await _hub.InvokeAsync <SignalrResponse>("receivePush", topic, data); if (!response.Success) { } } catch (Exception ex) { _logger.LogError(ex, "SignalrClient push error:" + ex.Message); } }
/// <summary> /// 客户端调用 /// </summary> /// <returns></returns> public async Task <SignalrResponse> receivePush(string topic, SignalrMessage data) { try { if (topic == null || data == null) { return(Error("topic or message is null")); } var pendingTasks = new List <Task>(); SubscriptionsByTopic subscriptionsByTopic; SignalrDataStore.SubscriptionsByTopic.TryGetValue(topic, out subscriptionsByTopic); if (subscriptionsByTopic != null) { var subscribedUsers = subscriptionsByTopic.SubscriptionsByUser; foreach (var subscribedUser in subscribedUsers) { if (subscribedUser.Key == null) { continue; } var newTask = Clients.Client(subscribedUser.Key).Sync(data); pendingTasks.Add(newTask); } } await Task.WhenAll(pendingTasks); return(Success()); } catch (Exception ex) { return(Error(ex.Message)); } }
public Task Broadcast(string sender, SignalrMessage message) { return(Clients .AllExcept(new[] { Context.ConnectionId }) .SendAsync("Broadcast", sender, message)); }