예제 #1
0
        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);
        }
예제 #2
0
        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);
            }
        }
예제 #3
0
        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);
            }
        }
예제 #4
0
        /// <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));
            }
        }
예제 #5
0
 public Task Broadcast(string sender, SignalrMessage message)
 {
     return(Clients
            .AllExcept(new[] { Context.ConnectionId })
            .SendAsync("Broadcast", sender, message));
 }